You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

480 lines
18 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32l4xx_hal_dac.h
  4. * @author MCD Application Team
  5. * @version V1.3.0
  6. * @date 29-January-2016
  7. * @brief Header file of DAC HAL module.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
  12. *
  13. * Redistribution and use in source and binary forms, with or without modification,
  14. * are permitted provided that the following conditions are met:
  15. * 1. Redistributions of source code must retain the above copyright notice,
  16. * this list of conditions and the following disclaimer.
  17. * 2. Redistributions in binary form must reproduce the above copyright notice,
  18. * this list of conditions and the following disclaimer in the documentation
  19. * and/or other materials provided with the distribution.
  20. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  21. * may be used to endorse or promote products derived from this software
  22. * without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  27. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  28. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  31. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  32. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  33. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34. *
  35. ******************************************************************************
  36. */
  37. /* Define to prevent recursive inclusion -------------------------------------*/
  38. #ifndef __STM32L4xx_HAL_DAC_H
  39. #define __STM32L4xx_HAL_DAC_H
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. /* Includes ------------------------------------------------------------------*/
  44. #include "stm32l4xx_hal_def.h"
  45. /** @addtogroup STM32L4xx_HAL_Driver
  46. * @{
  47. */
  48. /** @addtogroup DAC
  49. * @{
  50. */
  51. /* Exported types ------------------------------------------------------------*/
  52. /** @defgroup DAC_Exported_Types DAC Exported Types
  53. * @{
  54. */
  55. /**
  56. * @brief HAL State structures definition
  57. */
  58. typedef enum
  59. {
  60. HAL_DAC_STATE_RESET = 0x00, /*!< DAC not yet initialized or disabled */
  61. HAL_DAC_STATE_READY = 0x01, /*!< DAC initialized and ready for use */
  62. HAL_DAC_STATE_BUSY = 0x02, /*!< DAC internal processing is ongoing */
  63. HAL_DAC_STATE_TIMEOUT = 0x03, /*!< DAC timeout state */
  64. HAL_DAC_STATE_ERROR = 0x04 /*!< DAC error state */
  65. }HAL_DAC_StateTypeDef;
  66. /**
  67. * @brief DAC handle Structure definition
  68. */
  69. typedef struct
  70. {
  71. DAC_TypeDef *Instance; /*!< Register base address */
  72. __IO HAL_DAC_StateTypeDef State; /*!< DAC communication state */
  73. HAL_LockTypeDef Lock; /*!< DAC locking object */
  74. DMA_HandleTypeDef *DMA_Handle1; /*!< Pointer DMA handler for channel 1 */
  75. DMA_HandleTypeDef *DMA_Handle2; /*!< Pointer DMA handler for channel 2 */
  76. __IO uint32_t ErrorCode; /*!< DAC Error code */
  77. }DAC_HandleTypeDef;
  78. /**
  79. * @brief DAC Configuration sample and hold Channel structure definition
  80. */
  81. typedef struct
  82. {
  83. uint32_t DAC_SampleTime ; /*!< Specifies the Sample time for the selected channel.
  84. This parameter applies when DAC_SampleAndHold is DAC_SAMPLEANDHOLD_ENABLE.
  85. This parameter must be a number between Min_Data = 0 and Max_Data = 1023 */
  86. uint32_t DAC_HoldTime ; /*!< Specifies the hold time for the selected channel
  87. This parameter applies when DAC_SampleAndHold is DAC_SAMPLEANDHOLD_ENABLE.
  88. This parameter must be a number between Min_Data = 0 and Max_Data = 1023 */
  89. uint32_t DAC_RefreshTime ; /*!< Specifies the refresh time for the selected channel
  90. This parameter applies when DAC_SampleAndHold is DAC_SAMPLEANDHOLD_ENABLE.
  91. This parameter must be a number between Min_Data = 0 and Max_Data = 255 */
  92. }
  93. DAC_SampleAndHoldConfTypeDef;
  94. /**
  95. * @brief DAC Configuration regular Channel structure definition
  96. */
  97. typedef struct
  98. {
  99. uint32_t DAC_SampleAndHold; /*!< Specifies whether the DAC mode.
  100. This parameter can be a value of @ref DAC_SampleAndHold */
  101. uint32_t DAC_Trigger; /*!< Specifies the external trigger for the selected DAC channel.
  102. This parameter can be a value of @ref DAC_trigger_selection */
  103. uint32_t DAC_OutputBuffer; /*!< Specifies whether the DAC channel output buffer is enabled or disabled.
  104. This parameter can be a value of @ref DAC_output_buffer */
  105. uint32_t DAC_ConnectOnChipPeripheral ; /*!< Specifies whether the DAC output is connected or not to on chip peripheral .
  106. This parameter can be a value of @ref DAC_ConnectOnChipPeripheral */
  107. uint32_t DAC_UserTrimming; /*!< Specifies the trimming mode
  108. This parameter must be a value of @ref DAC_UserTrimming
  109. DAC_UserTrimming is either factory or user trimming */
  110. uint32_t DAC_TrimmingValue; /*!< Specifies the offset trimming value
  111. i.e. when DAC_SampleAndHold is DAC_TRIMMING_USER.
  112. This parameter must be a number between Min_Data = 1 and Max_Data = 31 */
  113. DAC_SampleAndHoldConfTypeDef DAC_SampleAndHoldConfig; /*!< Sample and Hold settings */
  114. }DAC_ChannelConfTypeDef;
  115. /**
  116. * @}
  117. */
  118. /* Exported constants --------------------------------------------------------*/
  119. /** @defgroup DAC_Exported_Constants DAC Exported Constants
  120. * @{
  121. */
  122. /** @defgroup DAC_Error_Code DAC Error Code
  123. * @{
  124. */
  125. #define HAL_DAC_ERROR_NONE 0x00 /*!< No error */
  126. #define HAL_DAC_ERROR_DMAUNDERRUNCH1 0x01 /*!< DAC channel1 DMA underrun error */
  127. #define HAL_DAC_ERROR_DMAUNDERRUNCH2 0x02 /*!< DAC channel2 DMA underrun error */
  128. #define HAL_DAC_ERROR_DMA 0x04 /*!< DMA error */
  129. #define HAL_DAC_ERROR_TIMEOUT 0x08 /*!< Timeout error */
  130. /**
  131. * @}
  132. */
  133. /** @defgroup DAC_trigger_selection DAC trigger selection
  134. * @{
  135. */
  136. #define DAC_TRIGGER_NONE ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC_DHRxxxx register
  137. has been loaded, and not by external trigger */
  138. #define DAC_TRIGGER_T2_TRGO ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TEN1)) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */
  139. #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 */
  140. #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 */
  141. #define DAC_TRIGGER_T6_TRGO ((uint32_t)DAC_CR_TEN1) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */
  142. #define DAC_TRIGGER_T7_TRGO ((uint32_t)(DAC_CR_TSEL1_1 | DAC_CR_TEN1)) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */
  143. #define DAC_TRIGGER_T8_TRGO ((uint32_t)(DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel */
  144. #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 */
  145. #define DAC_TRIGGER_SOFTWARE ((uint32_t)(DAC_CR_TSEL1 | DAC_CR_TEN1)) /*!< Conversion started by software trigger for DAC channel */
  146. /**
  147. * @}
  148. */
  149. /** @defgroup DAC_output_buffer DAC output buffer
  150. * @{
  151. */
  152. #define DAC_OUTPUTBUFFER_ENABLE ((uint32_t)0x00000000)
  153. #define DAC_OUTPUTBUFFER_DISABLE ((uint32_t)DAC_MCR_MODE1_1)
  154. /**
  155. * @}
  156. */
  157. /** @defgroup DAC_Channel_selection DAC Channel selection
  158. * @{
  159. */
  160. #define DAC_CHANNEL_1 ((uint32_t)0x00000000)
  161. #define DAC_CHANNEL_2 ((uint32_t)0x00000010)
  162. /**
  163. * @}
  164. */
  165. /** @defgroup DAC_data_alignment DAC data alignment
  166. * @{
  167. */
  168. #define DAC_ALIGN_12B_R ((uint32_t)0x00000000)
  169. #define DAC_ALIGN_12B_L ((uint32_t)0x00000004)
  170. #define DAC_ALIGN_8B_R ((uint32_t)0x00000008)
  171. /**
  172. * @}
  173. */
  174. /** @defgroup DAC_flags_definition DAC flags definition
  175. * @{
  176. */
  177. #define DAC_FLAG_DMAUDR1 ((uint32_t)DAC_SR_DMAUDR1)
  178. #define DAC_FLAG_DMAUDR2 ((uint32_t)DAC_SR_DMAUDR2)
  179. /**
  180. * @}
  181. */
  182. /** @defgroup DAC_IT_definition DAC IT definition
  183. * @{
  184. */
  185. #define DAC_IT_DMAUDR1 ((uint32_t)DAC_SR_DMAUDR1)
  186. #define DAC_IT_DMAUDR2 ((uint32_t)DAC_SR_DMAUDR2)
  187. /**
  188. * @}
  189. */
  190. /** @defgroup DAC_ConnectOnChipPeripheral DAC ConnectOnChipPeripheral
  191. * @{
  192. */
  193. #define DAC_CHIPCONNECT_DISABLE ((uint32_t)0x00000000)
  194. #define DAC_CHIPCONNECT_ENABLE ((uint32_t)DAC_MCR_MODE1_0)
  195. /**
  196. * @}
  197. */
  198. /** @defgroup DAC_UserTrimming DAC User Trimming
  199. * @{
  200. */
  201. #define DAC_TRIMMING_FACTORY ((uint32_t)0x00000000) /*!< Factory trimming */
  202. #define DAC_TRIMMING_USER ((uint32_t)0x00000001) /*!< User trimming */
  203. /**
  204. * @}
  205. */
  206. /** @defgroup DAC_SampleAndHold DAC power mode
  207. * @{
  208. */
  209. #define DAC_SAMPLEANDHOLD_DISABLE ((uint32_t)0x00000000)
  210. #define DAC_SAMPLEANDHOLD_ENABLE ((uint32_t)DAC_MCR_MODE1_2)
  211. /**
  212. * @}
  213. */
  214. /**
  215. * @}
  216. */
  217. /* Exported macro ------------------------------------------------------------*/
  218. /** @defgroup DAC_Exported_Macros DAC Exported Macros
  219. * @{
  220. */
  221. /** @brief Reset DAC handle state.
  222. * @param __HANDLE__: specifies the DAC handle.
  223. * @retval None
  224. */
  225. #define __HAL_DAC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DAC_STATE_RESET)
  226. /** @brief Enable the DAC channel.
  227. * @param __HANDLE__: specifies the DAC handle.
  228. * @param __DAC_Channel__: specifies the DAC channel
  229. * @retval None
  230. */
  231. #define __HAL_DAC_ENABLE(__HANDLE__, __DAC_Channel__) \
  232. ((__HANDLE__)->Instance->CR |= (DAC_CR_EN1 << (__DAC_Channel__)))
  233. /** @brief Disable the DAC channel.
  234. * @param __HANDLE__: specifies the DAC handle
  235. * @param __DAC_Channel__: specifies the DAC channel.
  236. * @retval None
  237. */
  238. #define __HAL_DAC_DISABLE(__HANDLE__, __DAC_Channel__) \
  239. ((__HANDLE__)->Instance->CR &= ~(DAC_CR_EN1 << (__DAC_Channel__)))
  240. /** @brief Set DHR12R1 alignment.
  241. * @param __ALIGNMENT__: specifies the DAC alignment
  242. * @retval None
  243. */
  244. #define DAC_DHR12R1_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000008) + (__ALIGNMENT__))
  245. /** @brief Set DHR12R2 alignment.
  246. * @param __ALIGNMENT__: specifies the DAC alignment
  247. * @retval None
  248. */
  249. #define DAC_DHR12R2_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000014) + (__ALIGNMENT__))
  250. /** @brief Set DHR12RD alignment.
  251. * @param __ALIGNMENT__: specifies the DAC alignment
  252. * @retval None
  253. */
  254. #define DAC_DHR12RD_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000020) + (__ALIGNMENT__))
  255. /** @brief Enable the DAC interrupt.
  256. * @param __HANDLE__: specifies the DAC handle
  257. * @param __INTERRUPT__: specifies the DAC interrupt.
  258. * This parameter can be any combination of the following values:
  259. * @arg DAC_IT_DMAUDR1: DAC channel 1 DMA underrun interrupt
  260. * @arg DAC_IT_DMAUDR2: DAC channel 2 DMA underrun interrupt
  261. * @retval None
  262. */
  263. #define __HAL_DAC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) |= (__INTERRUPT__))
  264. /** @brief Disable the DAC interrupt.
  265. * @param __HANDLE__: specifies the DAC handle
  266. * @param __INTERRUPT__: specifies the DAC interrupt.
  267. * This parameter can be any combination of the following values:
  268. * @arg DAC_IT_DMAUDR1: DAC channel 1 DMA underrun interrupt
  269. * @arg DAC_IT_DMAUDR2: DAC channel 2 DMA underrun interrupt
  270. * @retval None
  271. */
  272. #define __HAL_DAC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__))
  273. /** @brief Check whether the specified DAC interrupt source is enabled or not.
  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. /** @brief Get the selected DAC's flag status.
  283. * @param __HANDLE__: specifies the DAC handle.
  284. * @param __FLAG__: specifies the DAC flag to get.
  285. * This parameter can be any combination of the following values:
  286. * @arg DAC_FLAG_DMAUDR1: DAC channel 1 DMA underrun flag
  287. * @arg DAC_FLAG_DMAUDR2: DAC channel 2 DMA underrun flag
  288. * @retval None
  289. */
  290. #define __HAL_DAC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
  291. /** @brief Clear the DAC's flag.
  292. * @param __HANDLE__: specifies the DAC handle.
  293. * @param __FLAG__: specifies the DAC flag to clear.
  294. * This parameter can be any combination of the following values:
  295. * @arg DAC_FLAG_DMAUDR1: DAC channel 1 DMA underrun flag
  296. * @arg DAC_FLAG_DMAUDR2: DAC channel 2 DMA underrun flag
  297. * @retval None
  298. */
  299. #define __HAL_DAC_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR) = (__FLAG__))
  300. /**
  301. * @}
  302. */
  303. /* Private macro -------------------------------------------------------------*/
  304. /** @defgroup DAC_Private_Macros DAC Private Macros
  305. * @{
  306. */
  307. #define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OUTPUTBUFFER_ENABLE) || \
  308. ((STATE) == DAC_OUTPUTBUFFER_DISABLE))
  309. #define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_CHANNEL_1) || \
  310. ((CHANNEL) == DAC_CHANNEL_2))
  311. #define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_ALIGN_12B_R) || \
  312. ((ALIGN) == DAC_ALIGN_12B_L) || \
  313. ((ALIGN) == DAC_ALIGN_8B_R))
  314. #define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0)
  315. #define IS_DAC_REFRESHTIME(TIME) ((TIME) <= 0x0000000FF)
  316. /**
  317. * @}
  318. */
  319. /* Include DAC HAL Extended module */
  320. #include "stm32l4xx_hal_dac_ex.h"
  321. /* Exported functions --------------------------------------------------------*/
  322. /** @addtogroup DAC_Exported_Functions
  323. * @{
  324. */
  325. /** @addtogroup DAC_Exported_Functions_Group1
  326. * @{
  327. */
  328. /* Initialization and de-initialization functions *****************************/
  329. HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef* hdac);
  330. HAL_StatusTypeDef HAL_DAC_DeInit(DAC_HandleTypeDef* hdac);
  331. void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac);
  332. void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac);
  333. /**
  334. * @}
  335. */
  336. /** @addtogroup DAC_Exported_Functions_Group2
  337. * @{
  338. */
  339. /* IO operation functions *****************************************************/
  340. HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel);
  341. HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel);
  342. HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment);
  343. HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel);
  344. void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac);
  345. HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data);
  346. void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac);
  347. void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef* hdac);
  348. void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac);
  349. void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac);
  350. /**
  351. * @}
  352. */
  353. /** @addtogroup DAC_Exported_Functions_Group3
  354. * @{
  355. */
  356. /* Peripheral Control functions ***********************************************/
  357. uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel);
  358. HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel);
  359. /**
  360. * @}
  361. */
  362. /** @addtogroup DAC_Exported_Functions_Group4
  363. * @{
  364. */
  365. /* Peripheral State and Error functions ***************************************/
  366. HAL_DAC_StateTypeDef HAL_DAC_GetState(DAC_HandleTypeDef* hdac);
  367. uint32_t HAL_DAC_GetError(DAC_HandleTypeDef *hdac);
  368. /**
  369. * @}
  370. */
  371. /**
  372. * @}
  373. */
  374. /**
  375. * @}
  376. */
  377. /**
  378. * @}
  379. */
  380. #ifdef __cplusplus
  381. }
  382. #endif
  383. #endif /*__STM32L4xx_HAL_DAC_H */
  384. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/