STM32H735xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32h7xx_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 "stm32h7xx_ll_dac.h" 00022 #include "stm32h7xx_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 /* USE_FULL_ASSERT */ 00029 00030 /** @addtogroup STM32H7xx_LL_Driver 00031 * @{ 00032 */ 00033 00034 #if defined(DAC1) || defined(DAC2) 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 #define IS_LL_DAC_CHANNEL(__DAC_CHANNEL__) \ 00049 ( ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1) \ 00050 || ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2) \ 00051 ) 00052 00053 #if defined (HRTIM1) 00054 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ 00055 ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ 00056 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO) \ 00057 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ 00058 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \ 00059 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \ 00060 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \ 00061 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \ 00062 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ 00063 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \ 00064 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_TRGO1) \ 00065 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_TRGO2) \ 00066 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM1_OUT) \ 00067 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM2_OUT) \ 00068 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ 00069 ) 00070 #elif defined (DAC2) 00071 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ 00072 ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ 00073 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO) \ 00074 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ 00075 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \ 00076 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \ 00077 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \ 00078 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \ 00079 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ 00080 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \ 00081 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM1_OUT) \ 00082 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM2_OUT) \ 00083 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ 00084 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM3_OUT) \ 00085 ) 00086 #else 00087 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ 00088 ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ 00089 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO) \ 00090 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ 00091 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \ 00092 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \ 00093 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \ 00094 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \ 00095 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ 00096 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \ 00097 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM1_OUT) \ 00098 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM2_OUT) \ 00099 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ 00100 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM23_TRGO) \ 00101 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM24_TRGO) \ 00102 ) 00103 #endif 00104 00105 #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__) \ 00106 ( ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE) \ 00107 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \ 00108 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \ 00109 ) 00110 00111 #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_MODE__, __WAVE_AUTO_GENERATION_CONFIG__) \ 00112 ( (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \ 00113 && ( ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0) \ 00114 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0) \ 00115 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0) \ 00116 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0) \ 00117 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0) \ 00118 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0) \ 00119 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0) \ 00120 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0) \ 00121 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0) \ 00122 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0) \ 00123 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0) \ 00124 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0)) \ 00125 ) \ 00126 ||(((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \ 00127 && ( ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1) \ 00128 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3) \ 00129 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7) \ 00130 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15) \ 00131 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31) \ 00132 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63) \ 00133 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127) \ 00134 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255) \ 00135 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511) \ 00136 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023) \ 00137 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047) \ 00138 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095)) \ 00139 ) \ 00140 ) 00141 00142 #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__) \ 00143 ( ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE) \ 00144 || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE) \ 00145 ) 00146 00147 #define IS_LL_DAC_OUTPUT_CONNECTION(__OUTPUT_CONNECTION__) \ 00148 ( ((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_GPIO) \ 00149 || ((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_INTERNAL) \ 00150 ) 00151 00152 #define IS_LL_DAC_OUTPUT_MODE(__OUTPUT_MODE__) \ 00153 ( ((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_NORMAL) \ 00154 || ((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_SAMPLE_AND_HOLD) \ 00155 ) 00156 00157 /** 00158 * @} 00159 */ 00160 00161 00162 /* Private function prototypes -----------------------------------------------*/ 00163 00164 /* Exported functions --------------------------------------------------------*/ 00165 /** @addtogroup DAC_LL_Exported_Functions 00166 * @{ 00167 */ 00168 00169 /** @addtogroup DAC_LL_EF_Init 00170 * @{ 00171 */ 00172 00173 /** 00174 * @brief De-initialize registers of the selected DAC instance 00175 * to their default reset values. 00176 * @param DACx DAC instance 00177 * @retval An ErrorStatus enumeration value: 00178 * - SUCCESS: DAC registers are de-initialized 00179 * - ERROR: not applicable 00180 */ 00181 ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx) 00182 { 00183 /* Check the parameters */ 00184 assert_param(IS_DAC_ALL_INSTANCE(DACx)); 00185 00186 if(DACx == DAC1) 00187 { 00188 /* Force reset of DAC clock */ 00189 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC12); 00190 00191 /* Release reset of DAC clock */ 00192 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC12); 00193 } 00194 #if defined (DAC2) 00195 else 00196 { 00197 /* Force reset of DAC clock */ 00198 LL_APB4_GRP1_ForceReset(LL_APB4_GRP1_PERIPH_DAC2); 00199 00200 /* Release reset of DAC clock */ 00201 LL_APB4_GRP1_ReleaseReset(LL_APB4_GRP1_PERIPH_DAC2); 00202 } 00203 #endif 00204 00205 00206 return SUCCESS; 00207 } 00208 00209 /** 00210 * @brief Initialize some features of DAC channel. 00211 * @note @ref LL_DAC_Init() aims to ease basic configuration of a DAC channel. 00212 * Leaving it ready to be enabled and output: 00213 * a level by calling one of 00214 * @ref LL_DAC_ConvertData12RightAligned 00215 * @ref LL_DAC_ConvertData12LeftAligned 00216 * @ref LL_DAC_ConvertData8RightAligned 00217 * or one of the supported autogenerated wave. 00218 * @note This function allows configuration of: 00219 * - Output mode 00220 * - Trigger 00221 * - Wave generation 00222 * @note The setting of these parameters by function @ref LL_DAC_Init() 00223 * is conditioned to DAC state: 00224 * DAC channel must be disabled. 00225 * @param DACx DAC instance 00226 * @param DAC_Channel This parameter can be one of the following values: 00227 * @arg @ref LL_DAC_CHANNEL_1 00228 * @arg @ref LL_DAC_CHANNEL_2 00229 * @param DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure 00230 * @retval An ErrorStatus enumeration value: 00231 * - SUCCESS: DAC registers are initialized 00232 * - ERROR: DAC registers are not initialized 00233 */ 00234 ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct) 00235 { 00236 ErrorStatus status = SUCCESS; 00237 00238 /* Check the parameters */ 00239 assert_param(IS_DAC_ALL_INSTANCE(DACx)); 00240 assert_param(IS_LL_DAC_CHANNEL(DAC_Channel)); 00241 assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource)); 00242 assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer)); 00243 assert_param(IS_LL_DAC_OUTPUT_CONNECTION(DAC_InitStruct->OutputConnection)); 00244 assert_param(IS_LL_DAC_OUTPUT_MODE(DAC_InitStruct->OutputMode)); 00245 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration)); 00246 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE) 00247 { 00248 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGeneration, 00249 DAC_InitStruct->WaveAutoGenerationConfig)); 00250 } 00251 00252 /* Note: Hardware constraint (refer to description of this function) */ 00253 /* DAC instance must be disabled. */ 00254 if (LL_DAC_IsEnabled(DACx, DAC_Channel) == 0UL) 00255 { 00256 /* Configuration of DAC channel: */ 00257 /* - TriggerSource */ 00258 /* - WaveAutoGeneration */ 00259 /* - OutputBuffer */ 00260 /* - OutputConnection */ 00261 /* - OutputMode */ 00262 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE) 00263 { 00264 MODIFY_REG(DACx->CR, 00265 (DAC_CR_TSEL1 00266 | DAC_CR_WAVE1 00267 | DAC_CR_MAMP1 00268 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00269 , 00270 (DAC_InitStruct->TriggerSource 00271 | DAC_InitStruct->WaveAutoGeneration 00272 | DAC_InitStruct->WaveAutoGenerationConfig 00273 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00274 ); 00275 } 00276 else 00277 { 00278 MODIFY_REG(DACx->CR, 00279 (DAC_CR_TSEL1 00280 | DAC_CR_WAVE1 00281 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00282 , 00283 (DAC_InitStruct->TriggerSource 00284 | LL_DAC_WAVE_AUTO_GENERATION_NONE 00285 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00286 ); 00287 } 00288 MODIFY_REG(DACx->MCR, 00289 (DAC_MCR_MODE1_1 00290 | DAC_MCR_MODE1_0 00291 | DAC_MCR_MODE1_2 00292 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00293 , 00294 (DAC_InitStruct->OutputBuffer 00295 | DAC_InitStruct->OutputConnection 00296 | DAC_InitStruct->OutputMode 00297 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00298 ); 00299 } 00300 else 00301 { 00302 /* Initialization error: DAC instance is not disabled. */ 00303 status = ERROR; 00304 } 00305 return status; 00306 } 00307 00308 /** 00309 * @brief Set each @ref LL_DAC_InitTypeDef field to default value. 00310 * @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure 00311 * whose fields will be set to default values. 00312 * @retval None 00313 */ 00314 void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct) 00315 { 00316 /* Set DAC_InitStruct fields to default values */ 00317 DAC_InitStruct->TriggerSource = LL_DAC_TRIG_SOFTWARE; 00318 DAC_InitStruct->WaveAutoGeneration = LL_DAC_WAVE_AUTO_GENERATION_NONE; 00319 /* Note: Parameter discarded if wave auto generation is disabled, */ 00320 /* set anyway to its default value. */ 00321 DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0; 00322 DAC_InitStruct->OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE; 00323 DAC_InitStruct->OutputConnection = LL_DAC_OUTPUT_CONNECT_GPIO; 00324 DAC_InitStruct->OutputMode = LL_DAC_OUTPUT_MODE_NORMAL; 00325 } 00326 00327 /** 00328 * @} 00329 */ 00330 00331 /** 00332 * @} 00333 */ 00334 00335 /** 00336 * @} 00337 */ 00338 00339 #endif /* DAC1 || DAC2 */ 00340 00341 /** 00342 * @} 00343 */ 00344 00345 #endif /* USE_FULL_LL_DRIVER */ 00346