xref: /btstack/port/stm32-f4discovery-usb/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dac.h (revision a8f7f3fcbcd51f8d2e92aca076b6a9f812db358c)
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>&copy; 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