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