STM32L443xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_ll_dac.c 00004 * @author MCD Application Team 00005 * @brief DAC LL module driver 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2017 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 #if defined(USE_FULL_LL_DRIVER) 00019 00020 /* Includes ------------------------------------------------------------------*/ 00021 #include "stm32l4xx_ll_dac.h" 00022 #include "stm32l4xx_ll_bus.h" 00023 00024 #ifdef USE_FULL_ASSERT 00025 #include "stm32_assert.h" 00026 #else 00027 #define assert_param(expr) ((void)0U) 00028 #endif 00029 00030 /** @addtogroup STM32L4xx_LL_Driver 00031 * @{ 00032 */ 00033 00034 #if defined (DAC1) 00035 00036 /** @addtogroup DAC_LL DAC 00037 * @{ 00038 */ 00039 00040 /* Private types -------------------------------------------------------------*/ 00041 /* Private variables ---------------------------------------------------------*/ 00042 /* Private constants ---------------------------------------------------------*/ 00043 /* Private macros ------------------------------------------------------------*/ 00044 00045 /** @addtogroup DAC_LL_Private_Macros 00046 * @{ 00047 */ 00048 00049 #if defined(DAC_CHANNEL2_SUPPORT) 00050 #define IS_LL_DAC_CHANNEL(__DAC_CHANNEL__) \ 00051 ( \ 00052 ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1) \ 00053 || ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2) \ 00054 ) 00055 #else 00056 #define IS_LL_DAC_CHANNEL(__DAC_CHANNEL__) \ 00057 ( \ 00058 ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1) \ 00059 ) 00060 #endif /* DAC_CHANNEL2_SUPPORT */ 00061 00062 #if defined (DAC_CR_TSEL1_3) 00063 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ 00064 ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO) \ 00065 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ 00066 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \ 00067 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \ 00068 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \ 00069 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \ 00070 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ 00071 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \ 00072 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM1_OUT) \ 00073 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM2_OUT) \ 00074 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ 00075 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ 00076 ) 00077 #else 00078 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ 00079 ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ 00080 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ 00081 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \ 00082 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \ 00083 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \ 00084 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \ 00085 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ 00086 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ 00087 ) 00088 #endif /* DAC_CR_TSEL1_3 */ 00089 00090 #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__) \ 00091 ( ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE) \ 00092 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \ 00093 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \ 00094 ) 00095 00096 #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_MODE__, __WAVE_AUTO_GENERATION_CONFIG__) \ 00097 ( (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \ 00098 && ( ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0) \ 00099 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0) \ 00100 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0) \ 00101 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0) \ 00102 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0) \ 00103 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0) \ 00104 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0) \ 00105 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0) \ 00106 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0) \ 00107 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0) \ 00108 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0) \ 00109 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0)) \ 00110 ) \ 00111 ||(((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \ 00112 && ( ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1) \ 00113 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3) \ 00114 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7) \ 00115 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15) \ 00116 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31) \ 00117 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63) \ 00118 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127) \ 00119 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255) \ 00120 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511) \ 00121 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023) \ 00122 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047) \ 00123 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095)) \ 00124 ) \ 00125 ) 00126 00127 #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__) \ 00128 ( ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE) \ 00129 || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE) \ 00130 ) 00131 00132 #define IS_LL_DAC_OUTPUT_CONNECTION(__OUTPUT_CONNECTION__) \ 00133 ( ((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_GPIO) \ 00134 || ((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_INTERNAL) \ 00135 ) 00136 00137 #define IS_LL_DAC_OUTPUT_MODE(__OUTPUT_MODE__) \ 00138 ( ((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_NORMAL) \ 00139 || ((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_SAMPLE_AND_HOLD) \ 00140 ) 00141 00142 /** 00143 * @} 00144 */ 00145 00146 00147 /* Private function prototypes -----------------------------------------------*/ 00148 00149 /* Exported functions --------------------------------------------------------*/ 00150 /** @addtogroup DAC_LL_Exported_Functions 00151 * @{ 00152 */ 00153 00154 /** @addtogroup DAC_LL_EF_Init 00155 * @{ 00156 */ 00157 00158 /** 00159 * @brief De-initialize registers of the selected DAC instance 00160 * to their default reset values. 00161 * @param DACx DAC instance 00162 * @retval An ErrorStatus enumeration value: 00163 * - SUCCESS: DAC registers are de-initialized 00164 * - ERROR: not applicable 00165 */ 00166 ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx) 00167 { 00168 /* Check the parameters */ 00169 assert_param(IS_DAC_ALL_INSTANCE(DACx)); 00170 00171 /* Force reset of DAC clock */ 00172 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC1); 00173 00174 /* Release reset of DAC clock */ 00175 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC1); 00176 00177 return SUCCESS; 00178 } 00179 00180 /** 00181 * @brief Initialize some features of DAC channel. 00182 * @note @ref LL_DAC_Init() aims to ease basic configuration of a DAC channel. 00183 * Leaving it ready to be enabled and output: 00184 * a level by calling one of 00185 * @ref LL_DAC_ConvertData12RightAligned 00186 * @ref LL_DAC_ConvertData12LeftAligned 00187 * @ref LL_DAC_ConvertData8RightAligned 00188 * or one of the supported autogenerated wave. 00189 * @note This function allows configuration of: 00190 * - Output mode 00191 * - Trigger 00192 * - Wave generation 00193 * @note The setting of these parameters by function @ref LL_DAC_Init() 00194 * is conditioned to DAC state: 00195 * DAC channel must be disabled. 00196 * @param DACx DAC instance 00197 * @param DAC_Channel This parameter can be one of the following values: 00198 * @arg @ref LL_DAC_CHANNEL_1 00199 * @arg @ref LL_DAC_CHANNEL_2 (1) 00200 * 00201 * (1) On this STM32 serie, parameter not available on all devices. 00202 * Refer to device datasheet for channels availability. 00203 * @param DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure 00204 * @retval An ErrorStatus enumeration value: 00205 * - SUCCESS: DAC registers are initialized 00206 * - ERROR: DAC registers are not initialized 00207 */ 00208 ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct) 00209 { 00210 ErrorStatus status = SUCCESS; 00211 00212 /* Check the parameters */ 00213 assert_param(IS_DAC_ALL_INSTANCE(DACx)); 00214 assert_param(IS_LL_DAC_CHANNEL(DAC_Channel)); 00215 assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource)); 00216 assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer)); 00217 assert_param(IS_LL_DAC_OUTPUT_CONNECTION(DAC_InitStruct->OutputConnection)); 00218 assert_param(IS_LL_DAC_OUTPUT_MODE(DAC_InitStruct->OutputMode)); 00219 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration)); 00220 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE) 00221 { 00222 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGeneration, 00223 DAC_InitStruct->WaveAutoGenerationConfig)); 00224 } 00225 00226 /* Note: Hardware constraint (refer to description of this function) */ 00227 /* DAC instance must be disabled. */ 00228 if (LL_DAC_IsEnabled(DACx, DAC_Channel) == 0U) 00229 { 00230 /* Configuration of DAC channel: */ 00231 /* - TriggerSource */ 00232 /* - WaveAutoGeneration */ 00233 /* - OutputBuffer */ 00234 /* - OutputConnection */ 00235 /* - OutputMode */ 00236 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE) 00237 { 00238 MODIFY_REG(DACx->CR, 00239 (DAC_CR_TSEL1 00240 | DAC_CR_WAVE1 00241 | DAC_CR_MAMP1 00242 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00243 , 00244 (DAC_InitStruct->TriggerSource 00245 | DAC_InitStruct->WaveAutoGeneration 00246 | DAC_InitStruct->WaveAutoGenerationConfig 00247 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00248 ); 00249 } 00250 else 00251 { 00252 MODIFY_REG(DACx->CR, 00253 (DAC_CR_TSEL1 00254 | DAC_CR_WAVE1 00255 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00256 , 00257 (DAC_InitStruct->TriggerSource 00258 | LL_DAC_WAVE_AUTO_GENERATION_NONE 00259 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00260 ); 00261 } 00262 MODIFY_REG(DACx->MCR, 00263 (DAC_MCR_MODE1_1 00264 | DAC_MCR_MODE1_0 00265 | DAC_MCR_MODE1_2 00266 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00267 , 00268 (DAC_InitStruct->OutputBuffer 00269 | DAC_InitStruct->OutputConnection 00270 | DAC_InitStruct->OutputMode 00271 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00272 ); 00273 } 00274 else 00275 { 00276 /* Initialization error: DAC instance is not disabled. */ 00277 status = ERROR; 00278 } 00279 return status; 00280 } 00281 00282 /** 00283 * @brief Set each @ref LL_DAC_InitTypeDef field to default value. 00284 * @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure 00285 * whose fields will be set to default values. 00286 * @retval None 00287 */ 00288 void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct) 00289 { 00290 /* Set DAC_InitStruct fields to default values */ 00291 DAC_InitStruct->TriggerSource = LL_DAC_TRIG_SOFTWARE; 00292 DAC_InitStruct->WaveAutoGeneration = LL_DAC_WAVE_AUTO_GENERATION_NONE; 00293 /* Note: Parameter discarded if wave auto generation is disabled, */ 00294 /* set anyway to its default value. */ 00295 DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0; 00296 DAC_InitStruct->OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE; 00297 DAC_InitStruct->OutputConnection = LL_DAC_OUTPUT_CONNECT_GPIO; 00298 DAC_InitStruct->OutputMode = LL_DAC_OUTPUT_MODE_NORMAL; 00299 } 00300 00301 /** 00302 * @} 00303 */ 00304 00305 /** 00306 * @} 00307 */ 00308 00309 /** 00310 * @} 00311 */ 00312 00313 #endif /* DAC1 */ 00314 00315 /** 00316 * @} 00317 */ 00318 00319 #endif /* USE_FULL_LL_DRIVER */ 00320