stm32f4xx_ll_dac.h 68 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458
  1. /**
  2. ******************************************************************************
  3. * @file stm32f4xx_ll_dac.h
  4. * @author MCD Application Team
  5. * @brief Header file of DAC LL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2016 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. /* Define to prevent recursive inclusion -------------------------------------*/
  20. #ifndef STM32F4xx_LL_DAC_H
  21. #define STM32F4xx_LL_DAC_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /* Includes ------------------------------------------------------------------*/
  26. #include "stm32f4xx.h"
  27. /** @addtogroup STM32F4xx_LL_Driver
  28. * @{
  29. */
  30. #if defined(DAC)
  31. /** @defgroup DAC_LL DAC
  32. * @{
  33. */
  34. /* Private types -------------------------------------------------------------*/
  35. /* Private variables ---------------------------------------------------------*/
  36. /* Private constants ---------------------------------------------------------*/
  37. /** @defgroup DAC_LL_Private_Constants DAC Private Constants
  38. * @{
  39. */
  40. /* Internal masks for DAC channels definition */
  41. /* To select into literal LL_DAC_CHANNEL_x the relevant bits for: */
  42. /* - channel bits position into registers CR, MCR, CCR, SHHR, SHRR */
  43. /* - channel bits position into register SWTRIG */
  44. /* - channel register offset of data holding register DHRx */
  45. /* - channel register offset of data output register DORx */
  46. #define DAC_CR_CH1_BITOFFSET 0UL /* Position of channel bits into registers
  47. CR, MCR, CCR, SHHR, SHRR of channel 1 */
  48. #if defined(DAC_CHANNEL2_SUPPORT)
  49. #define DAC_CR_CH2_BITOFFSET 16UL /* Position of channel bits into registers
  50. CR, MCR, CCR, SHHR, SHRR of channel 2 */
  51. #define DAC_CR_CHX_BITOFFSET_MASK (DAC_CR_CH1_BITOFFSET | DAC_CR_CH2_BITOFFSET)
  52. #else
  53. #define DAC_CR_CHX_BITOFFSET_MASK (DAC_CR_CH1_BITOFFSET)
  54. #endif /* DAC_CHANNEL2_SUPPORT */
  55. #define DAC_SWTR_CH1 (DAC_SWTRIGR_SWTRIG1) /* Channel bit into register SWTRIGR of channel 1. */
  56. #if defined(DAC_CHANNEL2_SUPPORT)
  57. #define DAC_SWTR_CH2 (DAC_SWTRIGR_SWTRIG2) /* Channel bit into register SWTRIGR of channel 2. */
  58. #define DAC_SWTR_CHX_MASK (DAC_SWTR_CH1 | DAC_SWTR_CH2)
  59. #else
  60. #define DAC_SWTR_CHX_MASK (DAC_SWTR_CH1)
  61. #endif /* DAC_CHANNEL2_SUPPORT */
  62. #define DAC_REG_DHR12R1_REGOFFSET 0x00000000UL /* Register DHR12Rx channel 1 taken as reference */
  63. #define DAC_REG_DHR12L1_REGOFFSET 0x00100000UL /* Register offset of DHR12Lx channel 1 versus
  64. DHR12Rx channel 1 (shifted left of 20 bits) */
  65. #define DAC_REG_DHR8R1_REGOFFSET 0x02000000UL /* Register offset of DHR8Rx channel 1 versus
  66. DHR12Rx channel 1 (shifted left of 24 bits) */
  67. #if defined(DAC_CHANNEL2_SUPPORT)
  68. #define DAC_REG_DHR12R2_REGOFFSET 0x00030000UL /* Register offset of DHR12Rx channel 2 versus
  69. DHR12Rx channel 1 (shifted left of 16 bits) */
  70. #define DAC_REG_DHR12L2_REGOFFSET 0x00400000UL /* Register offset of DHR12Lx channel 2 versus
  71. DHR12Rx channel 1 (shifted left of 20 bits) */
  72. #define DAC_REG_DHR8R2_REGOFFSET 0x05000000UL /* Register offset of DHR8Rx channel 2 versus
  73. DHR12Rx channel 1 (shifted left of 24 bits) */
  74. #endif /* DAC_CHANNEL2_SUPPORT */
  75. #define DAC_REG_DHR12RX_REGOFFSET_MASK 0x000F0000UL
  76. #define DAC_REG_DHR12LX_REGOFFSET_MASK 0x00F00000UL
  77. #define DAC_REG_DHR8RX_REGOFFSET_MASK 0x0F000000UL
  78. #define DAC_REG_DHRX_REGOFFSET_MASK (DAC_REG_DHR12RX_REGOFFSET_MASK\
  79. | DAC_REG_DHR12LX_REGOFFSET_MASK | DAC_REG_DHR8RX_REGOFFSET_MASK)
  80. #define DAC_REG_DOR1_REGOFFSET 0x00000000UL /* Register DORx channel 1 taken as reference */
  81. #if defined(DAC_CHANNEL2_SUPPORT)
  82. #define DAC_REG_DOR2_REGOFFSET 0x10000000UL /* Register offset of DORx channel 1 versus
  83. DORx channel 2 (shifted left of 28 bits) */
  84. #define DAC_REG_DORX_REGOFFSET_MASK (DAC_REG_DOR1_REGOFFSET | DAC_REG_DOR2_REGOFFSET)
  85. #endif /* DAC_CHANNEL2_SUPPORT */
  86. #define DAC_REG_DHR_REGOFFSET_MASK_POSBIT0 0x0000000FUL /* Mask of data hold registers offset (DHR12Rx,
  87. DHR12Lx, DHR8Rx, ...) when shifted to position 0 */
  88. #define DAC_REG_DORX_REGOFFSET_MASK_POSBIT0 0x00000001UL /* Mask of DORx registers offset when shifted
  89. to position 0 */
  90. #define DAC_REG_SHSRX_REGOFFSET_MASK_POSBIT0 0x00000001UL /* Mask of SHSRx registers offset when shifted
  91. to position 0 */
  92. #define DAC_REG_DHR12RX_REGOFFSET_BITOFFSET_POS 16UL /* Position of bits register offset of DHR12Rx
  93. channel 1 or 2 versus DHR12Rx channel 1
  94. (shifted left of 16 bits) */
  95. #define DAC_REG_DHR12LX_REGOFFSET_BITOFFSET_POS 20UL /* Position of bits register offset of DHR12Lx
  96. channel 1 or 2 versus DHR12Rx channel 1
  97. (shifted left of 20 bits) */
  98. #define DAC_REG_DHR8RX_REGOFFSET_BITOFFSET_POS 24UL /* Position of bits register offset of DHR8Rx
  99. channel 1 or 2 versus DHR12Rx channel 1
  100. (shifted left of 24 bits) */
  101. #define DAC_REG_DORX_REGOFFSET_BITOFFSET_POS 28UL /* Position of bits register offset of DORx
  102. channel 1 or 2 versus DORx channel 1
  103. (shifted left of 28 bits) */
  104. /* DAC registers bits positions */
  105. #if defined(DAC_CHANNEL2_SUPPORT)
  106. #endif
  107. #define DAC_DHR12RD_DACC2DHR_BITOFFSET_POS DAC_DHR12RD_DACC2DHR_Pos
  108. #define DAC_DHR12LD_DACC2DHR_BITOFFSET_POS DAC_DHR12LD_DACC2DHR_Pos
  109. #define DAC_DHR8RD_DACC2DHR_BITOFFSET_POS DAC_DHR8RD_DACC2DHR_Pos
  110. /* Miscellaneous data */
  111. #define DAC_DIGITAL_SCALE_12BITS 4095UL /* Full-scale digital value with a resolution of 12
  112. bits (voltage range determined by analog voltage
  113. references Vref+ and Vref-, refer to reference manual) */
  114. /**
  115. * @}
  116. */
  117. /* Private macros ------------------------------------------------------------*/
  118. /** @defgroup DAC_LL_Private_Macros DAC Private Macros
  119. * @{
  120. */
  121. /**
  122. * @brief Driver macro reserved for internal use: set a pointer to
  123. * a register from a register basis from which an offset
  124. * is applied.
  125. * @param __REG__ Register basis from which the offset is applied.
  126. * @param __REG_OFFFSET__ Offset to be applied (unit: number of registers).
  127. * @retval Pointer to register address
  128. */
  129. #define __DAC_PTR_REG_OFFSET(__REG__, __REG_OFFFSET__) \
  130. ((uint32_t *)((uint32_t) ((uint32_t)(&(__REG__)) + ((__REG_OFFFSET__) << 2UL))))
  131. /**
  132. * @}
  133. */
  134. /* Exported types ------------------------------------------------------------*/
  135. #if defined(USE_FULL_LL_DRIVER)
  136. /** @defgroup DAC_LL_ES_INIT DAC Exported Init structure
  137. * @{
  138. */
  139. /**
  140. * @brief Structure definition of some features of DAC instance.
  141. */
  142. typedef struct
  143. {
  144. uint32_t TriggerSource; /*!< Set the conversion trigger source for the selected DAC channel:
  145. internal (SW start) or from external peripheral
  146. (timer event, external interrupt line).
  147. This parameter can be a value of @ref DAC_LL_EC_TRIGGER_SOURCE
  148. This feature can be modified afterwards using unitary
  149. function @ref LL_DAC_SetTriggerSource(). */
  150. uint32_t WaveAutoGeneration; /*!< Set the waveform automatic generation mode for the selected DAC channel.
  151. This parameter can be a value of @ref DAC_LL_EC_WAVE_AUTO_GENERATION_MODE
  152. This feature can be modified afterwards using unitary
  153. function @ref LL_DAC_SetWaveAutoGeneration(). */
  154. uint32_t WaveAutoGenerationConfig; /*!< Set the waveform automatic generation mode for the selected DAC channel.
  155. If waveform automatic generation mode is set to noise, this parameter
  156. can be a value of @ref DAC_LL_EC_WAVE_NOISE_LFSR_UNMASK_BITS
  157. If waveform automatic generation mode is set to triangle,
  158. this parameter can be a value of @ref DAC_LL_EC_WAVE_TRIANGLE_AMPLITUDE
  159. @note If waveform automatic generation mode is disabled,
  160. this parameter is discarded.
  161. This feature can be modified afterwards using unitary
  162. function @ref LL_DAC_SetWaveNoiseLFSR(),
  163. @ref LL_DAC_SetWaveTriangleAmplitude()
  164. depending on the wave automatic generation selected. */
  165. uint32_t OutputBuffer; /*!< Set the output buffer for the selected DAC channel.
  166. This parameter can be a value of @ref DAC_LL_EC_OUTPUT_BUFFER
  167. This feature can be modified afterwards using unitary
  168. function @ref LL_DAC_SetOutputBuffer(). */
  169. } LL_DAC_InitTypeDef;
  170. /**
  171. * @}
  172. */
  173. #endif /* USE_FULL_LL_DRIVER */
  174. /* Exported constants --------------------------------------------------------*/
  175. /** @defgroup DAC_LL_Exported_Constants DAC Exported Constants
  176. * @{
  177. */
  178. /** @defgroup DAC_LL_EC_GET_FLAG DAC flags
  179. * @brief Flags defines which can be used with LL_DAC_ReadReg function
  180. * @{
  181. */
  182. /* DAC channel 1 flags */
  183. #define LL_DAC_FLAG_DMAUDR1 (DAC_SR_DMAUDR1) /*!< DAC channel 1 flag DMA underrun */
  184. #if defined(DAC_CHANNEL2_SUPPORT)
  185. /* DAC channel 2 flags */
  186. #define LL_DAC_FLAG_DMAUDR2 (DAC_SR_DMAUDR2) /*!< DAC channel 2 flag DMA underrun */
  187. #endif /* DAC_CHANNEL2_SUPPORT */
  188. /**
  189. * @}
  190. */
  191. /** @defgroup DAC_LL_EC_IT DAC interruptions
  192. * @brief IT defines which can be used with LL_DAC_ReadReg and LL_DAC_WriteReg functions
  193. * @{
  194. */
  195. #define LL_DAC_IT_DMAUDRIE1 (DAC_CR_DMAUDRIE1) /*!< DAC channel 1 interruption DMA underrun */
  196. #if defined(DAC_CHANNEL2_SUPPORT)
  197. #define LL_DAC_IT_DMAUDRIE2 (DAC_CR_DMAUDRIE2) /*!< DAC channel 2 interruption DMA underrun */
  198. #endif /* DAC_CHANNEL2_SUPPORT */
  199. /**
  200. * @}
  201. */
  202. /** @defgroup DAC_LL_EC_CHANNEL DAC channels
  203. * @{
  204. */
  205. #define LL_DAC_CHANNEL_1 (DAC_REG_DOR1_REGOFFSET | DAC_REG_DHR12R1_REGOFFSET | DAC_REG_DHR12L1_REGOFFSET | DAC_REG_DHR8R1_REGOFFSET | DAC_CR_CH1_BITOFFSET | DAC_SWTR_CH1) /*!< DAC channel 1 */
  206. #if defined(DAC_CHANNEL2_SUPPORT)
  207. #define LL_DAC_CHANNEL_2 (DAC_REG_DOR2_REGOFFSET | DAC_REG_DHR12R2_REGOFFSET | DAC_REG_DHR12L2_REGOFFSET | DAC_REG_DHR8R2_REGOFFSET | DAC_CR_CH2_BITOFFSET | DAC_SWTR_CH2) /*!< DAC channel 2 */
  208. #endif /* DAC_CHANNEL2_SUPPORT */
  209. /**
  210. * @}
  211. */
  212. /** @defgroup DAC_LL_EC_TRIGGER_SOURCE DAC trigger source
  213. * @{
  214. */
  215. #define LL_DAC_TRIG_SOFTWARE (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger internal (SW start) */
  216. #define LL_DAC_TRIG_EXT_TIM2_TRGO (DAC_CR_TSEL1_2 ) /*!< DAC channel conversion trigger from external peripheral: TIM2 TRGO. */
  217. #define LL_DAC_TRIG_EXT_TIM8_TRGO ( DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM8 TRGO. */
  218. #define LL_DAC_TRIG_EXT_TIM4_TRGO (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM4 TRGO. */
  219. #define LL_DAC_TRIG_EXT_TIM6_TRGO 0x00000000UL /*!< DAC channel conversion trigger from external peripheral: TIM6 TRGO. */
  220. #define LL_DAC_TRIG_EXT_TIM7_TRGO ( DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external peripheral: TIM7 TRGO. */
  221. #define LL_DAC_TRIG_EXT_TIM5_TRGO ( DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM5 TRGO. */
  222. #define LL_DAC_TRIG_EXT_EXTI_LINE9 (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external peripheral: external interrupt line 9. */
  223. /**
  224. * @}
  225. */
  226. /** @defgroup DAC_LL_EC_WAVE_AUTO_GENERATION_MODE DAC waveform automatic generation mode
  227. * @{
  228. */
  229. #define LL_DAC_WAVE_AUTO_GENERATION_NONE 0x00000000UL /*!< DAC channel wave auto generation mode disabled. */
  230. #define LL_DAC_WAVE_AUTO_GENERATION_NOISE ( DAC_CR_WAVE1_0) /*!< DAC channel wave auto generation mode enabled, set generated noise waveform. */
  231. #define LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE (DAC_CR_WAVE1_1 ) /*!< DAC channel wave auto generation mode enabled, set generated triangle waveform. */
  232. /**
  233. * @}
  234. */
  235. /** @defgroup DAC_LL_EC_WAVE_NOISE_LFSR_UNMASK_BITS DAC wave generation - Noise LFSR unmask bits
  236. * @{
  237. */
  238. #define LL_DAC_NOISE_LFSR_UNMASK_BIT0 0x00000000UL /*!< Noise wave generation, unmask LFSR bit0, for the selected DAC channel */
  239. #define LL_DAC_NOISE_LFSR_UNMASK_BITS1_0 ( DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[1:0], for the selected DAC channel */
  240. #define LL_DAC_NOISE_LFSR_UNMASK_BITS2_0 ( DAC_CR_MAMP1_1 ) /*!< Noise wave generation, unmask LFSR bits[2:0], for the selected DAC channel */
  241. #define LL_DAC_NOISE_LFSR_UNMASK_BITS3_0 ( DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[3:0], for the selected DAC channel */
  242. #define LL_DAC_NOISE_LFSR_UNMASK_BITS4_0 ( DAC_CR_MAMP1_2 ) /*!< Noise wave generation, unmask LFSR bits[4:0], for the selected DAC channel */
  243. #define LL_DAC_NOISE_LFSR_UNMASK_BITS5_0 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[5:0], for the selected DAC channel */
  244. #define LL_DAC_NOISE_LFSR_UNMASK_BITS6_0 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_1 ) /*!< Noise wave generation, unmask LFSR bits[6:0], for the selected DAC channel */
  245. #define LL_DAC_NOISE_LFSR_UNMASK_BITS7_0 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[7:0], for the selected DAC channel */
  246. #define LL_DAC_NOISE_LFSR_UNMASK_BITS8_0 (DAC_CR_MAMP1_3 ) /*!< Noise wave generation, unmask LFSR bits[8:0], for the selected DAC channel */
  247. #define LL_DAC_NOISE_LFSR_UNMASK_BITS9_0 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[9:0], for the selected DAC channel */
  248. #define LL_DAC_NOISE_LFSR_UNMASK_BITS10_0 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 ) /*!< Noise wave generation, unmask LFSR bits[10:0], for the selected DAC channel */
  249. #define LL_DAC_NOISE_LFSR_UNMASK_BITS11_0 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[11:0], for the selected DAC channel */
  250. /**
  251. * @}
  252. */
  253. /** @defgroup DAC_LL_EC_WAVE_TRIANGLE_AMPLITUDE DAC wave generation - Triangle amplitude
  254. * @{
  255. */
  256. #define LL_DAC_TRIANGLE_AMPLITUDE_1 0x00000000UL /*!< Triangle wave generation, amplitude of 1 LSB of DAC output range, for the selected DAC channel */
  257. #define LL_DAC_TRIANGLE_AMPLITUDE_3 ( DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 3 LSB of DAC output range, for the selected DAC channel */
  258. #define LL_DAC_TRIANGLE_AMPLITUDE_7 ( DAC_CR_MAMP1_1 ) /*!< Triangle wave generation, amplitude of 7 LSB of DAC output range, for the selected DAC channel */
  259. #define LL_DAC_TRIANGLE_AMPLITUDE_15 ( DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 15 LSB of DAC output range, for the selected DAC channel */
  260. #define LL_DAC_TRIANGLE_AMPLITUDE_31 ( DAC_CR_MAMP1_2 ) /*!< Triangle wave generation, amplitude of 31 LSB of DAC output range, for the selected DAC channel */
  261. #define LL_DAC_TRIANGLE_AMPLITUDE_63 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 63 LSB of DAC output range, for the selected DAC channel */
  262. #define LL_DAC_TRIANGLE_AMPLITUDE_127 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_1 ) /*!< Triangle wave generation, amplitude of 127 LSB of DAC output range, for the selected DAC channel */
  263. #define LL_DAC_TRIANGLE_AMPLITUDE_255 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 255 LSB of DAC output range, for the selected DAC channel */
  264. #define LL_DAC_TRIANGLE_AMPLITUDE_511 (DAC_CR_MAMP1_3 ) /*!< Triangle wave generation, amplitude of 512 LSB of DAC output range, for the selected DAC channel */
  265. #define LL_DAC_TRIANGLE_AMPLITUDE_1023 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 1023 LSB of DAC output range, for the selected DAC channel */
  266. #define LL_DAC_TRIANGLE_AMPLITUDE_2047 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 ) /*!< Triangle wave generation, amplitude of 2047 LSB of DAC output range, for the selected DAC channel */
  267. #define LL_DAC_TRIANGLE_AMPLITUDE_4095 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 4095 LSB of DAC output range, for the selected DAC channel */
  268. /**
  269. * @}
  270. */
  271. /** @defgroup DAC_LL_EC_OUTPUT_BUFFER DAC channel output buffer
  272. * @{
  273. */
  274. #define LL_DAC_OUTPUT_BUFFER_ENABLE 0x00000000UL /*!< The selected DAC channel output is buffered: higher drive current capability, but also higher current consumption */
  275. #define LL_DAC_OUTPUT_BUFFER_DISABLE (DAC_CR_BOFF1) /*!< The selected DAC channel output is not buffered: lower drive current capability, but also lower current consumption */
  276. /**
  277. * @}
  278. */
  279. /** @defgroup DAC_LL_EC_RESOLUTION DAC channel output resolution
  280. * @{
  281. */
  282. #define LL_DAC_RESOLUTION_12B 0x00000000UL /*!< DAC channel resolution 12 bits */
  283. #define LL_DAC_RESOLUTION_8B 0x00000002UL /*!< DAC channel resolution 8 bits */
  284. /**
  285. * @}
  286. */
  287. /** @defgroup DAC_LL_EC_REGISTERS DAC registers compliant with specific purpose
  288. * @{
  289. */
  290. /* List of DAC registers intended to be used (most commonly) with */
  291. /* DMA transfer. */
  292. /* Refer to function @ref LL_DAC_DMA_GetRegAddr(). */
  293. #define LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED DAC_REG_DHR12RX_REGOFFSET_BITOFFSET_POS /*!< DAC channel data holding register 12 bits right aligned */
  294. #define LL_DAC_DMA_REG_DATA_12BITS_LEFT_ALIGNED DAC_REG_DHR12LX_REGOFFSET_BITOFFSET_POS /*!< DAC channel data holding register 12 bits left aligned */
  295. #define LL_DAC_DMA_REG_DATA_8BITS_RIGHT_ALIGNED DAC_REG_DHR8RX_REGOFFSET_BITOFFSET_POS /*!< DAC channel data holding register 8 bits right aligned */
  296. /**
  297. * @}
  298. */
  299. /** @defgroup DAC_LL_EC_HW_DELAYS Definitions of DAC hardware constraints delays
  300. * @note Only DAC peripheral HW delays are defined in DAC LL driver driver,
  301. * not timeout values.
  302. * For details on delays values, refer to descriptions in source code
  303. * above each literal definition.
  304. * @{
  305. */
  306. /* Delay for DAC channel voltage settling time from DAC channel startup */
  307. /* (transition from disable to enable). */
  308. /* Note: DAC channel startup time depends on board application environment: */
  309. /* impedance connected to DAC channel output. */
  310. /* The delay below is specified under conditions: */
  311. /* - voltage maximum transition (lowest to highest value) */
  312. /* - until voltage reaches final value +-1LSB */
  313. /* - DAC channel output buffer enabled */
  314. /* - load impedance of 5kOhm (min), 50pF (max) */
  315. /* Literal set to maximum value (refer to device datasheet, */
  316. /* parameter "tWAKEUP"). */
  317. /* Unit: us */
  318. #define LL_DAC_DELAY_STARTUP_VOLTAGE_SETTLING_US 15UL /*!< Delay for DAC channel voltage settling time from DAC channel startup (transition from disable to enable) */
  319. /* Delay for DAC channel voltage settling time. */
  320. /* Note: DAC channel startup time depends on board application environment: */
  321. /* impedance connected to DAC channel output. */
  322. /* The delay below is specified under conditions: */
  323. /* - voltage maximum transition (lowest to highest value) */
  324. /* - until voltage reaches final value +-1LSB */
  325. /* - DAC channel output buffer enabled */
  326. /* - load impedance of 5kOhm min, 50pF max */
  327. /* Literal set to maximum value (refer to device datasheet, */
  328. /* parameter "tSETTLING"). */
  329. /* Unit: us */
  330. #define LL_DAC_DELAY_VOLTAGE_SETTLING_US 12UL /*!< Delay for DAC channel voltage settling time */
  331. /**
  332. * @}
  333. */
  334. /**
  335. * @}
  336. */
  337. /* Exported macro ------------------------------------------------------------*/
  338. /** @defgroup DAC_LL_Exported_Macros DAC Exported Macros
  339. * @{
  340. */
  341. /** @defgroup DAC_LL_EM_WRITE_READ Common write and read registers macros
  342. * @{
  343. */
  344. /**
  345. * @brief Write a value in DAC register
  346. * @param __INSTANCE__ DAC Instance
  347. * @param __REG__ Register to be written
  348. * @param __VALUE__ Value to be written in the register
  349. * @retval None
  350. */
  351. #define LL_DAC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
  352. /**
  353. * @brief Read a value in DAC register
  354. * @param __INSTANCE__ DAC Instance
  355. * @param __REG__ Register to be read
  356. * @retval Register value
  357. */
  358. #define LL_DAC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
  359. /**
  360. * @}
  361. */
  362. /** @defgroup DAC_LL_EM_HELPER_MACRO DAC helper macro
  363. * @{
  364. */
  365. /**
  366. * @brief Helper macro to get DAC channel number in decimal format
  367. * from literals LL_DAC_CHANNEL_x.
  368. * Example:
  369. * __LL_DAC_CHANNEL_TO_DECIMAL_NB(LL_DAC_CHANNEL_1)
  370. * will return decimal number "1".
  371. * @note The input can be a value from functions where a channel
  372. * number is returned.
  373. * @param __CHANNEL__ This parameter can be one of the following values:
  374. * @arg @ref LL_DAC_CHANNEL_1
  375. * @arg @ref LL_DAC_CHANNEL_2 (1)
  376. *
  377. * (1) On this STM32 serie, parameter not available on all devices.
  378. * Refer to device datasheet for channels availability.
  379. * @retval 1...2 (value "2" depending on DAC channel 2 availability)
  380. */
  381. #define __LL_DAC_CHANNEL_TO_DECIMAL_NB(__CHANNEL__) \
  382. ((__CHANNEL__) & DAC_SWTR_CHX_MASK)
  383. /**
  384. * @brief Helper macro to get DAC channel in literal format LL_DAC_CHANNEL_x
  385. * from number in decimal format.
  386. * Example:
  387. * __LL_DAC_DECIMAL_NB_TO_CHANNEL(1)
  388. * will return a data equivalent to "LL_DAC_CHANNEL_1".
  389. * @note If the input parameter does not correspond to a DAC channel,
  390. * this macro returns value '0'.
  391. * @param __DECIMAL_NB__ 1...2 (value "2" depending on DAC channel 2 availability)
  392. * @retval Returned value can be one of the following values:
  393. * @arg @ref LL_DAC_CHANNEL_1
  394. * @arg @ref LL_DAC_CHANNEL_2 (1)
  395. *
  396. * (1) On this STM32 serie, parameter not available on all devices.
  397. * Refer to device datasheet for channels availability.
  398. */
  399. #if defined(DAC_CHANNEL2_SUPPORT)
  400. #define __LL_DAC_DECIMAL_NB_TO_CHANNEL(__DECIMAL_NB__) \
  401. (((__DECIMAL_NB__) == 1UL) \
  402. ? ( \
  403. LL_DAC_CHANNEL_1 \
  404. ) \
  405. : \
  406. (((__DECIMAL_NB__) == 2UL) \
  407. ? ( \
  408. LL_DAC_CHANNEL_2 \
  409. ) \
  410. : \
  411. ( \
  412. 0UL \
  413. ) \
  414. ) \
  415. )
  416. #else
  417. #define __LL_DAC_DECIMAL_NB_TO_CHANNEL(__DECIMAL_NB__) \
  418. (((__DECIMAL_NB__) == 1UL) \
  419. ? ( \
  420. LL_DAC_CHANNEL_1 \
  421. ) \
  422. : \
  423. ( \
  424. 0UL \
  425. ) \
  426. )
  427. #endif /* DAC_CHANNEL2_SUPPORT */
  428. /**
  429. * @brief Helper macro to define the DAC conversion data full-scale digital
  430. * value corresponding to the selected DAC resolution.
  431. * @note DAC conversion data full-scale corresponds to voltage range
  432. * determined by analog voltage references Vref+ and Vref-
  433. * (refer to reference manual).
  434. * @param __DAC_RESOLUTION__ This parameter can be one of the following values:
  435. * @arg @ref LL_DAC_RESOLUTION_12B
  436. * @arg @ref LL_DAC_RESOLUTION_8B
  437. * @retval ADC conversion data equivalent voltage value (unit: mVolt)
  438. */
  439. #define __LL_DAC_DIGITAL_SCALE(__DAC_RESOLUTION__) \
  440. ((0x00000FFFUL) >> ((__DAC_RESOLUTION__) << 1UL))
  441. /**
  442. * @brief Helper macro to calculate the DAC conversion data (unit: digital
  443. * value) corresponding to a voltage (unit: mVolt).
  444. * @note This helper macro is intended to provide input data in voltage
  445. * rather than digital value,
  446. * to be used with LL DAC functions such as
  447. * @ref LL_DAC_ConvertData12RightAligned().
  448. * @note Analog reference voltage (Vref+) must be either known from
  449. * user board environment or can be calculated using ADC measurement
  450. * and ADC helper macro __LL_ADC_CALC_VREFANALOG_VOLTAGE().
  451. * @param __VREFANALOG_VOLTAGE__ Analog reference voltage (unit: mV)
  452. * @param __DAC_VOLTAGE__ Voltage to be generated by DAC channel
  453. * (unit: mVolt).
  454. * @param __DAC_RESOLUTION__ This parameter can be one of the following values:
  455. * @arg @ref LL_DAC_RESOLUTION_12B
  456. * @arg @ref LL_DAC_RESOLUTION_8B
  457. * @retval DAC conversion data (unit: digital value)
  458. */
  459. #define __LL_DAC_CALC_VOLTAGE_TO_DATA(__VREFANALOG_VOLTAGE__,\
  460. __DAC_VOLTAGE__,\
  461. __DAC_RESOLUTION__) \
  462. ((__DAC_VOLTAGE__) * __LL_DAC_DIGITAL_SCALE(__DAC_RESOLUTION__) \
  463. / (__VREFANALOG_VOLTAGE__) \
  464. )
  465. /**
  466. * @}
  467. */
  468. /**
  469. * @}
  470. */
  471. /* Exported functions --------------------------------------------------------*/
  472. /** @defgroup DAC_LL_Exported_Functions DAC Exported Functions
  473. * @{
  474. */
  475. /**
  476. * @brief Set the conversion trigger source for the selected DAC channel.
  477. * @note For conversion trigger source to be effective, DAC trigger
  478. * must be enabled using function @ref LL_DAC_EnableTrigger().
  479. * @note To set conversion trigger source, DAC channel must be disabled.
  480. * Otherwise, the setting is discarded.
  481. * @note Availability of parameters of trigger sources from timer
  482. * depends on timers availability on the selected device.
  483. * @rmtoll CR TSEL1 LL_DAC_SetTriggerSource\n
  484. * CR TSEL2 LL_DAC_SetTriggerSource
  485. * @param DACx DAC instance
  486. * @param DAC_Channel This parameter can be one of the following values:
  487. * @arg @ref LL_DAC_CHANNEL_1
  488. * @arg @ref LL_DAC_CHANNEL_2 (1)
  489. *
  490. * (1) On this STM32 serie, parameter not available on all devices.
  491. * Refer to device datasheet for channels availability.
  492. * @param TriggerSource This parameter can be one of the following values:
  493. * @arg @ref LL_DAC_TRIG_SOFTWARE
  494. * @arg @ref LL_DAC_TRIG_EXT_TIM8_TRGO
  495. * @arg @ref LL_DAC_TRIG_EXT_TIM7_TRGO
  496. * @arg @ref LL_DAC_TRIG_EXT_TIM6_TRGO
  497. * @arg @ref LL_DAC_TRIG_EXT_TIM5_TRGO
  498. * @arg @ref LL_DAC_TRIG_EXT_TIM4_TRGO
  499. * @arg @ref LL_DAC_TRIG_EXT_TIM2_TRGO
  500. * @arg @ref LL_DAC_TRIG_EXT_EXTI_LINE9
  501. * @retval None
  502. */
  503. __STATIC_INLINE void LL_DAC_SetTriggerSource(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t TriggerSource)
  504. {
  505. MODIFY_REG(DACx->CR,
  506. DAC_CR_TSEL1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
  507. TriggerSource << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  508. }
  509. /**
  510. * @brief Get the conversion trigger source for the selected DAC channel.
  511. * @note For conversion trigger source to be effective, DAC trigger
  512. * must be enabled using function @ref LL_DAC_EnableTrigger().
  513. * @note Availability of parameters of trigger sources from timer
  514. * depends on timers availability on the selected device.
  515. * @rmtoll CR TSEL1 LL_DAC_GetTriggerSource\n
  516. * CR TSEL2 LL_DAC_GetTriggerSource
  517. * @param DACx DAC instance
  518. * @param DAC_Channel This parameter can be one of the following values:
  519. * @arg @ref LL_DAC_CHANNEL_1
  520. * @arg @ref LL_DAC_CHANNEL_2 (1)
  521. *
  522. * (1) On this STM32 serie, parameter not available on all devices.
  523. * Refer to device datasheet for channels availability.
  524. * @retval Returned value can be one of the following values:
  525. * @arg @ref LL_DAC_TRIG_SOFTWARE
  526. * @arg @ref LL_DAC_TRIG_EXT_TIM8_TRGO
  527. * @arg @ref LL_DAC_TRIG_EXT_TIM7_TRGO
  528. * @arg @ref LL_DAC_TRIG_EXT_TIM6_TRGO
  529. * @arg @ref LL_DAC_TRIG_EXT_TIM5_TRGO
  530. * @arg @ref LL_DAC_TRIG_EXT_TIM4_TRGO
  531. * @arg @ref LL_DAC_TRIG_EXT_TIM2_TRGO
  532. * @arg @ref LL_DAC_TRIG_EXT_EXTI_LINE9
  533. */
  534. __STATIC_INLINE uint32_t LL_DAC_GetTriggerSource(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  535. {
  536. return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_TSEL1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
  537. >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  538. );
  539. }
  540. /**
  541. * @brief Set the waveform automatic generation mode
  542. * for the selected DAC channel.
  543. * @rmtoll CR WAVE1 LL_DAC_SetWaveAutoGeneration\n
  544. * CR WAVE2 LL_DAC_SetWaveAutoGeneration
  545. * @param DACx DAC instance
  546. * @param DAC_Channel This parameter can be one of the following values:
  547. * @arg @ref LL_DAC_CHANNEL_1
  548. * @arg @ref LL_DAC_CHANNEL_2 (1)
  549. *
  550. * (1) On this STM32 serie, parameter not available on all devices.
  551. * Refer to device datasheet for channels availability.
  552. * @param WaveAutoGeneration This parameter can be one of the following values:
  553. * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NONE
  554. * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NOISE
  555. * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE
  556. * @retval None
  557. */
  558. __STATIC_INLINE void LL_DAC_SetWaveAutoGeneration(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t WaveAutoGeneration)
  559. {
  560. MODIFY_REG(DACx->CR,
  561. DAC_CR_WAVE1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
  562. WaveAutoGeneration << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  563. }
  564. /**
  565. * @brief Get the waveform automatic generation mode
  566. * for the selected DAC channel.
  567. * @rmtoll CR WAVE1 LL_DAC_GetWaveAutoGeneration\n
  568. * CR WAVE2 LL_DAC_GetWaveAutoGeneration
  569. * @param DACx DAC instance
  570. * @param DAC_Channel This parameter can be one of the following values:
  571. * @arg @ref LL_DAC_CHANNEL_1
  572. * @arg @ref LL_DAC_CHANNEL_2 (1)
  573. *
  574. * (1) On this STM32 serie, parameter not available on all devices.
  575. * Refer to device datasheet for channels availability.
  576. * @retval Returned value can be one of the following values:
  577. * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NONE
  578. * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NOISE
  579. * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE
  580. */
  581. __STATIC_INLINE uint32_t LL_DAC_GetWaveAutoGeneration(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  582. {
  583. return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_WAVE1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
  584. >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  585. );
  586. }
  587. /**
  588. * @brief Set the noise waveform generation for the selected DAC channel:
  589. * Noise mode and parameters LFSR (linear feedback shift register).
  590. * @note For wave generation to be effective, DAC channel
  591. * wave generation mode must be enabled using
  592. * function @ref LL_DAC_SetWaveAutoGeneration().
  593. * @note This setting can be set when the selected DAC channel is disabled
  594. * (otherwise, the setting operation is ignored).
  595. * @rmtoll CR MAMP1 LL_DAC_SetWaveNoiseLFSR\n
  596. * CR MAMP2 LL_DAC_SetWaveNoiseLFSR
  597. * @param DACx DAC instance
  598. * @param DAC_Channel This parameter can be one of the following values:
  599. * @arg @ref LL_DAC_CHANNEL_1
  600. * @arg @ref LL_DAC_CHANNEL_2 (1)
  601. *
  602. * (1) On this STM32 serie, parameter not available on all devices.
  603. * Refer to device datasheet for channels availability.
  604. * @param NoiseLFSRMask This parameter can be one of the following values:
  605. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BIT0
  606. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS1_0
  607. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS2_0
  608. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS3_0
  609. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS4_0
  610. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS5_0
  611. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS6_0
  612. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS7_0
  613. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS8_0
  614. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS9_0
  615. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS10_0
  616. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS11_0
  617. * @retval None
  618. */
  619. __STATIC_INLINE void LL_DAC_SetWaveNoiseLFSR(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t NoiseLFSRMask)
  620. {
  621. MODIFY_REG(DACx->CR,
  622. DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
  623. NoiseLFSRMask << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  624. }
  625. /**
  626. * @brief Get the noise waveform generation for the selected DAC channel:
  627. * Noise mode and parameters LFSR (linear feedback shift register).
  628. * @rmtoll CR MAMP1 LL_DAC_GetWaveNoiseLFSR\n
  629. * CR MAMP2 LL_DAC_GetWaveNoiseLFSR
  630. * @param DACx DAC instance
  631. * @param DAC_Channel This parameter can be one of the following values:
  632. * @arg @ref LL_DAC_CHANNEL_1
  633. * @arg @ref LL_DAC_CHANNEL_2 (1)
  634. *
  635. * (1) On this STM32 serie, parameter not available on all devices.
  636. * Refer to device datasheet for channels availability.
  637. * @retval Returned value can be one of the following values:
  638. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BIT0
  639. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS1_0
  640. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS2_0
  641. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS3_0
  642. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS4_0
  643. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS5_0
  644. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS6_0
  645. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS7_0
  646. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS8_0
  647. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS9_0
  648. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS10_0
  649. * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS11_0
  650. */
  651. __STATIC_INLINE uint32_t LL_DAC_GetWaveNoiseLFSR(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  652. {
  653. return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
  654. >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  655. );
  656. }
  657. /**
  658. * @brief Set the triangle waveform generation for the selected DAC channel:
  659. * triangle mode and amplitude.
  660. * @note For wave generation to be effective, DAC channel
  661. * wave generation mode must be enabled using
  662. * function @ref LL_DAC_SetWaveAutoGeneration().
  663. * @note This setting can be set when the selected DAC channel is disabled
  664. * (otherwise, the setting operation is ignored).
  665. * @rmtoll CR MAMP1 LL_DAC_SetWaveTriangleAmplitude\n
  666. * CR MAMP2 LL_DAC_SetWaveTriangleAmplitude
  667. * @param DACx DAC instance
  668. * @param DAC_Channel This parameter can be one of the following values:
  669. * @arg @ref LL_DAC_CHANNEL_1
  670. * @arg @ref LL_DAC_CHANNEL_2 (1)
  671. *
  672. * (1) On this STM32 serie, parameter not available on all devices.
  673. * Refer to device datasheet for channels availability.
  674. * @param TriangleAmplitude This parameter can be one of the following values:
  675. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1
  676. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_3
  677. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_7
  678. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_15
  679. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_31
  680. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_63
  681. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_127
  682. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_255
  683. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_511
  684. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1023
  685. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_2047
  686. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_4095
  687. * @retval None
  688. */
  689. __STATIC_INLINE void LL_DAC_SetWaveTriangleAmplitude(DAC_TypeDef *DACx, uint32_t DAC_Channel,
  690. uint32_t TriangleAmplitude)
  691. {
  692. MODIFY_REG(DACx->CR,
  693. DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
  694. TriangleAmplitude << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  695. }
  696. /**
  697. * @brief Get the triangle waveform generation for the selected DAC channel:
  698. * triangle mode and amplitude.
  699. * @rmtoll CR MAMP1 LL_DAC_GetWaveTriangleAmplitude\n
  700. * CR MAMP2 LL_DAC_GetWaveTriangleAmplitude
  701. * @param DACx DAC instance
  702. * @param DAC_Channel This parameter can be one of the following values:
  703. * @arg @ref LL_DAC_CHANNEL_1
  704. * @arg @ref LL_DAC_CHANNEL_2 (1)
  705. *
  706. * (1) On this STM32 serie, parameter not available on all devices.
  707. * Refer to device datasheet for channels availability.
  708. * @retval Returned value can be one of the following values:
  709. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1
  710. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_3
  711. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_7
  712. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_15
  713. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_31
  714. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_63
  715. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_127
  716. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_255
  717. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_511
  718. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1023
  719. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_2047
  720. * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_4095
  721. */
  722. __STATIC_INLINE uint32_t LL_DAC_GetWaveTriangleAmplitude(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  723. {
  724. return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
  725. >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  726. );
  727. }
  728. /**
  729. * @brief Set the output buffer for the selected DAC channel.
  730. * @rmtoll CR BOFF1 LL_DAC_SetOutputBuffer\n
  731. * CR BOFF2 LL_DAC_SetOutputBuffer
  732. * @param DACx DAC instance
  733. * @param DAC_Channel This parameter can be one of the following values:
  734. * @arg @ref LL_DAC_CHANNEL_1
  735. * @arg @ref LL_DAC_CHANNEL_2 (1)
  736. *
  737. * (1) On this STM32 serie, parameter not available on all devices.
  738. * Refer to device datasheet for channels availability.
  739. * @param OutputBuffer This parameter can be one of the following values:
  740. * @arg @ref LL_DAC_OUTPUT_BUFFER_ENABLE
  741. * @arg @ref LL_DAC_OUTPUT_BUFFER_DISABLE
  742. * @retval None
  743. */
  744. __STATIC_INLINE void LL_DAC_SetOutputBuffer(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t OutputBuffer)
  745. {
  746. MODIFY_REG(DACx->CR,
  747. DAC_CR_BOFF1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
  748. OutputBuffer << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  749. }
  750. /**
  751. * @brief Get the output buffer state for the selected DAC channel.
  752. * @rmtoll CR BOFF1 LL_DAC_GetOutputBuffer\n
  753. * CR BOFF2 LL_DAC_GetOutputBuffer
  754. * @param DACx DAC instance
  755. * @param DAC_Channel This parameter can be one of the following values:
  756. * @arg @ref LL_DAC_CHANNEL_1
  757. * @arg @ref LL_DAC_CHANNEL_2 (1)
  758. *
  759. * (1) On this STM32 serie, parameter not available on all devices.
  760. * Refer to device datasheet for channels availability.
  761. * @retval Returned value can be one of the following values:
  762. * @arg @ref LL_DAC_OUTPUT_BUFFER_ENABLE
  763. * @arg @ref LL_DAC_OUTPUT_BUFFER_DISABLE
  764. */
  765. __STATIC_INLINE uint32_t LL_DAC_GetOutputBuffer(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  766. {
  767. return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_BOFF1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
  768. >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  769. );
  770. }
  771. /**
  772. * @}
  773. */
  774. /** @defgroup DAC_LL_EF_DMA_Management DMA Management
  775. * @{
  776. */
  777. /**
  778. * @brief Enable DAC DMA transfer request of the selected channel.
  779. * @note To configure DMA source address (peripheral address),
  780. * use function @ref LL_DAC_DMA_GetRegAddr().
  781. * @rmtoll CR DMAEN1 LL_DAC_EnableDMAReq\n
  782. * CR DMAEN2 LL_DAC_EnableDMAReq
  783. * @param DACx DAC instance
  784. * @param DAC_Channel This parameter can be one of the following values:
  785. * @arg @ref LL_DAC_CHANNEL_1
  786. * @arg @ref LL_DAC_CHANNEL_2 (1)
  787. *
  788. * (1) On this STM32 serie, parameter not available on all devices.
  789. * Refer to device datasheet for channels availability.
  790. * @retval None
  791. */
  792. __STATIC_INLINE void LL_DAC_EnableDMAReq(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  793. {
  794. SET_BIT(DACx->CR,
  795. DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  796. }
  797. /**
  798. * @brief Disable DAC DMA transfer request of the selected channel.
  799. * @note To configure DMA source address (peripheral address),
  800. * use function @ref LL_DAC_DMA_GetRegAddr().
  801. * @rmtoll CR DMAEN1 LL_DAC_DisableDMAReq\n
  802. * CR DMAEN2 LL_DAC_DisableDMAReq
  803. * @param DACx DAC instance
  804. * @param DAC_Channel This parameter can be one of the following values:
  805. * @arg @ref LL_DAC_CHANNEL_1
  806. * @arg @ref LL_DAC_CHANNEL_2 (1)
  807. *
  808. * (1) On this STM32 serie, parameter not available on all devices.
  809. * Refer to device datasheet for channels availability.
  810. * @retval None
  811. */
  812. __STATIC_INLINE void LL_DAC_DisableDMAReq(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  813. {
  814. CLEAR_BIT(DACx->CR,
  815. DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  816. }
  817. /**
  818. * @brief Get DAC DMA transfer request state of the selected channel.
  819. * (0: DAC DMA transfer request is disabled, 1: DAC DMA transfer request is enabled)
  820. * @rmtoll CR DMAEN1 LL_DAC_IsDMAReqEnabled\n
  821. * CR DMAEN2 LL_DAC_IsDMAReqEnabled
  822. * @param DACx DAC instance
  823. * @param DAC_Channel This parameter can be one of the following values:
  824. * @arg @ref LL_DAC_CHANNEL_1
  825. * @arg @ref LL_DAC_CHANNEL_2 (1)
  826. *
  827. * (1) On this STM32 serie, parameter not available on all devices.
  828. * Refer to device datasheet for channels availability.
  829. * @retval State of bit (1 or 0).
  830. */
  831. __STATIC_INLINE uint32_t LL_DAC_IsDMAReqEnabled(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  832. {
  833. return ((READ_BIT(DACx->CR,
  834. DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
  835. == (DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))) ? 1UL : 0UL);
  836. }
  837. /**
  838. * @brief Function to help to configure DMA transfer to DAC: retrieve the
  839. * DAC register address from DAC instance and a list of DAC registers
  840. * intended to be used (most commonly) with DMA transfer.
  841. * @note These DAC registers are data holding registers:
  842. * when DAC conversion is requested, DAC generates a DMA transfer
  843. * request to have data available in DAC data holding registers.
  844. * @note This macro is intended to be used with LL DMA driver, refer to
  845. * function "LL_DMA_ConfigAddresses()".
  846. * Example:
  847. * LL_DMA_ConfigAddresses(DMA1,
  848. * LL_DMA_CHANNEL_1,
  849. * (uint32_t)&< array or variable >,
  850. * LL_DAC_DMA_GetRegAddr(DAC1, LL_DAC_CHANNEL_1,
  851. * LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED),
  852. * LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
  853. * @rmtoll DHR12R1 DACC1DHR LL_DAC_DMA_GetRegAddr\n
  854. * DHR12L1 DACC1DHR LL_DAC_DMA_GetRegAddr\n
  855. * DHR8R1 DACC1DHR LL_DAC_DMA_GetRegAddr\n
  856. * DHR12R2 DACC2DHR LL_DAC_DMA_GetRegAddr\n
  857. * DHR12L2 DACC2DHR LL_DAC_DMA_GetRegAddr\n
  858. * DHR8R2 DACC2DHR LL_DAC_DMA_GetRegAddr
  859. * @param DACx DAC instance
  860. * @param DAC_Channel This parameter can be one of the following values:
  861. * @arg @ref LL_DAC_CHANNEL_1
  862. * @arg @ref LL_DAC_CHANNEL_2 (1)
  863. *
  864. * (1) On this STM32 serie, parameter not available on all devices.
  865. * Refer to device datasheet for channels availability.
  866. * @param Register This parameter can be one of the following values:
  867. * @arg @ref LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED
  868. * @arg @ref LL_DAC_DMA_REG_DATA_12BITS_LEFT_ALIGNED
  869. * @arg @ref LL_DAC_DMA_REG_DATA_8BITS_RIGHT_ALIGNED
  870. * @retval DAC register address
  871. */
  872. __STATIC_INLINE uint32_t LL_DAC_DMA_GetRegAddr(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Register)
  873. {
  874. /* Retrieve address of register DHR12Rx, DHR12Lx or DHR8Rx depending on */
  875. /* DAC channel selected. */
  876. return ((uint32_t)(__DAC_PTR_REG_OFFSET((DACx)->DHR12R1, ((DAC_Channel >> (Register & 0x1FUL))
  877. & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0))));
  878. }
  879. /**
  880. * @}
  881. */
  882. /** @defgroup DAC_LL_EF_Operation Operation on DAC channels
  883. * @{
  884. */
  885. /**
  886. * @brief Enable DAC selected channel.
  887. * @rmtoll CR EN1 LL_DAC_Enable\n
  888. * CR EN2 LL_DAC_Enable
  889. * @note After enable from off state, DAC channel requires a delay
  890. * for output voltage to reach accuracy +/- 1 LSB.
  891. * Refer to device datasheet, parameter "tWAKEUP".
  892. * @param DACx DAC instance
  893. * @param DAC_Channel This parameter can be one of the following values:
  894. * @arg @ref LL_DAC_CHANNEL_1
  895. * @arg @ref LL_DAC_CHANNEL_2 (1)
  896. *
  897. * (1) On this STM32 serie, parameter not available on all devices.
  898. * Refer to device datasheet for channels availability.
  899. * @retval None
  900. */
  901. __STATIC_INLINE void LL_DAC_Enable(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  902. {
  903. SET_BIT(DACx->CR,
  904. DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  905. }
  906. /**
  907. * @brief Disable DAC selected channel.
  908. * @rmtoll CR EN1 LL_DAC_Disable\n
  909. * CR EN2 LL_DAC_Disable
  910. * @param DACx DAC instance
  911. * @param DAC_Channel This parameter can be one of the following values:
  912. * @arg @ref LL_DAC_CHANNEL_1
  913. * @arg @ref LL_DAC_CHANNEL_2 (1)
  914. *
  915. * (1) On this STM32 serie, parameter not available on all devices.
  916. * Refer to device datasheet for channels availability.
  917. * @retval None
  918. */
  919. __STATIC_INLINE void LL_DAC_Disable(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  920. {
  921. CLEAR_BIT(DACx->CR,
  922. DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  923. }
  924. /**
  925. * @brief Get DAC enable state of the selected channel.
  926. * (0: DAC channel is disabled, 1: DAC channel is enabled)
  927. * @rmtoll CR EN1 LL_DAC_IsEnabled\n
  928. * CR EN2 LL_DAC_IsEnabled
  929. * @param DACx DAC instance
  930. * @param DAC_Channel This parameter can be one of the following values:
  931. * @arg @ref LL_DAC_CHANNEL_1
  932. * @arg @ref LL_DAC_CHANNEL_2 (1)
  933. *
  934. * (1) On this STM32 serie, parameter not available on all devices.
  935. * Refer to device datasheet for channels availability.
  936. * @retval State of bit (1 or 0).
  937. */
  938. __STATIC_INLINE uint32_t LL_DAC_IsEnabled(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  939. {
  940. return ((READ_BIT(DACx->CR,
  941. DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
  942. == (DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))) ? 1UL : 0UL);
  943. }
  944. /**
  945. * @brief Enable DAC trigger of the selected channel.
  946. * @note - If DAC trigger is disabled, DAC conversion is performed
  947. * automatically once the data holding register is updated,
  948. * using functions "LL_DAC_ConvertData{8; 12}{Right; Left} Aligned()":
  949. * @ref LL_DAC_ConvertData12RightAligned(), ...
  950. * - If DAC trigger is enabled, DAC conversion is performed
  951. * only when a hardware of software trigger event is occurring.
  952. * Select trigger source using
  953. * function @ref LL_DAC_SetTriggerSource().
  954. * @rmtoll CR TEN1 LL_DAC_EnableTrigger\n
  955. * CR TEN2 LL_DAC_EnableTrigger
  956. * @param DACx DAC instance
  957. * @param DAC_Channel This parameter can be one of the following values:
  958. * @arg @ref LL_DAC_CHANNEL_1
  959. * @arg @ref LL_DAC_CHANNEL_2 (1)
  960. *
  961. * (1) On this STM32 serie, parameter not available on all devices.
  962. * Refer to device datasheet for channels availability.
  963. * @retval None
  964. */
  965. __STATIC_INLINE void LL_DAC_EnableTrigger(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  966. {
  967. SET_BIT(DACx->CR,
  968. DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  969. }
  970. /**
  971. * @brief Disable DAC trigger of the selected channel.
  972. * @rmtoll CR TEN1 LL_DAC_DisableTrigger\n
  973. * CR TEN2 LL_DAC_DisableTrigger
  974. * @param DACx DAC instance
  975. * @param DAC_Channel This parameter can be one of the following values:
  976. * @arg @ref LL_DAC_CHANNEL_1
  977. * @arg @ref LL_DAC_CHANNEL_2 (1)
  978. *
  979. * (1) On this STM32 serie, parameter not available on all devices.
  980. * Refer to device datasheet for channels availability.
  981. * @retval None
  982. */
  983. __STATIC_INLINE void LL_DAC_DisableTrigger(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  984. {
  985. CLEAR_BIT(DACx->CR,
  986. DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
  987. }
  988. /**
  989. * @brief Get DAC trigger state of the selected channel.
  990. * (0: DAC trigger is disabled, 1: DAC trigger is enabled)
  991. * @rmtoll CR TEN1 LL_DAC_IsTriggerEnabled\n
  992. * CR TEN2 LL_DAC_IsTriggerEnabled
  993. * @param DACx DAC instance
  994. * @param DAC_Channel This parameter can be one of the following values:
  995. * @arg @ref LL_DAC_CHANNEL_1
  996. * @arg @ref LL_DAC_CHANNEL_2 (1)
  997. *
  998. * (1) On this STM32 serie, parameter not available on all devices.
  999. * Refer to device datasheet for channels availability.
  1000. * @retval State of bit (1 or 0).
  1001. */
  1002. __STATIC_INLINE uint32_t LL_DAC_IsTriggerEnabled(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  1003. {
  1004. return ((READ_BIT(DACx->CR,
  1005. DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
  1006. == (DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))) ? 1UL : 0UL);
  1007. }
  1008. /**
  1009. * @brief Trig DAC conversion by software for the selected DAC channel.
  1010. * @note Preliminarily, DAC trigger must be set to software trigger
  1011. * using function
  1012. * @ref LL_DAC_Init()
  1013. * @ref LL_DAC_SetTriggerSource()
  1014. * with parameter "LL_DAC_TRIGGER_SOFTWARE".
  1015. * and DAC trigger must be enabled using
  1016. * function @ref LL_DAC_EnableTrigger().
  1017. * @note For devices featuring DAC with 2 channels: this function
  1018. * can perform a SW start of both DAC channels simultaneously.
  1019. * Two channels can be selected as parameter.
  1020. * Example: (LL_DAC_CHANNEL_1 | LL_DAC_CHANNEL_2)
  1021. * @rmtoll SWTRIGR SWTRIG1 LL_DAC_TrigSWConversion\n
  1022. * SWTRIGR SWTRIG2 LL_DAC_TrigSWConversion
  1023. * @param DACx DAC instance
  1024. * @param DAC_Channel This parameter can a combination of the following values:
  1025. * @arg @ref LL_DAC_CHANNEL_1
  1026. * @arg @ref LL_DAC_CHANNEL_2 (1)
  1027. *
  1028. * (1) On this STM32 serie, parameter not available on all devices.
  1029. * Refer to device datasheet for channels availability.
  1030. * @retval None
  1031. */
  1032. __STATIC_INLINE void LL_DAC_TrigSWConversion(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  1033. {
  1034. SET_BIT(DACx->SWTRIGR,
  1035. (DAC_Channel & DAC_SWTR_CHX_MASK));
  1036. }
  1037. /**
  1038. * @brief Set the data to be loaded in the data holding register
  1039. * in format 12 bits left alignment (LSB aligned on bit 0),
  1040. * for the selected DAC channel.
  1041. * @rmtoll DHR12R1 DACC1DHR LL_DAC_ConvertData12RightAligned\n
  1042. * DHR12R2 DACC2DHR LL_DAC_ConvertData12RightAligned
  1043. * @param DACx DAC instance
  1044. * @param DAC_Channel This parameter can be one of the following values:
  1045. * @arg @ref LL_DAC_CHANNEL_1
  1046. * @arg @ref LL_DAC_CHANNEL_2 (1)
  1047. *
  1048. * (1) On this STM32 serie, parameter not available on all devices.
  1049. * Refer to device datasheet for channels availability.
  1050. * @param Data Value between Min_Data=0x000 and Max_Data=0xFFF
  1051. * @retval None
  1052. */
  1053. __STATIC_INLINE void LL_DAC_ConvertData12RightAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data)
  1054. {
  1055. __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, (DAC_Channel >> DAC_REG_DHR12RX_REGOFFSET_BITOFFSET_POS)
  1056. & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0);
  1057. MODIFY_REG(*preg, DAC_DHR12R1_DACC1DHR, Data);
  1058. }
  1059. /**
  1060. * @brief Set the data to be loaded in the data holding register
  1061. * in format 12 bits left alignment (MSB aligned on bit 15),
  1062. * for the selected DAC channel.
  1063. * @rmtoll DHR12L1 DACC1DHR LL_DAC_ConvertData12LeftAligned\n
  1064. * DHR12L2 DACC2DHR LL_DAC_ConvertData12LeftAligned
  1065. * @param DACx DAC instance
  1066. * @param DAC_Channel This parameter can be one of the following values:
  1067. * @arg @ref LL_DAC_CHANNEL_1
  1068. * @arg @ref LL_DAC_CHANNEL_2 (1)
  1069. *
  1070. * (1) On this STM32 serie, parameter not available on all devices.
  1071. * Refer to device datasheet for channels availability.
  1072. * @param Data Value between Min_Data=0x000 and Max_Data=0xFFF
  1073. * @retval None
  1074. */
  1075. __STATIC_INLINE void LL_DAC_ConvertData12LeftAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data)
  1076. {
  1077. __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, (DAC_Channel >> DAC_REG_DHR12LX_REGOFFSET_BITOFFSET_POS)
  1078. & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0);
  1079. MODIFY_REG(*preg, DAC_DHR12L1_DACC1DHR, Data);
  1080. }
  1081. /**
  1082. * @brief Set the data to be loaded in the data holding register
  1083. * in format 8 bits left alignment (LSB aligned on bit 0),
  1084. * for the selected DAC channel.
  1085. * @rmtoll DHR8R1 DACC1DHR LL_DAC_ConvertData8RightAligned\n
  1086. * DHR8R2 DACC2DHR LL_DAC_ConvertData8RightAligned
  1087. * @param DACx DAC instance
  1088. * @param DAC_Channel This parameter can be one of the following values:
  1089. * @arg @ref LL_DAC_CHANNEL_1
  1090. * @arg @ref LL_DAC_CHANNEL_2 (1)
  1091. *
  1092. * (1) On this STM32 serie, parameter not available on all devices.
  1093. * Refer to device datasheet for channels availability.
  1094. * @param Data Value between Min_Data=0x00 and Max_Data=0xFF
  1095. * @retval None
  1096. */
  1097. __STATIC_INLINE void LL_DAC_ConvertData8RightAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data)
  1098. {
  1099. __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, (DAC_Channel >> DAC_REG_DHR8RX_REGOFFSET_BITOFFSET_POS)
  1100. & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0);
  1101. MODIFY_REG(*preg, DAC_DHR8R1_DACC1DHR, Data);
  1102. }
  1103. #if defined(DAC_CHANNEL2_SUPPORT)
  1104. /**
  1105. * @brief Set the data to be loaded in the data holding register
  1106. * in format 12 bits left alignment (LSB aligned on bit 0),
  1107. * for both DAC channels.
  1108. * @rmtoll DHR12RD DACC1DHR LL_DAC_ConvertDualData12RightAligned\n
  1109. * DHR12RD DACC2DHR LL_DAC_ConvertDualData12RightAligned
  1110. * @param DACx DAC instance
  1111. * @param DataChannel1 Value between Min_Data=0x000 and Max_Data=0xFFF
  1112. * @param DataChannel2 Value between Min_Data=0x000 and Max_Data=0xFFF
  1113. * @retval None
  1114. */
  1115. __STATIC_INLINE void LL_DAC_ConvertDualData12RightAligned(DAC_TypeDef *DACx, uint32_t DataChannel1,
  1116. uint32_t DataChannel2)
  1117. {
  1118. MODIFY_REG(DACx->DHR12RD,
  1119. (DAC_DHR12RD_DACC2DHR | DAC_DHR12RD_DACC1DHR),
  1120. ((DataChannel2 << DAC_DHR12RD_DACC2DHR_BITOFFSET_POS) | DataChannel1));
  1121. }
  1122. /**
  1123. * @brief Set the data to be loaded in the data holding register
  1124. * in format 12 bits left alignment (MSB aligned on bit 15),
  1125. * for both DAC channels.
  1126. * @rmtoll DHR12LD DACC1DHR LL_DAC_ConvertDualData12LeftAligned\n
  1127. * DHR12LD DACC2DHR LL_DAC_ConvertDualData12LeftAligned
  1128. * @param DACx DAC instance
  1129. * @param DataChannel1 Value between Min_Data=0x000 and Max_Data=0xFFF
  1130. * @param DataChannel2 Value between Min_Data=0x000 and Max_Data=0xFFF
  1131. * @retval None
  1132. */
  1133. __STATIC_INLINE void LL_DAC_ConvertDualData12LeftAligned(DAC_TypeDef *DACx, uint32_t DataChannel1,
  1134. uint32_t DataChannel2)
  1135. {
  1136. /* Note: Data of DAC channel 2 shift value subtracted of 4 because */
  1137. /* data on 16 bits and DAC channel 2 bits field is on the 12 MSB, */
  1138. /* the 4 LSB must be taken into account for the shift value. */
  1139. MODIFY_REG(DACx->DHR12LD,
  1140. (DAC_DHR12LD_DACC2DHR | DAC_DHR12LD_DACC1DHR),
  1141. ((DataChannel2 << (DAC_DHR12LD_DACC2DHR_BITOFFSET_POS - 4U)) | DataChannel1));
  1142. }
  1143. /**
  1144. * @brief Set the data to be loaded in the data holding register
  1145. * in format 8 bits left alignment (LSB aligned on bit 0),
  1146. * for both DAC channels.
  1147. * @rmtoll DHR8RD DACC1DHR LL_DAC_ConvertDualData8RightAligned\n
  1148. * DHR8RD DACC2DHR LL_DAC_ConvertDualData8RightAligned
  1149. * @param DACx DAC instance
  1150. * @param DataChannel1 Value between Min_Data=0x00 and Max_Data=0xFF
  1151. * @param DataChannel2 Value between Min_Data=0x00 and Max_Data=0xFF
  1152. * @retval None
  1153. */
  1154. __STATIC_INLINE void LL_DAC_ConvertDualData8RightAligned(DAC_TypeDef *DACx, uint32_t DataChannel1,
  1155. uint32_t DataChannel2)
  1156. {
  1157. MODIFY_REG(DACx->DHR8RD,
  1158. (DAC_DHR8RD_DACC2DHR | DAC_DHR8RD_DACC1DHR),
  1159. ((DataChannel2 << DAC_DHR8RD_DACC2DHR_BITOFFSET_POS) | DataChannel1));
  1160. }
  1161. #endif /* DAC_CHANNEL2_SUPPORT */
  1162. /**
  1163. * @brief Retrieve output data currently generated for the selected DAC channel.
  1164. * @note Whatever alignment and resolution settings
  1165. * (using functions "LL_DAC_ConvertData{8; 12}{Right; Left} Aligned()":
  1166. * @ref LL_DAC_ConvertData12RightAligned(), ...),
  1167. * output data format is 12 bits right aligned (LSB aligned on bit 0).
  1168. * @rmtoll DOR1 DACC1DOR LL_DAC_RetrieveOutputData\n
  1169. * DOR2 DACC2DOR LL_DAC_RetrieveOutputData
  1170. * @param DACx DAC instance
  1171. * @param DAC_Channel This parameter can be one of the following values:
  1172. * @arg @ref LL_DAC_CHANNEL_1
  1173. * @arg @ref LL_DAC_CHANNEL_2 (1)
  1174. *
  1175. * (1) On this STM32 serie, parameter not available on all devices.
  1176. * Refer to device datasheet for channels availability.
  1177. * @retval Value between Min_Data=0x000 and Max_Data=0xFFF
  1178. */
  1179. __STATIC_INLINE uint32_t LL_DAC_RetrieveOutputData(DAC_TypeDef *DACx, uint32_t DAC_Channel)
  1180. {
  1181. __IO uint32_t const *preg = __DAC_PTR_REG_OFFSET(DACx->DOR1, (DAC_Channel >> DAC_REG_DORX_REGOFFSET_BITOFFSET_POS)
  1182. & DAC_REG_DORX_REGOFFSET_MASK_POSBIT0);
  1183. return (uint16_t) READ_BIT(*preg, DAC_DOR1_DACC1DOR);
  1184. }
  1185. /**
  1186. * @}
  1187. */
  1188. /** @defgroup DAC_LL_EF_FLAG_Management FLAG Management
  1189. * @{
  1190. */
  1191. /**
  1192. * @brief Get DAC underrun flag for DAC channel 1
  1193. * @rmtoll SR DMAUDR1 LL_DAC_IsActiveFlag_DMAUDR1
  1194. * @param DACx DAC instance
  1195. * @retval State of bit (1 or 0).
  1196. */
  1197. __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_DMAUDR1(DAC_TypeDef *DACx)
  1198. {
  1199. return ((READ_BIT(DACx->SR, LL_DAC_FLAG_DMAUDR1) == (LL_DAC_FLAG_DMAUDR1)) ? 1UL : 0UL);
  1200. }
  1201. #if defined(DAC_CHANNEL2_SUPPORT)
  1202. /**
  1203. * @brief Get DAC underrun flag for DAC channel 2
  1204. * @rmtoll SR DMAUDR2 LL_DAC_IsActiveFlag_DMAUDR2
  1205. * @param DACx DAC instance
  1206. * @retval State of bit (1 or 0).
  1207. */
  1208. __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_DMAUDR2(DAC_TypeDef *DACx)
  1209. {
  1210. return ((READ_BIT(DACx->SR, LL_DAC_FLAG_DMAUDR2) == (LL_DAC_FLAG_DMAUDR2)) ? 1UL : 0UL);
  1211. }
  1212. #endif /* DAC_CHANNEL2_SUPPORT */
  1213. /**
  1214. * @brief Clear DAC underrun flag for DAC channel 1
  1215. * @rmtoll SR DMAUDR1 LL_DAC_ClearFlag_DMAUDR1
  1216. * @param DACx DAC instance
  1217. * @retval None
  1218. */
  1219. __STATIC_INLINE void LL_DAC_ClearFlag_DMAUDR1(DAC_TypeDef *DACx)
  1220. {
  1221. WRITE_REG(DACx->SR, LL_DAC_FLAG_DMAUDR1);
  1222. }
  1223. #if defined(DAC_CHANNEL2_SUPPORT)
  1224. /**
  1225. * @brief Clear DAC underrun flag for DAC channel 2
  1226. * @rmtoll SR DMAUDR2 LL_DAC_ClearFlag_DMAUDR2
  1227. * @param DACx DAC instance
  1228. * @retval None
  1229. */
  1230. __STATIC_INLINE void LL_DAC_ClearFlag_DMAUDR2(DAC_TypeDef *DACx)
  1231. {
  1232. WRITE_REG(DACx->SR, LL_DAC_FLAG_DMAUDR2);
  1233. }
  1234. #endif /* DAC_CHANNEL2_SUPPORT */
  1235. /**
  1236. * @}
  1237. */
  1238. /** @defgroup DAC_LL_EF_IT_Management IT management
  1239. * @{
  1240. */
  1241. /**
  1242. * @brief Enable DMA underrun interrupt for DAC channel 1
  1243. * @rmtoll CR DMAUDRIE1 LL_DAC_EnableIT_DMAUDR1
  1244. * @param DACx DAC instance
  1245. * @retval None
  1246. */
  1247. __STATIC_INLINE void LL_DAC_EnableIT_DMAUDR1(DAC_TypeDef *DACx)
  1248. {
  1249. SET_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1);
  1250. }
  1251. #if defined(DAC_CHANNEL2_SUPPORT)
  1252. /**
  1253. * @brief Enable DMA underrun interrupt for DAC channel 2
  1254. * @rmtoll CR DMAUDRIE2 LL_DAC_EnableIT_DMAUDR2
  1255. * @param DACx DAC instance
  1256. * @retval None
  1257. */
  1258. __STATIC_INLINE void LL_DAC_EnableIT_DMAUDR2(DAC_TypeDef *DACx)
  1259. {
  1260. SET_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2);
  1261. }
  1262. #endif /* DAC_CHANNEL2_SUPPORT */
  1263. /**
  1264. * @brief Disable DMA underrun interrupt for DAC channel 1
  1265. * @rmtoll CR DMAUDRIE1 LL_DAC_DisableIT_DMAUDR1
  1266. * @param DACx DAC instance
  1267. * @retval None
  1268. */
  1269. __STATIC_INLINE void LL_DAC_DisableIT_DMAUDR1(DAC_TypeDef *DACx)
  1270. {
  1271. CLEAR_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1);
  1272. }
  1273. #if defined(DAC_CHANNEL2_SUPPORT)
  1274. /**
  1275. * @brief Disable DMA underrun interrupt for DAC channel 2
  1276. * @rmtoll CR DMAUDRIE2 LL_DAC_DisableIT_DMAUDR2
  1277. * @param DACx DAC instance
  1278. * @retval None
  1279. */
  1280. __STATIC_INLINE void LL_DAC_DisableIT_DMAUDR2(DAC_TypeDef *DACx)
  1281. {
  1282. CLEAR_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2);
  1283. }
  1284. #endif /* DAC_CHANNEL2_SUPPORT */
  1285. /**
  1286. * @brief Get DMA underrun interrupt for DAC channel 1
  1287. * @rmtoll CR DMAUDRIE1 LL_DAC_IsEnabledIT_DMAUDR1
  1288. * @param DACx DAC instance
  1289. * @retval State of bit (1 or 0).
  1290. */
  1291. __STATIC_INLINE uint32_t LL_DAC_IsEnabledIT_DMAUDR1(DAC_TypeDef *DACx)
  1292. {
  1293. return ((READ_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1) == (LL_DAC_IT_DMAUDRIE1)) ? 1UL : 0UL);
  1294. }
  1295. #if defined(DAC_CHANNEL2_SUPPORT)
  1296. /**
  1297. * @brief Get DMA underrun interrupt for DAC channel 2
  1298. * @rmtoll CR DMAUDRIE2 LL_DAC_IsEnabledIT_DMAUDR2
  1299. * @param DACx DAC instance
  1300. * @retval State of bit (1 or 0).
  1301. */
  1302. __STATIC_INLINE uint32_t LL_DAC_IsEnabledIT_DMAUDR2(DAC_TypeDef *DACx)
  1303. {
  1304. return ((READ_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2) == (LL_DAC_IT_DMAUDRIE2)) ? 1UL : 0UL);
  1305. }
  1306. #endif /* DAC_CHANNEL2_SUPPORT */
  1307. /**
  1308. * @}
  1309. */
  1310. #if defined(USE_FULL_LL_DRIVER)
  1311. /** @defgroup DAC_LL_EF_Init Initialization and de-initialization functions
  1312. * @{
  1313. */
  1314. ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx);
  1315. ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct);
  1316. void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct);
  1317. /**
  1318. * @}
  1319. */
  1320. #endif /* USE_FULL_LL_DRIVER */
  1321. /**
  1322. * @}
  1323. */
  1324. /**
  1325. * @}
  1326. */
  1327. #endif /* DAC */
  1328. /**
  1329. * @}
  1330. */
  1331. #ifdef __cplusplus
  1332. }
  1333. #endif
  1334. #endif /* STM32F4xx_LL_DAC_H */
  1335. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/