1 /** 2 ****************************************************************************** 3 * @file stm32f4xx_dac.h 4 * @author MCD Application Team 5 * @version V1.4.0 6 * @date 04-August-2014 7 * @brief This file contains all the functions prototypes for the DAC firmware 8 * library. 9 ****************************************************************************** 10 * @attention 11 * 12 * <h2><center>© COPYRIGHT 2014 STMicroelectronics</center></h2> 13 * 14 * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); 15 * You may not use this file except in compliance with the License. 16 * You may obtain a copy of the License at: 17 * 18 * http://www.st.com/software_license_agreement_liberty_v2 19 * 20 * Unless required by applicable law or agreed to in writing, software 21 * distributed under the License is distributed on an "AS IS" BASIS, 22 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 23 * See the License for the specific language governing permissions and 24 * limitations under the License. 25 * 26 ****************************************************************************** 27 */ 28 29 /* Define to prevent recursive inclusion -------------------------------------*/ 30 #ifndef __STM32F4xx_DAC_H 31 #define __STM32F4xx_DAC_H 32 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 /* Includes ------------------------------------------------------------------*/ 38 #include "stm32f4xx.h" 39 40 /** @addtogroup STM32F4xx_StdPeriph_Driver 41 * @{ 42 */ 43 44 /** @addtogroup DAC 45 * @{ 46 */ 47 48 /* Exported types ------------------------------------------------------------*/ 49 50 /** 51 * @brief DAC Init structure definition 52 */ 53 54 typedef struct 55 { 56 uint32_t DAC_Trigger; /*!< Specifies the external trigger for the selected DAC channel. 57 This parameter can be a value of @ref DAC_trigger_selection */ 58 59 uint32_t DAC_WaveGeneration; /*!< Specifies whether DAC channel noise waves or triangle waves 60 are generated, or whether no wave is generated. 61 This parameter can be a value of @ref DAC_wave_generation */ 62 63 uint32_t DAC_LFSRUnmask_TriangleAmplitude; /*!< Specifies the LFSR mask for noise wave generation or 64 the maximum amplitude triangle generation for the DAC channel. 65 This parameter can be a value of @ref DAC_lfsrunmask_triangleamplitude */ 66 67 uint32_t DAC_OutputBuffer; /*!< Specifies whether the DAC channel output buffer is enabled or disabled. 68 This parameter can be a value of @ref DAC_output_buffer */ 69 }DAC_InitTypeDef; 70 71 /* Exported constants --------------------------------------------------------*/ 72 73 /** @defgroup DAC_Exported_Constants 74 * @{ 75 */ 76 77 /** @defgroup DAC_trigger_selection 78 * @{ 79 */ 80 81 #define DAC_Trigger_None ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC1_DHRxxxx register 82 has been loaded, and not by external trigger */ 83 #define DAC_Trigger_T2_TRGO ((uint32_t)0x00000024) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */ 84 #define DAC_Trigger_T4_TRGO ((uint32_t)0x0000002C) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */ 85 #define DAC_Trigger_T5_TRGO ((uint32_t)0x0000001C) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */ 86 #define DAC_Trigger_T6_TRGO ((uint32_t)0x00000004) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */ 87 #define DAC_Trigger_T7_TRGO ((uint32_t)0x00000014) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */ 88 #define DAC_Trigger_T8_TRGO ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel */ 89 90 #define DAC_Trigger_Ext_IT9 ((uint32_t)0x00000034) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */ 91 #define DAC_Trigger_Software ((uint32_t)0x0000003C) /*!< Conversion started by software trigger for DAC channel */ 92 93 #define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_Trigger_None) || \ 94 ((TRIGGER) == DAC_Trigger_T6_TRGO) || \ 95 ((TRIGGER) == DAC_Trigger_T8_TRGO) || \ 96 ((TRIGGER) == DAC_Trigger_T7_TRGO) || \ 97 ((TRIGGER) == DAC_Trigger_T5_TRGO) || \ 98 ((TRIGGER) == DAC_Trigger_T2_TRGO) || \ 99 ((TRIGGER) == DAC_Trigger_T4_TRGO) || \ 100 ((TRIGGER) == DAC_Trigger_Ext_IT9) || \ 101 ((TRIGGER) == DAC_Trigger_Software)) 102 103 /** 104 * @} 105 */ 106 107 /** @defgroup DAC_wave_generation 108 * @{ 109 */ 110 111 #define DAC_WaveGeneration_None ((uint32_t)0x00000000) 112 #define DAC_WaveGeneration_Noise ((uint32_t)0x00000040) 113 #define DAC_WaveGeneration_Triangle ((uint32_t)0x00000080) 114 #define IS_DAC_GENERATE_WAVE(WAVE) (((WAVE) == DAC_WaveGeneration_None) || \ 115 ((WAVE) == DAC_WaveGeneration_Noise) || \ 116 ((WAVE) == DAC_WaveGeneration_Triangle)) 117 /** 118 * @} 119 */ 120 121 /** @defgroup DAC_lfsrunmask_triangleamplitude 122 * @{ 123 */ 124 125 #define DAC_LFSRUnmask_Bit0 ((uint32_t)0x00000000) /*!< Unmask DAC channel LFSR bit0 for noise wave generation */ 126 #define DAC_LFSRUnmask_Bits1_0 ((uint32_t)0x00000100) /*!< Unmask DAC channel LFSR bit[1:0] for noise wave generation */ 127 #define DAC_LFSRUnmask_Bits2_0 ((uint32_t)0x00000200) /*!< Unmask DAC channel LFSR bit[2:0] for noise wave generation */ 128 #define DAC_LFSRUnmask_Bits3_0 ((uint32_t)0x00000300) /*!< Unmask DAC channel LFSR bit[3:0] for noise wave generation */ 129 #define DAC_LFSRUnmask_Bits4_0 ((uint32_t)0x00000400) /*!< Unmask DAC channel LFSR bit[4:0] for noise wave generation */ 130 #define DAC_LFSRUnmask_Bits5_0 ((uint32_t)0x00000500) /*!< Unmask DAC channel LFSR bit[5:0] for noise wave generation */ 131 #define DAC_LFSRUnmask_Bits6_0 ((uint32_t)0x00000600) /*!< Unmask DAC channel LFSR bit[6:0] for noise wave generation */ 132 #define DAC_LFSRUnmask_Bits7_0 ((uint32_t)0x00000700) /*!< Unmask DAC channel LFSR bit[7:0] for noise wave generation */ 133 #define DAC_LFSRUnmask_Bits8_0 ((uint32_t)0x00000800) /*!< Unmask DAC channel LFSR bit[8:0] for noise wave generation */ 134 #define DAC_LFSRUnmask_Bits9_0 ((uint32_t)0x00000900) /*!< Unmask DAC channel LFSR bit[9:0] for noise wave generation */ 135 #define DAC_LFSRUnmask_Bits10_0 ((uint32_t)0x00000A00) /*!< Unmask DAC channel LFSR bit[10:0] for noise wave generation */ 136 #define DAC_LFSRUnmask_Bits11_0 ((uint32_t)0x00000B00) /*!< Unmask DAC channel LFSR bit[11:0] for noise wave generation */ 137 #define DAC_TriangleAmplitude_1 ((uint32_t)0x00000000) /*!< Select max triangle amplitude of 1 */ 138 #define DAC_TriangleAmplitude_3 ((uint32_t)0x00000100) /*!< Select max triangle amplitude of 3 */ 139 #define DAC_TriangleAmplitude_7 ((uint32_t)0x00000200) /*!< Select max triangle amplitude of 7 */ 140 #define DAC_TriangleAmplitude_15 ((uint32_t)0x00000300) /*!< Select max triangle amplitude of 15 */ 141 #define DAC_TriangleAmplitude_31 ((uint32_t)0x00000400) /*!< Select max triangle amplitude of 31 */ 142 #define DAC_TriangleAmplitude_63 ((uint32_t)0x00000500) /*!< Select max triangle amplitude of 63 */ 143 #define DAC_TriangleAmplitude_127 ((uint32_t)0x00000600) /*!< Select max triangle amplitude of 127 */ 144 #define DAC_TriangleAmplitude_255 ((uint32_t)0x00000700) /*!< Select max triangle amplitude of 255 */ 145 #define DAC_TriangleAmplitude_511 ((uint32_t)0x00000800) /*!< Select max triangle amplitude of 511 */ 146 #define DAC_TriangleAmplitude_1023 ((uint32_t)0x00000900) /*!< Select max triangle amplitude of 1023 */ 147 #define DAC_TriangleAmplitude_2047 ((uint32_t)0x00000A00) /*!< Select max triangle amplitude of 2047 */ 148 #define DAC_TriangleAmplitude_4095 ((uint32_t)0x00000B00) /*!< Select max triangle amplitude of 4095 */ 149 150 #define IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(VALUE) (((VALUE) == DAC_LFSRUnmask_Bit0) || \ 151 ((VALUE) == DAC_LFSRUnmask_Bits1_0) || \ 152 ((VALUE) == DAC_LFSRUnmask_Bits2_0) || \ 153 ((VALUE) == DAC_LFSRUnmask_Bits3_0) || \ 154 ((VALUE) == DAC_LFSRUnmask_Bits4_0) || \ 155 ((VALUE) == DAC_LFSRUnmask_Bits5_0) || \ 156 ((VALUE) == DAC_LFSRUnmask_Bits6_0) || \ 157 ((VALUE) == DAC_LFSRUnmask_Bits7_0) || \ 158 ((VALUE) == DAC_LFSRUnmask_Bits8_0) || \ 159 ((VALUE) == DAC_LFSRUnmask_Bits9_0) || \ 160 ((VALUE) == DAC_LFSRUnmask_Bits10_0) || \ 161 ((VALUE) == DAC_LFSRUnmask_Bits11_0) || \ 162 ((VALUE) == DAC_TriangleAmplitude_1) || \ 163 ((VALUE) == DAC_TriangleAmplitude_3) || \ 164 ((VALUE) == DAC_TriangleAmplitude_7) || \ 165 ((VALUE) == DAC_TriangleAmplitude_15) || \ 166 ((VALUE) == DAC_TriangleAmplitude_31) || \ 167 ((VALUE) == DAC_TriangleAmplitude_63) || \ 168 ((VALUE) == DAC_TriangleAmplitude_127) || \ 169 ((VALUE) == DAC_TriangleAmplitude_255) || \ 170 ((VALUE) == DAC_TriangleAmplitude_511) || \ 171 ((VALUE) == DAC_TriangleAmplitude_1023) || \ 172 ((VALUE) == DAC_TriangleAmplitude_2047) || \ 173 ((VALUE) == DAC_TriangleAmplitude_4095)) 174 /** 175 * @} 176 */ 177 178 /** @defgroup DAC_output_buffer 179 * @{ 180 */ 181 182 #define DAC_OutputBuffer_Enable ((uint32_t)0x00000000) 183 #define DAC_OutputBuffer_Disable ((uint32_t)0x00000002) 184 #define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OutputBuffer_Enable) || \ 185 ((STATE) == DAC_OutputBuffer_Disable)) 186 /** 187 * @} 188 */ 189 190 /** @defgroup DAC_Channel_selection 191 * @{ 192 */ 193 194 #define DAC_Channel_1 ((uint32_t)0x00000000) 195 #define DAC_Channel_2 ((uint32_t)0x00000010) 196 #define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_Channel_1) || \ 197 ((CHANNEL) == DAC_Channel_2)) 198 /** 199 * @} 200 */ 201 202 /** @defgroup DAC_data_alignement 203 * @{ 204 */ 205 206 #define DAC_Align_12b_R ((uint32_t)0x00000000) 207 #define DAC_Align_12b_L ((uint32_t)0x00000004) 208 #define DAC_Align_8b_R ((uint32_t)0x00000008) 209 #define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_Align_12b_R) || \ 210 ((ALIGN) == DAC_Align_12b_L) || \ 211 ((ALIGN) == DAC_Align_8b_R)) 212 /** 213 * @} 214 */ 215 216 /** @defgroup DAC_wave_generation 217 * @{ 218 */ 219 220 #define DAC_Wave_Noise ((uint32_t)0x00000040) 221 #define DAC_Wave_Triangle ((uint32_t)0x00000080) 222 #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_Wave_Noise) || \ 223 ((WAVE) == DAC_Wave_Triangle)) 224 /** 225 * @} 226 */ 227 228 /** @defgroup DAC_data 229 * @{ 230 */ 231 232 #define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0) 233 /** 234 * @} 235 */ 236 237 /** @defgroup DAC_interrupts_definition 238 * @{ 239 */ 240 #define DAC_IT_DMAUDR ((uint32_t)0x00002000) 241 #define IS_DAC_IT(IT) (((IT) == DAC_IT_DMAUDR)) 242 243 /** 244 * @} 245 */ 246 247 /** @defgroup DAC_flags_definition 248 * @{ 249 */ 250 251 #define DAC_FLAG_DMAUDR ((uint32_t)0x00002000) 252 #define IS_DAC_FLAG(FLAG) (((FLAG) == DAC_FLAG_DMAUDR)) 253 254 /** 255 * @} 256 */ 257 258 /** 259 * @} 260 */ 261 262 /* Exported macro ------------------------------------------------------------*/ 263 /* Exported functions --------------------------------------------------------*/ 264 265 /* Function used to set the DAC configuration to the default reset state *****/ 266 void DAC_DeInit(void); 267 268 /* DAC channels configuration: trigger, output buffer, data format functions */ 269 void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct); 270 void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct); 271 void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState); 272 void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState); 273 void DAC_DualSoftwareTriggerCmd(FunctionalState NewState); 274 void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState); 275 void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data); 276 void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data); 277 void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1); 278 uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel); 279 280 /* DMA management functions ***************************************************/ 281 void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState); 282 283 /* Interrupts and flags management functions **********************************/ 284 void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState); 285 FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG); 286 void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG); 287 ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT); 288 void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT); 289 290 #ifdef __cplusplus 291 } 292 #endif 293 294 #endif /*__STM32F4xx_DAC_H */ 295 296 /** 297 * @} 298 */ 299 300 /** 301 * @} 302 */ 303 304 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 305