1 /** 2 ****************************************************************************** 3 * @file stm32f4xx_hal_dac.h 4 * @author MCD Application Team 5 * @brief Header file of DAC HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * <h2><center>© Copyright (c) 2017 STMicroelectronics. 10 * All rights reserved.</center></h2> 11 * 12 * This software component is licensed by ST under BSD 3-Clause license, 13 * the "License"; You may not use this file except in compliance with the 14 * License. You may obtain a copy of the License at: 15 * opensource.org/licenses/BSD-3-Clause 16 * 17 ****************************************************************************** 18 */ 19 20 /* Define to prevent recursive inclusion -------------------------------------*/ 21 #ifndef __STM32F4xx_HAL_DAC_H 22 #define __STM32F4xx_HAL_DAC_H 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ 29 defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ 30 defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) ||\ 31 defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F413xx) || defined(STM32F423xx) 32 33 /* Includes ------------------------------------------------------------------*/ 34 #include "stm32f4xx_hal_def.h" 35 36 /** @addtogroup STM32F4xx_HAL_Driver 37 * @{ 38 */ 39 40 /** @addtogroup DAC 41 * @{ 42 */ 43 44 /* Exported types ------------------------------------------------------------*/ 45 /** @defgroup DAC_Exported_Types DAC Exported Types 46 * @{ 47 */ 48 49 /** 50 * @brief HAL State structures definition 51 */ 52 typedef enum 53 { 54 HAL_DAC_STATE_RESET = 0x00U, /*!< DAC not yet initialized or disabled */ 55 HAL_DAC_STATE_READY = 0x01U, /*!< DAC initialized and ready for use */ 56 HAL_DAC_STATE_BUSY = 0x02U, /*!< DAC internal processing is ongoing */ 57 HAL_DAC_STATE_TIMEOUT = 0x03U, /*!< DAC timeout state */ 58 HAL_DAC_STATE_ERROR = 0x04U /*!< DAC error state */ 59 }HAL_DAC_StateTypeDef; 60 61 /** 62 * @brief DAC handle Structure definition 63 */ 64 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 65 typedef struct __DAC_HandleTypeDef 66 #else 67 typedef struct 68 #endif 69 { 70 DAC_TypeDef *Instance; /*!< Register base address */ 71 72 __IO HAL_DAC_StateTypeDef State; /*!< DAC communication state */ 73 74 HAL_LockTypeDef Lock; /*!< DAC locking object */ 75 76 DMA_HandleTypeDef *DMA_Handle1; /*!< Pointer DMA handler for channel 1 */ 77 78 DMA_HandleTypeDef *DMA_Handle2; /*!< Pointer DMA handler for channel 2 */ 79 80 __IO uint32_t ErrorCode; /*!< DAC Error code */ 81 82 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 83 void (* ConvCpltCallbackCh1) (struct __DAC_HandleTypeDef *hdac); 84 void (* ConvHalfCpltCallbackCh1) (struct __DAC_HandleTypeDef *hdac); 85 void (* ErrorCallbackCh1) (struct __DAC_HandleTypeDef *hdac); 86 void (* DMAUnderrunCallbackCh1) (struct __DAC_HandleTypeDef *hdac); 87 void (* ConvCpltCallbackCh2) (struct __DAC_HandleTypeDef* hdac); 88 void (* ConvHalfCpltCallbackCh2) (struct __DAC_HandleTypeDef* hdac); 89 void (* ErrorCallbackCh2) (struct __DAC_HandleTypeDef* hdac); 90 void (* DMAUnderrunCallbackCh2) (struct __DAC_HandleTypeDef* hdac); 91 92 void (* MspInitCallback) (struct __DAC_HandleTypeDef *hdac); 93 void (* MspDeInitCallback ) (struct __DAC_HandleTypeDef *hdac); 94 #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */ 95 96 }DAC_HandleTypeDef; 97 98 /** 99 * @brief DAC Configuration regular Channel structure definition 100 */ 101 typedef struct 102 { 103 uint32_t DAC_Trigger; /*!< Specifies the external trigger for the selected DAC channel. 104 This parameter can be a value of @ref DAC_trigger_selection */ 105 106 uint32_t DAC_OutputBuffer; /*!< Specifies whether the DAC channel output buffer is enabled or disabled. 107 This parameter can be a value of @ref DAC_output_buffer */ 108 }DAC_ChannelConfTypeDef; 109 110 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 111 /** 112 * @brief HAL DAC Callback ID enumeration definition 113 */ 114 typedef enum 115 { 116 HAL_DAC_CH1_COMPLETE_CB_ID = 0x00U, /*!< DAC CH1 Complete Callback ID */ 117 HAL_DAC_CH1_HALF_COMPLETE_CB_ID = 0x01U, /*!< DAC CH1 half Complete Callback ID */ 118 HAL_DAC_CH1_ERROR_ID = 0x02U, /*!< DAC CH1 error Callback ID */ 119 HAL_DAC_CH1_UNDERRUN_CB_ID = 0x03U, /*!< DAC CH1 underrun Callback ID */ 120 HAL_DAC_CH2_COMPLETE_CB_ID = 0x04U, /*!< DAC CH2 Complete Callback ID */ 121 HAL_DAC_CH2_HALF_COMPLETE_CB_ID = 0x05U, /*!< DAC CH2 half Complete Callback ID */ 122 HAL_DAC_CH2_ERROR_ID = 0x06U, /*!< DAC CH2 error Callback ID */ 123 HAL_DAC_CH2_UNDERRUN_CB_ID = 0x07U, /*!< DAC CH2 underrun Callback ID */ 124 HAL_DAC_MSP_INIT_CB_ID = 0x08U, /*!< DAC MspInit Callback ID */ 125 HAL_DAC_MSP_DEINIT_CB_ID = 0x09U, /*!< DAC MspDeInit Callback ID */ 126 HAL_DAC_ALL_CB_ID = 0x0AU /*!< DAC All ID */ 127 }HAL_DAC_CallbackIDTypeDef; 128 129 /** 130 * @brief HAL DAC Callback pointer definition 131 */ 132 typedef void (*pDAC_CallbackTypeDef)(DAC_HandleTypeDef *hdac); 133 #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */ 134 /** 135 * @} 136 */ 137 138 /* Exported constants --------------------------------------------------------*/ 139 /** @defgroup DAC_Exported_Constants DAC Exported Constants 140 * @{ 141 */ 142 143 /** @defgroup DAC_Error_Code DAC Error Code 144 * @{ 145 */ 146 #define HAL_DAC_ERROR_NONE 0x00U /*!< No error */ 147 #define HAL_DAC_ERROR_DMAUNDERRUNCH1 0x01U /*!< DAC channel1 DAM underrun error */ 148 #define HAL_DAC_ERROR_DMAUNDERRUNCH2 0x02U /*!< DAC channel2 DAM underrun error */ 149 #define HAL_DAC_ERROR_DMA 0x04U /*!< DMA error */ 150 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 151 #define HAL_DAC_ERROR_INVALID_CALLBACK 0x10U /*!< Invalid callback error */ 152 #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */ 153 /** 154 * @} 155 */ 156 157 /** @defgroup DAC_trigger_selection DAC Trigger Selection 158 * @{ 159 */ 160 161 #define DAC_TRIGGER_NONE 0x00000000U /*!< Conversion is automatic once the DAC1_DHRxxxx register 162 has been loaded, and not by external trigger */ 163 #define DAC_TRIGGER_T2_TRGO ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TEN1)) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */ 164 #define DAC_TRIGGER_T4_TRGO ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */ 165 #define DAC_TRIGGER_T5_TRGO ((uint32_t)(DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */ 166 #define DAC_TRIGGER_T6_TRGO ((uint32_t)DAC_CR_TEN1) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */ 167 #define DAC_TRIGGER_T7_TRGO ((uint32_t)(DAC_CR_TSEL1_1 | DAC_CR_TEN1)) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */ 168 #define DAC_TRIGGER_T8_TRGO ((uint32_t)(DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel */ 169 170 #define DAC_TRIGGER_EXT_IT9 ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TEN1)) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */ 171 #define DAC_TRIGGER_SOFTWARE ((uint32_t)(DAC_CR_TSEL1 | DAC_CR_TEN1)) /*!< Conversion started by software trigger for DAC channel */ 172 /** 173 * @} 174 */ 175 176 /** @defgroup DAC_output_buffer DAC Output Buffer 177 * @{ 178 */ 179 #define DAC_OUTPUTBUFFER_ENABLE 0x00000000U 180 #define DAC_OUTPUTBUFFER_DISABLE ((uint32_t)DAC_CR_BOFF1) 181 /** 182 * @} 183 */ 184 185 /** @defgroup DAC_Channel_selection DAC Channel Selection 186 * @{ 187 */ 188 #define DAC_CHANNEL_1 0x00000000U 189 #define DAC_CHANNEL_2 0x00000010U 190 /** 191 * @} 192 */ 193 194 /** @defgroup DAC_data_alignment DAC Data Alignment 195 * @{ 196 */ 197 #define DAC_ALIGN_12B_R 0x00000000U 198 #define DAC_ALIGN_12B_L 0x00000004U 199 #define DAC_ALIGN_8B_R 0x00000008U 200 /** 201 * @} 202 */ 203 204 /** @defgroup DAC_flags_definition DAC Flags Definition 205 * @{ 206 */ 207 #define DAC_FLAG_DMAUDR1 ((uint32_t)DAC_SR_DMAUDR1) 208 #define DAC_FLAG_DMAUDR2 ((uint32_t)DAC_SR_DMAUDR2) 209 /** 210 * @} 211 */ 212 213 /** @defgroup DAC_IT_definition DAC IT Definition 214 * @{ 215 */ 216 #define DAC_IT_DMAUDR1 ((uint32_t)DAC_SR_DMAUDR1) 217 #define DAC_IT_DMAUDR2 ((uint32_t)DAC_SR_DMAUDR2) 218 /** 219 * @} 220 */ 221 222 /** 223 * @} 224 */ 225 226 /* Exported macro ------------------------------------------------------------*/ 227 /** @defgroup DAC_Exported_Macros DAC Exported Macros 228 * @{ 229 */ 230 231 /** @brief Reset DAC handle state 232 * @param __HANDLE__ specifies the DAC handle. 233 * @retval None 234 */ 235 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 236 #define __HAL_DAC_RESET_HANDLE_STATE(__HANDLE__) do { \ 237 (__HANDLE__)->State = HAL_DAC_STATE_RESET; \ 238 (__HANDLE__)->MspInitCallback = NULL; \ 239 (__HANDLE__)->MspDeInitCallback = NULL; \ 240 } while(0) 241 #else 242 #define __HAL_DAC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DAC_STATE_RESET) 243 #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */ 244 245 /** @brief Enable the DAC channel 246 * @param __HANDLE__ specifies the DAC handle. 247 * @param __DAC_Channel__ specifies the DAC channel 248 * @retval None 249 */ 250 #define __HAL_DAC_ENABLE(__HANDLE__, __DAC_Channel__) ((__HANDLE__)->Instance->CR |= (DAC_CR_EN1 << (__DAC_Channel__))) 251 252 /** @brief Disable the DAC channel 253 * @param __HANDLE__ specifies the DAC handle 254 * @param __DAC_Channel__ specifies the DAC channel. 255 * @retval None 256 */ 257 #define __HAL_DAC_DISABLE(__HANDLE__, __DAC_Channel__) ((__HANDLE__)->Instance->CR &= ~(DAC_CR_EN1 << (__DAC_Channel__))) 258 259 /** @brief Enable the DAC interrupt 260 * @param __HANDLE__ specifies the DAC handle 261 * @param __INTERRUPT__ specifies the DAC interrupt. 262 * @retval None 263 */ 264 #define __HAL_DAC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) |= (__INTERRUPT__)) 265 266 /** @brief Disable the DAC interrupt 267 * @param __HANDLE__ specifies the DAC handle 268 * @param __INTERRUPT__ specifies the DAC interrupt. 269 * @retval None 270 */ 271 #define __HAL_DAC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__)) 272 273 /** @brief Checks if the specified DAC interrupt source is enabled or disabled. 274 * @param __HANDLE__ DAC handle 275 * @param __INTERRUPT__ DAC interrupt source to check 276 * This parameter can be any combination of the following values: 277 * @arg DAC_IT_DMAUDR1: DAC channel 1 DMA underrun interrupt 278 * @arg DAC_IT_DMAUDR2: DAC channel 2 DMA underrun interrupt 279 * @retval State of interruption (SET or RESET) 280 */ 281 #define __HAL_DAC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR & (__INTERRUPT__)) == (__INTERRUPT__)) 282 283 /** @brief Get the selected DAC's flag status. 284 * @param __HANDLE__ specifies the DAC handle. 285 * @param __FLAG__ specifies the flag to clear. 286 * This parameter can be any combination of the following values: 287 * @arg DAC_FLAG_DMAUDR1: DMA underrun 1 flag 288 * @arg DAC_FLAG_DMAUDR2: DMA underrun 2 flag 289 * @retval None 290 */ 291 #define __HAL_DAC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) 292 293 /** @brief Clear the DAC's flag. 294 * @param __HANDLE__ specifies the DAC handle. 295 * @param __FLAG__ specifies the flag to clear. 296 * This parameter can be any combination of the following values: 297 * @arg DAC_FLAG_DMAUDR1: DMA underrun 1 flag 298 * @arg DAC_FLAG_DMAUDR2: DMA underrun 2 flag 299 * @retval None 300 */ 301 #define __HAL_DAC_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR) = (__FLAG__)) 302 /** 303 * @} 304 */ 305 306 /* Include DAC HAL Extension module */ 307 #include "stm32f4xx_hal_dac_ex.h" 308 309 /* Exported functions --------------------------------------------------------*/ 310 /** @addtogroup DAC_Exported_Functions 311 * @{ 312 */ 313 314 /** @addtogroup DAC_Exported_Functions_Group1 315 * @{ 316 */ 317 /* Initialization/de-initialization functions *********************************/ 318 HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef* hdac); 319 HAL_StatusTypeDef HAL_DAC_DeInit(DAC_HandleTypeDef* hdac); 320 void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac); 321 void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac); 322 /** 323 * @} 324 */ 325 326 /** @addtogroup DAC_Exported_Functions_Group2 327 * @{ 328 */ 329 /* I/O operation functions ****************************************************/ 330 HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel); 331 HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel); 332 HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment); 333 HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel); 334 uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel); 335 /** 336 * @} 337 */ 338 339 /** @addtogroup DAC_Exported_Functions_Group3 340 * @{ 341 */ 342 /* Peripheral Control functions ***********************************************/ 343 HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel); 344 HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data); 345 /** 346 * @} 347 */ 348 349 /** @addtogroup DAC_Exported_Functions_Group4 350 * @{ 351 */ 352 /* Peripheral State functions *************************************************/ 353 HAL_DAC_StateTypeDef HAL_DAC_GetState(DAC_HandleTypeDef* hdac); 354 void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac); 355 uint32_t HAL_DAC_GetError(DAC_HandleTypeDef *hdac); 356 357 void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac); 358 void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef* hdac); 359 void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac); 360 void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac); 361 362 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 363 /* DAC callback registering/unregistering */ 364 HAL_StatusTypeDef HAL_DAC_RegisterCallback (DAC_HandleTypeDef *hdac, HAL_DAC_CallbackIDTypeDef CallbackID, pDAC_CallbackTypeDef pCallback); 365 HAL_StatusTypeDef HAL_DAC_UnRegisterCallback (DAC_HandleTypeDef *hdac, HAL_DAC_CallbackIDTypeDef CallbackID); 366 #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */ 367 /** 368 * @} 369 */ 370 371 /** 372 * @} 373 */ 374 /* Private types -------------------------------------------------------------*/ 375 /* Private variables ---------------------------------------------------------*/ 376 /* Private constants ---------------------------------------------------------*/ 377 /** @defgroup DAC_Private_Constants DAC Private Constants 378 * @{ 379 */ 380 381 /** 382 * @} 383 */ 384 385 /* Private macros ------------------------------------------------------------*/ 386 /** @defgroup DAC_Private_Macros DAC Private Macros 387 * @{ 388 */ 389 #define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0U) 390 #define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_ALIGN_12B_R) || \ 391 ((ALIGN) == DAC_ALIGN_12B_L) || \ 392 ((ALIGN) == DAC_ALIGN_8B_R)) 393 #define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_CHANNEL_1) || \ 394 ((CHANNEL) == DAC_CHANNEL_2)) 395 #define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OUTPUTBUFFER_ENABLE) || \ 396 ((STATE) == DAC_OUTPUTBUFFER_DISABLE)) 397 398 #define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_TRIGGER_NONE) || \ 399 ((TRIGGER) == DAC_TRIGGER_T2_TRGO) || \ 400 ((TRIGGER) == DAC_TRIGGER_T8_TRGO) || \ 401 ((TRIGGER) == DAC_TRIGGER_T7_TRGO) || \ 402 ((TRIGGER) == DAC_TRIGGER_T5_TRGO) || \ 403 ((TRIGGER) == DAC_TRIGGER_T6_TRGO) || \ 404 ((TRIGGER) == DAC_TRIGGER_T4_TRGO) || \ 405 ((TRIGGER) == DAC_TRIGGER_EXT_IT9) || \ 406 ((TRIGGER) == DAC_TRIGGER_SOFTWARE)) 407 408 /** @brief Set DHR12R1 alignment 409 * @param __ALIGNMENT__ specifies the DAC alignment 410 * @retval None 411 */ 412 #define DAC_DHR12R1_ALIGNMENT(__ALIGNMENT__) (0x00000008U + (__ALIGNMENT__)) 413 414 /** @brief Set DHR12R2 alignment 415 * @param __ALIGNMENT__ specifies the DAC alignment 416 * @retval None 417 */ 418 #define DAC_DHR12R2_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000014U) + (__ALIGNMENT__)) 419 420 /** @brief Set DHR12RD alignment 421 * @param __ALIGNMENT__ specifies the DAC alignment 422 * @retval None 423 */ 424 #define DAC_DHR12RD_ALIGNMENT(__ALIGNMENT__) (0x00000020U + (__ALIGNMENT__)) 425 426 /** 427 * @} 428 */ 429 430 /* Private functions ---------------------------------------------------------*/ 431 /** @defgroup DAC_Private_Functions DAC Private Functions 432 * @{ 433 */ 434 /** 435 * @} 436 */ 437 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx ||\ 438 STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx ||\ 439 STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx ||\ 440 STM32F413xx || STM32F423xx */ 441 442 /** 443 * @} 444 */ 445 446 /** 447 * @} 448 */ 449 450 #ifdef __cplusplus 451 } 452 #endif 453 454 #endif /*__STM32F4xx_HAL_DAC_H */ 455 456 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 457