stm32g4xx_ll_adc.c 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419
  1. /**
  2. ******************************************************************************
  3. * @file stm32g4xx_ll_adc.c
  4. * @author MCD Application Team
  5. * @brief ADC LL module driver
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2019 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file
  13. * in the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. *
  16. ******************************************************************************
  17. */
  18. #if defined(USE_FULL_LL_DRIVER)
  19. /* Includes ------------------------------------------------------------------*/
  20. #include "stm32g4xx_ll_adc.h"
  21. #include "stm32g4xx_ll_bus.h"
  22. #ifdef USE_FULL_ASSERT
  23. #include "stm32_assert.h"
  24. #else
  25. #define assert_param(expr) ((void)0U)
  26. #endif /* USE_FULL_ASSERT */
  27. /** @addtogroup STM32G4xx_LL_Driver
  28. * @{
  29. */
  30. #if defined (ADC1) || defined (ADC2) || defined (ADC3) || defined (ADC4) || defined (ADC5)
  31. /** @addtogroup ADC_LL ADC
  32. * @{
  33. */
  34. /* Private types -------------------------------------------------------------*/
  35. /* Private variables ---------------------------------------------------------*/
  36. /* Private constants ---------------------------------------------------------*/
  37. /** @addtogroup ADC_LL_Private_Constants
  38. * @{
  39. */
  40. /* Definitions of ADC hardware constraints delays */
  41. /* Note: Only ADC peripheral HW delays are defined in ADC LL driver driver, */
  42. /* not timeout values: */
  43. /* Timeout values for ADC operations are dependent to device clock */
  44. /* configuration (system clock versus ADC clock), */
  45. /* and therefore must be defined in user application. */
  46. /* Refer to @ref ADC_LL_EC_HW_DELAYS for description of ADC timeout */
  47. /* values definition. */
  48. /* Note: ADC timeout values are defined here in CPU cycles to be independent */
  49. /* of device clock setting. */
  50. /* In user application, ADC timeout values should be defined with */
  51. /* temporal values, in function of device clock settings. */
  52. /* Highest ratio CPU clock frequency vs ADC clock frequency: */
  53. /* - ADC clock from synchronous clock with AHB prescaler 512, */
  54. /* ADC prescaler 4. */
  55. /* Ratio max = 512 *4 = 2048 */
  56. /* - ADC clock from asynchronous clock (PLLP) with prescaler 256. */
  57. /* Highest CPU clock PLL (PLLR). */
  58. /* Ratio max = PLLRmax /PPLPmin * 256 = (VCO/2) / (VCO/31) * 256 */
  59. /* = 3968 */
  60. /* Unit: CPU cycles. */
  61. #define ADC_CLOCK_RATIO_VS_CPU_HIGHEST (3968UL)
  62. #define ADC_TIMEOUT_DISABLE_CPU_CYCLES (ADC_CLOCK_RATIO_VS_CPU_HIGHEST * 1UL)
  63. #define ADC_TIMEOUT_STOP_CONVERSION_CPU_CYCLES (ADC_CLOCK_RATIO_VS_CPU_HIGHEST * 1UL)
  64. /**
  65. * @}
  66. */
  67. /* Private macros ------------------------------------------------------------*/
  68. /** @addtogroup ADC_LL_Private_Macros
  69. * @{
  70. */
  71. /* Check of parameters for configuration of ADC hierarchical scope: */
  72. /* common to several ADC instances. */
  73. #define IS_LL_ADC_COMMON_CLOCK(__CLOCK__) \
  74. (((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV1) \
  75. || ((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV2) \
  76. || ((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV4) \
  77. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV1) \
  78. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV2) \
  79. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV4) \
  80. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV6) \
  81. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV8) \
  82. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV10) \
  83. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV12) \
  84. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV16) \
  85. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV32) \
  86. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV64) \
  87. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV128) \
  88. || ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV256) \
  89. )
  90. /* Check of parameters for configuration of ADC hierarchical scope: */
  91. /* ADC instance. */
  92. #define IS_LL_ADC_RESOLUTION(__RESOLUTION__) \
  93. (((__RESOLUTION__) == LL_ADC_RESOLUTION_12B) \
  94. || ((__RESOLUTION__) == LL_ADC_RESOLUTION_10B) \
  95. || ((__RESOLUTION__) == LL_ADC_RESOLUTION_8B) \
  96. || ((__RESOLUTION__) == LL_ADC_RESOLUTION_6B) \
  97. )
  98. #define IS_LL_ADC_DATA_ALIGN(__DATA_ALIGN__) \
  99. (((__DATA_ALIGN__) == LL_ADC_DATA_ALIGN_RIGHT) \
  100. || ((__DATA_ALIGN__) == LL_ADC_DATA_ALIGN_LEFT) \
  101. )
  102. #define IS_LL_ADC_LOW_POWER(__LOW_POWER__) \
  103. (((__LOW_POWER__) == LL_ADC_LP_MODE_NONE) \
  104. || ((__LOW_POWER__) == LL_ADC_LP_AUTOWAIT) \
  105. )
  106. /* Check of parameters for configuration of ADC hierarchical scope: */
  107. /* ADC group regular */
  108. #if defined(STM32G474xx) || defined(STM32G484xx)
  109. #define IS_LL_ADC_REG_TRIG_SOURCE(__ADC_INSTANCE__, __REG_TRIG_SOURCE__) \
  110. (((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE) \
  111. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO) \
  112. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO2) \
  113. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3) \
  114. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_TRGO) \
  115. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
  116. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_TRGO) \
  117. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM6_TRGO) \
  118. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM7_TRGO) \
  119. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO) \
  120. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO2) \
  121. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM15_TRGO) \
  122. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_TRGO) \
  123. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_TRGO2) \
  124. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_CH1) \
  125. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG1) \
  126. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG3) \
  127. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG5) \
  128. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG6) \
  129. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG7) \
  130. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG8) \
  131. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG9) \
  132. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG10) \
  133. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_LPTIM_OUT) \
  134. || ((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
  135. && ( \
  136. ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH1) \
  137. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH2) \
  138. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
  139. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH4) \
  140. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH4) \
  141. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_CH2) \
  142. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_CH3) \
  143. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
  144. ) \
  145. ) \
  146. || ((((__ADC_INSTANCE__) == ADC3) || ((__ADC_INSTANCE__) == ADC4) || ((__ADC_INSTANCE__) == ADC5)) \
  147. && ( \
  148. ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH1) \
  149. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH3) \
  150. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH1) \
  151. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH1) \
  152. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_CH1) \
  153. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE2) \
  154. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG2) \
  155. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_HRTIM_TRG4) \
  156. ) \
  157. ) \
  158. )
  159. #elif defined(STM32G473xx) || defined(STM32G483xx)
  160. #define IS_LL_ADC_REG_TRIG_SOURCE(__ADC_INSTANCE__, __REG_TRIG_SOURCE__) \
  161. (((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE) \
  162. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO) \
  163. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO2) \
  164. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3) \
  165. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_TRGO) \
  166. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
  167. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
  168. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_TRGO) \
  169. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM6_TRGO) \
  170. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM7_TRGO) \
  171. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO) \
  172. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO2) \
  173. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM15_TRGO) \
  174. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_TRGO) \
  175. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_TRGO2) \
  176. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_CH1) \
  177. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_LPTIM_OUT) \
  178. || ((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
  179. && ( \
  180. ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH1) \
  181. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH2) \
  182. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
  183. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH4) \
  184. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH4) \
  185. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_CH2) \
  186. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_CH3) \
  187. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
  188. ) \
  189. ) \
  190. || ((((__ADC_INSTANCE__) == ADC3) || ((__ADC_INSTANCE__) == ADC4) || ((__ADC_INSTANCE__) == ADC5)) \
  191. && ( \
  192. ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH1) \
  193. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH3) \
  194. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH1) \
  195. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH1) \
  196. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_CH1) \
  197. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE2) \
  198. ) \
  199. ) \
  200. )
  201. #elif defined(STM32G471xx)
  202. #define IS_LL_ADC_REG_TRIG_SOURCE(__ADC_INSTANCE__, __REG_TRIG_SOURCE__) \
  203. (((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE) \
  204. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO) \
  205. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO2) \
  206. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3) \
  207. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_TRGO) \
  208. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
  209. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
  210. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_TRGO) \
  211. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM6_TRGO) \
  212. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM7_TRGO) \
  213. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO) \
  214. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO2) \
  215. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM15_TRGO) \
  216. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_LPTIM_OUT) \
  217. || ((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
  218. && ( \
  219. ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH1) \
  220. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH2) \
  221. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
  222. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH4) \
  223. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH4) \
  224. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
  225. ) \
  226. ) \
  227. || (((__ADC_INSTANCE__) == ADC3) \
  228. && ( \
  229. ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH1) \
  230. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH3) \
  231. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH1) \
  232. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH1) \
  233. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_CH1) \
  234. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE2) \
  235. ) \
  236. ) \
  237. )
  238. #elif defined(STM32G411xB) || defined(STM32G411xC) || defined(STM32G414xx) || defined(STM32GBK1CB) || defined(STM32G431xx) || defined(STM32G441xx)
  239. #define IS_LL_ADC_REG_TRIG_SOURCE(__ADC_INSTANCE__, __REG_TRIG_SOURCE__) \
  240. (((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE) \
  241. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO) \
  242. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO2) \
  243. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH1) \
  244. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH2) \
  245. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3) \
  246. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_TRGO) \
  247. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
  248. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
  249. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH4) \
  250. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_TRGO) \
  251. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH4) \
  252. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM6_TRGO) \
  253. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM7_TRGO) \
  254. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO) \
  255. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO2) \
  256. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM15_TRGO) \
  257. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_LPTIM_OUT) \
  258. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
  259. )
  260. #elif defined(STM32G491xx) || defined(STM32G4A1xx)
  261. #define IS_LL_ADC_REG_TRIG_SOURCE(__ADC_INSTANCE__, __REG_TRIG_SOURCE__) \
  262. (((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE) \
  263. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO) \
  264. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_TRGO2) \
  265. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3) \
  266. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_TRGO) \
  267. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
  268. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_TRGO) \
  269. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM6_TRGO) \
  270. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM7_TRGO) \
  271. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO) \
  272. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO2) \
  273. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM15_TRGO) \
  274. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_TRGO) \
  275. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_TRGO2) \
  276. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_CH1) \
  277. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_LPTIM_OUT) \
  278. || ((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
  279. && ( \
  280. ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH1) \
  281. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH2) \
  282. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
  283. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH4) \
  284. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH4) \
  285. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_CH2) \
  286. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM20_CH3) \
  287. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
  288. ) \
  289. ) \
  290. || (((__ADC_INSTANCE__) == ADC3) \
  291. && ( \
  292. ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH1) \
  293. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH3) \
  294. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH1) \
  295. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH1) \
  296. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_CH1) \
  297. || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE2) \
  298. ) \
  299. ) \
  300. )
  301. #endif /* STM32G4xx */
  302. #define IS_LL_ADC_REG_CONTINUOUS_MODE(__REG_CONTINUOUS_MODE__) \
  303. (((__REG_CONTINUOUS_MODE__) == LL_ADC_REG_CONV_SINGLE) \
  304. || ((__REG_CONTINUOUS_MODE__) == LL_ADC_REG_CONV_CONTINUOUS) \
  305. )
  306. #define IS_LL_ADC_REG_DMA_TRANSFER(__REG_DMA_TRANSFER__) \
  307. (((__REG_DMA_TRANSFER__) == LL_ADC_REG_DMA_TRANSFER_NONE) \
  308. || ((__REG_DMA_TRANSFER__) == LL_ADC_REG_DMA_TRANSFER_LIMITED) \
  309. || ((__REG_DMA_TRANSFER__) == LL_ADC_REG_DMA_TRANSFER_UNLIMITED) \
  310. )
  311. #define IS_LL_ADC_REG_OVR_DATA_BEHAVIOR(__REG_OVR_DATA_BEHAVIOR__) \
  312. (((__REG_OVR_DATA_BEHAVIOR__) == LL_ADC_REG_OVR_DATA_PRESERVED) \
  313. || ((__REG_OVR_DATA_BEHAVIOR__) == LL_ADC_REG_OVR_DATA_OVERWRITTEN) \
  314. )
  315. #define IS_LL_ADC_REG_SEQ_SCAN_LENGTH(__REG_SEQ_SCAN_LENGTH__) \
  316. (((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_DISABLE) \
  317. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_2RANKS) \
  318. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_3RANKS) \
  319. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_4RANKS) \
  320. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_5RANKS) \
  321. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_6RANKS) \
  322. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_7RANKS) \
  323. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_8RANKS) \
  324. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_9RANKS) \
  325. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_10RANKS) \
  326. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_11RANKS) \
  327. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_12RANKS) \
  328. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_13RANKS) \
  329. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_14RANKS) \
  330. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_15RANKS) \
  331. || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_16RANKS) \
  332. )
  333. #define IS_LL_ADC_REG_SEQ_SCAN_DISCONT_MODE(__REG_SEQ_DISCONT_MODE__) \
  334. (((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_DISABLE) \
  335. || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_1RANK) \
  336. || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_2RANKS) \
  337. || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_3RANKS) \
  338. || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_4RANKS) \
  339. || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_5RANKS) \
  340. || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_6RANKS) \
  341. || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_7RANKS) \
  342. || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_8RANKS) \
  343. )
  344. /* Check of parameters for configuration of ADC hierarchical scope: */
  345. /* ADC group injected */
  346. #if defined(STM32G474xx) || defined(STM32G484xx)
  347. #define IS_LL_ADC_INJ_TRIG_SOURCE(__ADC_INSTANCE__, __INJ_TRIG_SOURCE__) \
  348. (((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE) \
  349. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) \
  350. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO2) \
  351. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4) \
  352. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_TRGO) \
  353. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_TRGO) \
  354. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_TRGO) \
  355. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM6_TRGO) \
  356. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM7_TRGO) \
  357. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO) \
  358. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO2) \
  359. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH4) \
  360. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM15_TRGO) \
  361. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_TRGO) \
  362. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_TRGO2) \
  363. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG2) \
  364. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG4) \
  365. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG5) \
  366. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG6) \
  367. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG7) \
  368. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG8) \
  369. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG9) \
  370. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG10) \
  371. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_LPTIM_OUT) \
  372. || ((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
  373. && ( \
  374. ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_CH1) \
  375. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH1) \
  376. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH3) \
  377. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH4) \
  378. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM16_CH1) \
  379. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_CH4) \
  380. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE15) \
  381. ) \
  382. ) \
  383. || ((((__ADC_INSTANCE__) == ADC3) || ((__ADC_INSTANCE__) == ADC4) || ((__ADC_INSTANCE__) == ADC5)) \
  384. && ( \
  385. ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH3) \
  386. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH3) \
  387. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH4) \
  388. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH2) \
  389. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_CH2) \
  390. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG1) \
  391. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_HRTIM_TRG3) \
  392. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE3) \
  393. ) \
  394. ) \
  395. )
  396. #elif defined(STM32G473xx) || defined(STM32G483xx)
  397. #define IS_LL_ADC_INJ_TRIG_SOURCE(__ADC_INSTANCE__, __INJ_TRIG_SOURCE__) \
  398. (((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE) \
  399. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) \
  400. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO2) \
  401. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4) \
  402. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_TRGO) \
  403. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_TRGO) \
  404. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_TRGO) \
  405. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM6_TRGO) \
  406. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM7_TRGO) \
  407. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO) \
  408. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO2) \
  409. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH4) \
  410. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM15_TRGO) \
  411. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_TRGO) \
  412. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_TRGO2) \
  413. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_LPTIM_OUT) \
  414. || ((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
  415. && ( \
  416. ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_CH1) \
  417. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH1) \
  418. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH3) \
  419. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH4) \
  420. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM16_CH1) \
  421. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_CH4) \
  422. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE15) \
  423. ) \
  424. ) \
  425. || ((((__ADC_INSTANCE__) == ADC3) || ((__ADC_INSTANCE__) == ADC4) || ((__ADC_INSTANCE__) == ADC5)) \
  426. && ( \
  427. ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH3) \
  428. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH3) \
  429. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH4) \
  430. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH2) \
  431. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_CH2) \
  432. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE3) \
  433. ) \
  434. ) \
  435. )
  436. #elif defined(STM32G471xx)
  437. #define IS_LL_ADC_INJ_TRIG_SOURCE(__ADC_INSTANCE__, __INJ_TRIG_SOURCE__) \
  438. (((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE) \
  439. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) \
  440. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO2) \
  441. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4) \
  442. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_TRGO) \
  443. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_TRGO) \
  444. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_TRGO) \
  445. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM6_TRGO) \
  446. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM7_TRGO) \
  447. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO) \
  448. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO2) \
  449. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH4) \
  450. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM15_TRGO) \
  451. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_LPTIM_OUT) \
  452. || ((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
  453. && ( \
  454. ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_CH1) \
  455. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH1) \
  456. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH3) \
  457. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH4) \
  458. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM16_CH1) \
  459. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE15) \
  460. ) \
  461. ) \
  462. || ((((__ADC_INSTANCE__) == ADC3)) \
  463. && ( \
  464. ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH3) \
  465. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH3) \
  466. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH4) \
  467. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH2) \
  468. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE3) \
  469. ) \
  470. ) \
  471. )
  472. #elif defined(STM32G411xB) || defined(STM32G411xC) || defined(STM32G414xx) || defined(STM32GBK1CB) || defined(STM32G431xx) || defined(STM32G441xx)
  473. #define IS_LL_ADC_INJ_TRIG_SOURCE(__ADC_INSTANCE__, __INJ_TRIG_SOURCE__) \
  474. (((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE) \
  475. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) \
  476. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO2) \
  477. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4) \
  478. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_TRGO) \
  479. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_CH1) \
  480. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_TRGO) \
  481. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH1) \
  482. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH3) \
  483. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH4) \
  484. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_TRGO) \
  485. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM6_TRGO) \
  486. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM7_TRGO) \
  487. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO) \
  488. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO2) \
  489. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH4) \
  490. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM15_TRGO) \
  491. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM16_CH1) \
  492. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_LPTIM_OUT) \
  493. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE15) \
  494. )
  495. #elif defined(STM32G491xx) || defined(STM32G4A1xx)
  496. #define IS_LL_ADC_INJ_TRIG_SOURCE(__ADC_INSTANCE__, __INJ_TRIG_SOURCE__) \
  497. (((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE) \
  498. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) \
  499. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO2) \
  500. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4) \
  501. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_TRGO) \
  502. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_TRGO) \
  503. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_TRGO) \
  504. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM6_TRGO) \
  505. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM7_TRGO) \
  506. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO) \
  507. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_TRGO2) \
  508. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH4) \
  509. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM15_TRGO) \
  510. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_TRGO) \
  511. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_TRGO2) \
  512. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_LPTIM_OUT) \
  513. || ((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
  514. && ( \
  515. ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_CH1) \
  516. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH1) \
  517. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH3) \
  518. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH4) \
  519. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM16_CH1) \
  520. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_CH4) \
  521. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE15) \
  522. ) \
  523. ) \
  524. || ((((__ADC_INSTANCE__) == ADC3)) \
  525. && ( \
  526. ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH3) \
  527. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH3) \
  528. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH4) \
  529. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH2) \
  530. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM20_CH2) \
  531. || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE3) \
  532. ) \
  533. ) \
  534. )
  535. #endif /* STM32G4xx */
  536. #define IS_LL_ADC_INJ_TRIG_EXT_EDGE(__INJ_TRIG_EXT_EDGE__) \
  537. (((__INJ_TRIG_EXT_EDGE__) == LL_ADC_INJ_TRIG_EXT_RISING) \
  538. || ((__INJ_TRIG_EXT_EDGE__) == LL_ADC_INJ_TRIG_EXT_FALLING) \
  539. || ((__INJ_TRIG_EXT_EDGE__) == LL_ADC_INJ_TRIG_EXT_RISINGFALLING) \
  540. )
  541. #define IS_LL_ADC_INJ_TRIG_AUTO(__INJ_TRIG_AUTO__) \
  542. (((__INJ_TRIG_AUTO__) == LL_ADC_INJ_TRIG_INDEPENDENT) \
  543. || ((__INJ_TRIG_AUTO__) == LL_ADC_INJ_TRIG_FROM_GRP_REGULAR) \
  544. )
  545. #define IS_LL_ADC_INJ_SEQ_SCAN_LENGTH(__INJ_SEQ_SCAN_LENGTH__) \
  546. (((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_DISABLE) \
  547. || ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_ENABLE_2RANKS) \
  548. || ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_ENABLE_3RANKS) \
  549. || ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_ENABLE_4RANKS) \
  550. )
  551. #define IS_LL_ADC_INJ_SEQ_SCAN_DISCONT_MODE(__INJ_SEQ_DISCONT_MODE__) \
  552. (((__INJ_SEQ_DISCONT_MODE__) == LL_ADC_INJ_SEQ_DISCONT_DISABLE) \
  553. || ((__INJ_SEQ_DISCONT_MODE__) == LL_ADC_INJ_SEQ_DISCONT_1RANK) \
  554. )
  555. #if defined(ADC_MULTIMODE_SUPPORT)
  556. /* Check of parameters for configuration of ADC hierarchical scope: */
  557. /* multimode. */
  558. #define IS_LL_ADC_MULTI_MODE(__MULTI_MODE__) \
  559. (((__MULTI_MODE__) == LL_ADC_MULTI_INDEPENDENT) \
  560. || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIMULT) \
  561. || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INTERL) \
  562. || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_INJ_SIMULT) \
  563. || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_INJ_ALTERN) \
  564. || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIM_INJ_SIM) \
  565. || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIM_INJ_ALT) \
  566. || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INT_INJ_SIM) \
  567. )
  568. #define IS_LL_ADC_MULTI_DMA_TRANSFER(__MULTI_DMA_TRANSFER__) \
  569. (((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_EACH_ADC) \
  570. || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_LIMIT_RES12_10B) \
  571. || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_LIMIT_RES8_6B) \
  572. || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_UNLMT_RES12_10B) \
  573. || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_UNLMT_RES8_6B) \
  574. )
  575. #define IS_LL_ADC_MULTI_TWOSMP_DELAY(__MULTI_TWOSMP_DELAY__) \
  576. (((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_1CYCLE) \
  577. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_2CYCLES) \
  578. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_3CYCLES) \
  579. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_4CYCLES) \
  580. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_5CYCLES) \
  581. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_6CYCLES) \
  582. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_7CYCLES) \
  583. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_8CYCLES) \
  584. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_9CYCLES) \
  585. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_10CYCLES) \
  586. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_11CYCLES) \
  587. || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_12CYCLES) \
  588. )
  589. #define IS_LL_ADC_MULTI_MASTER_SLAVE(__MULTI_MASTER_SLAVE__) \
  590. (((__MULTI_MASTER_SLAVE__) == LL_ADC_MULTI_MASTER) \
  591. || ((__MULTI_MASTER_SLAVE__) == LL_ADC_MULTI_SLAVE) \
  592. || ((__MULTI_MASTER_SLAVE__) == LL_ADC_MULTI_MASTER_SLAVE) \
  593. )
  594. #endif /* ADC_MULTIMODE_SUPPORT */
  595. /**
  596. * @}
  597. */
  598. /* Private function prototypes -----------------------------------------------*/
  599. /* Exported functions --------------------------------------------------------*/
  600. /** @addtogroup ADC_LL_Exported_Functions
  601. * @{
  602. */
  603. /** @addtogroup ADC_LL_EF_Init
  604. * @{
  605. */
  606. /**
  607. * @brief De-initialize registers of all ADC instances belonging to
  608. * the same ADC common instance to their default reset values.
  609. * @note This function is performing a hard reset, using high level
  610. * clock source RCC ADC reset.
  611. * Caution: On this STM32 series, if several ADC instances are available
  612. * on the selected device, RCC ADC reset will reset
  613. * all ADC instances belonging to the common ADC instance.
  614. * To de-initialize only 1 ADC instance, use
  615. * function @ref LL_ADC_DeInit().
  616. * @param ADCxy_COMMON ADC common instance
  617. * (can be set directly from CMSIS definition or by using helper macro @ref __LL_ADC_COMMON_INSTANCE() )
  618. * @retval An ErrorStatus enumeration value:
  619. * - SUCCESS: ADC common registers are de-initialized
  620. * - ERROR: not applicable
  621. */
  622. ErrorStatus LL_ADC_CommonDeInit(const ADC_Common_TypeDef *ADCxy_COMMON)
  623. {
  624. /* Check the parameters */
  625. assert_param(IS_ADC_COMMON_INSTANCE(ADCxy_COMMON));
  626. if (ADCxy_COMMON == ADC12_COMMON)
  627. {
  628. /* Force reset of ADC clock (core clock) */
  629. LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_ADC12);
  630. /* Release reset of ADC clock (core clock) */
  631. LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_ADC12);
  632. }
  633. #if defined(ADC345_COMMON)
  634. else
  635. {
  636. /* Force reset of ADC clock (core clock) */
  637. LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_ADC345);
  638. /* Release reset of ADC clock (core clock) */
  639. LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_ADC345);
  640. }
  641. #endif /* ADC345_COMMON */
  642. return SUCCESS;
  643. }
  644. /**
  645. * @brief Initialize some features of ADC common parameters
  646. * (all ADC instances belonging to the same ADC common instance)
  647. * and multimode (for devices with several ADC instances available).
  648. * @note The setting of ADC common parameters is conditioned to
  649. * ADC instances state:
  650. * All ADC instances belonging to the same ADC common instance
  651. * must be disabled.
  652. * @param ADCxy_COMMON ADC common instance
  653. * (can be set directly from CMSIS definition or by using helper macro @ref __LL_ADC_COMMON_INSTANCE() )
  654. * @param pADC_CommonInitStruct Pointer to a @ref LL_ADC_CommonInitTypeDef structure
  655. * @retval An ErrorStatus enumeration value:
  656. * - SUCCESS: ADC common registers are initialized
  657. * - ERROR: ADC common registers are not initialized
  658. */
  659. ErrorStatus LL_ADC_CommonInit(ADC_Common_TypeDef *ADCxy_COMMON, const LL_ADC_CommonInitTypeDef *pADC_CommonInitStruct)
  660. {
  661. ErrorStatus status = SUCCESS;
  662. /* Check the parameters */
  663. assert_param(IS_ADC_COMMON_INSTANCE(ADCxy_COMMON));
  664. assert_param(IS_LL_ADC_COMMON_CLOCK(pADC_CommonInitStruct->CommonClock));
  665. #if defined(ADC_MULTIMODE_SUPPORT)
  666. assert_param(IS_LL_ADC_MULTI_MODE(pADC_CommonInitStruct->Multimode));
  667. if (pADC_CommonInitStruct->Multimode != LL_ADC_MULTI_INDEPENDENT)
  668. {
  669. assert_param(IS_LL_ADC_MULTI_DMA_TRANSFER(pADC_CommonInitStruct->MultiDMATransfer));
  670. assert_param(IS_LL_ADC_MULTI_TWOSMP_DELAY(pADC_CommonInitStruct->MultiTwoSamplingDelay));
  671. }
  672. #endif /* ADC_MULTIMODE_SUPPORT */
  673. /* Note: Hardware constraint (refer to description of functions */
  674. /* "LL_ADC_SetCommonXXX()" and "LL_ADC_SetMultiXXX()"): */
  675. /* On this STM32 series, setting of these features is conditioned to */
  676. /* ADC state: */
  677. /* All ADC instances of the ADC common group must be disabled. */
  678. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(ADCxy_COMMON) == 0UL)
  679. {
  680. /* Configuration of ADC hierarchical scope: */
  681. /* - common to several ADC */
  682. /* (all ADC instances belonging to the same ADC common instance) */
  683. /* - Set ADC clock (conversion clock) */
  684. /* - multimode (if several ADC instances available on the */
  685. /* selected device) */
  686. /* - Set ADC multimode configuration */
  687. /* - Set ADC multimode DMA transfer */
  688. /* - Set ADC multimode: delay between 2 sampling phases */
  689. #if defined(ADC_MULTIMODE_SUPPORT)
  690. if (pADC_CommonInitStruct->Multimode != LL_ADC_MULTI_INDEPENDENT)
  691. {
  692. MODIFY_REG(ADCxy_COMMON->CCR,
  693. ADC_CCR_CKMODE
  694. | ADC_CCR_PRESC
  695. | ADC_CCR_DUAL
  696. | ADC_CCR_MDMA
  697. | ADC_CCR_DELAY
  698. ,
  699. pADC_CommonInitStruct->CommonClock
  700. | pADC_CommonInitStruct->Multimode
  701. | pADC_CommonInitStruct->MultiDMATransfer
  702. | pADC_CommonInitStruct->MultiTwoSamplingDelay
  703. );
  704. }
  705. else
  706. {
  707. MODIFY_REG(ADCxy_COMMON->CCR,
  708. ADC_CCR_CKMODE
  709. | ADC_CCR_PRESC
  710. | ADC_CCR_DUAL
  711. | ADC_CCR_MDMA
  712. | ADC_CCR_DELAY
  713. ,
  714. pADC_CommonInitStruct->CommonClock
  715. | LL_ADC_MULTI_INDEPENDENT
  716. );
  717. }
  718. #else
  719. LL_ADC_SetCommonClock(ADCxy_COMMON, pADC_CommonInitStruct->CommonClock);
  720. #endif /* ADC_MULTIMODE_SUPPORT */
  721. }
  722. else
  723. {
  724. /* Initialization error: One or several ADC instances belonging to */
  725. /* the same ADC common instance are not disabled. */
  726. status = ERROR;
  727. }
  728. return status;
  729. }
  730. /**
  731. * @brief Set each @ref LL_ADC_CommonInitTypeDef field to default value.
  732. * @param pADC_CommonInitStruct Pointer to a @ref LL_ADC_CommonInitTypeDef structure
  733. * whose fields will be set to default values.
  734. * @retval None
  735. */
  736. void LL_ADC_CommonStructInit(LL_ADC_CommonInitTypeDef *pADC_CommonInitStruct)
  737. {
  738. /* Set pADC_CommonInitStruct fields to default values */
  739. /* Set fields of ADC common */
  740. /* (all ADC instances belonging to the same ADC common instance) */
  741. pADC_CommonInitStruct->CommonClock = LL_ADC_CLOCK_SYNC_PCLK_DIV2;
  742. #if defined(ADC_MULTIMODE_SUPPORT)
  743. /* Set fields of ADC multimode */
  744. pADC_CommonInitStruct->Multimode = LL_ADC_MULTI_INDEPENDENT;
  745. pADC_CommonInitStruct->MultiDMATransfer = LL_ADC_MULTI_REG_DMA_EACH_ADC;
  746. pADC_CommonInitStruct->MultiTwoSamplingDelay = LL_ADC_MULTI_TWOSMP_DELAY_1CYCLE;
  747. #endif /* ADC_MULTIMODE_SUPPORT */
  748. }
  749. /**
  750. * @brief De-initialize registers of the selected ADC instance
  751. * to their default reset values.
  752. * @note To reset all ADC instances quickly (perform a hard reset),
  753. * use function @ref LL_ADC_CommonDeInit().
  754. * @note If this functions returns error status, it means that ADC instance
  755. * is in an unknown state.
  756. * In this case, perform a hard reset using high level
  757. * clock source RCC ADC reset.
  758. * Caution: On this STM32 series, if several ADC instances are available
  759. * on the selected device, RCC ADC reset will reset
  760. * all ADC instances belonging to the common ADC instance.
  761. * Refer to function @ref LL_ADC_CommonDeInit().
  762. * @param ADCx ADC instance
  763. * @retval An ErrorStatus enumeration value:
  764. * - SUCCESS: ADC registers are de-initialized
  765. * - ERROR: ADC registers are not de-initialized
  766. */
  767. ErrorStatus LL_ADC_DeInit(ADC_TypeDef *ADCx)
  768. {
  769. ErrorStatus status = SUCCESS;
  770. __IO uint32_t timeout_cpu_cycles = 0UL;
  771. /* Check the parameters */
  772. assert_param(IS_ADC_ALL_INSTANCE(ADCx));
  773. /* Disable ADC instance if not already disabled. */
  774. if (LL_ADC_IsEnabled(ADCx) == 1UL)
  775. {
  776. /* Stop potential ADC conversion on going on ADC group regular. */
  777. if (LL_ADC_REG_IsConversionOngoing(ADCx) != 0UL)
  778. {
  779. if (LL_ADC_REG_IsStopConversionOngoing(ADCx) == 0UL)
  780. {
  781. LL_ADC_REG_StopConversion(ADCx);
  782. }
  783. }
  784. /* Stop potential ADC conversion on going on ADC group injected. */
  785. if (LL_ADC_INJ_IsConversionOngoing(ADCx) != 0UL)
  786. {
  787. if (LL_ADC_INJ_IsStopConversionOngoing(ADCx) == 0UL)
  788. {
  789. LL_ADC_INJ_StopConversion(ADCx);
  790. }
  791. }
  792. /* Wait for ADC conversions are effectively stopped */
  793. timeout_cpu_cycles = ADC_TIMEOUT_STOP_CONVERSION_CPU_CYCLES;
  794. while ((LL_ADC_REG_IsStopConversionOngoing(ADCx)
  795. | LL_ADC_INJ_IsStopConversionOngoing(ADCx)) == 1UL)
  796. {
  797. timeout_cpu_cycles--;
  798. if (timeout_cpu_cycles == 0UL)
  799. {
  800. /* Time-out error */
  801. status = ERROR;
  802. break;
  803. }
  804. }
  805. /* Flush group injected contexts queue (register JSQR): */
  806. /* Note: Bit JQM must be set to empty the contexts queue (otherwise */
  807. /* contexts queue is maintained with the last active context). */
  808. LL_ADC_INJ_SetQueueMode(ADCx, LL_ADC_INJ_QUEUE_2CONTEXTS_END_EMPTY);
  809. /* Disable the ADC instance */
  810. LL_ADC_Disable(ADCx);
  811. /* Wait for ADC instance is effectively disabled */
  812. timeout_cpu_cycles = ADC_TIMEOUT_DISABLE_CPU_CYCLES;
  813. while (LL_ADC_IsDisableOngoing(ADCx) == 1UL)
  814. {
  815. timeout_cpu_cycles--;
  816. if (timeout_cpu_cycles == 0UL)
  817. {
  818. /* Time-out error */
  819. status = ERROR;
  820. break;
  821. }
  822. }
  823. }
  824. /* Check whether ADC state is compliant with expected state */
  825. if (READ_BIT(ADCx->CR,
  826. (ADC_CR_JADSTP | ADC_CR_ADSTP | ADC_CR_JADSTART | ADC_CR_ADSTART
  827. | ADC_CR_ADDIS | ADC_CR_ADEN)
  828. )
  829. == 0UL)
  830. {
  831. /* ========== Reset ADC registers ========== */
  832. /* Reset register IER */
  833. CLEAR_BIT(ADCx->IER,
  834. (LL_ADC_IT_ADRDY
  835. | LL_ADC_IT_EOC
  836. | LL_ADC_IT_EOS
  837. | LL_ADC_IT_OVR
  838. | LL_ADC_IT_EOSMP
  839. | LL_ADC_IT_JEOC
  840. | LL_ADC_IT_JEOS
  841. | LL_ADC_IT_JQOVF
  842. | LL_ADC_IT_AWD1
  843. | LL_ADC_IT_AWD2
  844. | LL_ADC_IT_AWD3
  845. )
  846. );
  847. /* Reset register ISR */
  848. SET_BIT(ADCx->ISR,
  849. (LL_ADC_FLAG_ADRDY
  850. | LL_ADC_FLAG_EOC
  851. | LL_ADC_FLAG_EOS
  852. | LL_ADC_FLAG_OVR
  853. | LL_ADC_FLAG_EOSMP
  854. | LL_ADC_FLAG_JEOC
  855. | LL_ADC_FLAG_JEOS
  856. | LL_ADC_FLAG_JQOVF
  857. | LL_ADC_FLAG_AWD1
  858. | LL_ADC_FLAG_AWD2
  859. | LL_ADC_FLAG_AWD3
  860. )
  861. );
  862. /* Reset register CR */
  863. /* - Bits ADC_CR_JADSTP, ADC_CR_ADSTP, ADC_CR_JADSTART, ADC_CR_ADSTART, */
  864. /* ADC_CR_ADCAL, ADC_CR_ADDIS, ADC_CR_ADEN are in */
  865. /* access mode "read-set": no direct reset applicable. */
  866. /* - Reset Calibration mode to default setting (single ended). */
  867. /* - Disable ADC internal voltage regulator. */
  868. /* - Enable ADC deep power down. */
  869. /* Note: ADC internal voltage regulator disable and ADC deep power */
  870. /* down enable are conditioned to ADC state disabled: */
  871. /* already done above. */
  872. CLEAR_BIT(ADCx->CR, ADC_CR_ADVREGEN | ADC_CR_ADCALDIF);
  873. SET_BIT(ADCx->CR, ADC_CR_DEEPPWD);
  874. /* Reset register CFGR */
  875. MODIFY_REG(ADCx->CFGR,
  876. (ADC_CFGR_AWD1CH | ADC_CFGR_JAUTO | ADC_CFGR_JAWD1EN
  877. | ADC_CFGR_AWD1EN | ADC_CFGR_AWD1SGL | ADC_CFGR_JQM
  878. | ADC_CFGR_JDISCEN | ADC_CFGR_DISCNUM | ADC_CFGR_DISCEN
  879. | ADC_CFGR_AUTDLY | ADC_CFGR_CONT | ADC_CFGR_OVRMOD
  880. | ADC_CFGR_EXTEN | ADC_CFGR_EXTSEL | ADC_CFGR_ALIGN
  881. | ADC_CFGR_RES | ADC_CFGR_DMACFG | ADC_CFGR_DMAEN),
  882. ADC_CFGR_JQDIS
  883. );
  884. /* Reset register CFGR2 */
  885. CLEAR_BIT(ADCx->CFGR2,
  886. (ADC_CFGR2_ROVSM | ADC_CFGR2_TROVS | ADC_CFGR2_OVSS
  887. | ADC_CFGR2_SWTRIG | ADC_CFGR2_BULB | ADC_CFGR2_SMPTRIG
  888. | ADC_CFGR2_GCOMP
  889. | ADC_CFGR2_OVSR | ADC_CFGR2_JOVSE | ADC_CFGR2_ROVSE)
  890. );
  891. /* Reset register SMPR1 */
  892. CLEAR_BIT(ADCx->SMPR1,
  893. (ADC_SMPR1_SMP9 | ADC_SMPR1_SMP8 | ADC_SMPR1_SMP7
  894. | ADC_SMPR1_SMP6 | ADC_SMPR1_SMP5 | ADC_SMPR1_SMP4
  895. | ADC_SMPR1_SMP3 | ADC_SMPR1_SMP2 | ADC_SMPR1_SMP1)
  896. );
  897. /* Reset register SMPR2 */
  898. CLEAR_BIT(ADCx->SMPR2,
  899. (ADC_SMPR2_SMP18 | ADC_SMPR2_SMP17 | ADC_SMPR2_SMP16
  900. | ADC_SMPR2_SMP15 | ADC_SMPR2_SMP14 | ADC_SMPR2_SMP13
  901. | ADC_SMPR2_SMP12 | ADC_SMPR2_SMP11 | ADC_SMPR2_SMP10)
  902. );
  903. /* Reset register TR1 */
  904. MODIFY_REG(ADCx->TR1, ADC_TR1_AWDFILT | ADC_TR1_HT1 | ADC_TR1_LT1, ADC_TR1_HT1);
  905. /* Reset register TR2 */
  906. MODIFY_REG(ADCx->TR2, ADC_TR2_HT2 | ADC_TR2_LT2, ADC_TR2_HT2);
  907. /* Reset register TR3 */
  908. MODIFY_REG(ADCx->TR3, ADC_TR3_HT3 | ADC_TR3_LT3, ADC_TR3_HT3);
  909. /* Reset register SQR1 */
  910. CLEAR_BIT(ADCx->SQR1,
  911. (ADC_SQR1_SQ4 | ADC_SQR1_SQ3 | ADC_SQR1_SQ2
  912. | ADC_SQR1_SQ1 | ADC_SQR1_L)
  913. );
  914. /* Reset register SQR2 */
  915. CLEAR_BIT(ADCx->SQR2,
  916. (ADC_SQR2_SQ9 | ADC_SQR2_SQ8 | ADC_SQR2_SQ7
  917. | ADC_SQR2_SQ6 | ADC_SQR2_SQ5)
  918. );
  919. /* Reset register SQR3 */
  920. CLEAR_BIT(ADCx->SQR3,
  921. (ADC_SQR3_SQ14 | ADC_SQR3_SQ13 | ADC_SQR3_SQ12
  922. | ADC_SQR3_SQ11 | ADC_SQR3_SQ10)
  923. );
  924. /* Reset register SQR4 */
  925. CLEAR_BIT(ADCx->SQR4, ADC_SQR4_SQ16 | ADC_SQR4_SQ15);
  926. /* Reset register JSQR */
  927. CLEAR_BIT(ADCx->JSQR,
  928. (ADC_JSQR_JL
  929. | ADC_JSQR_JEXTSEL | ADC_JSQR_JEXTEN
  930. | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3
  931. | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1)
  932. );
  933. /* Reset register DR */
  934. /* Note: bits in access mode read only, no direct reset applicable */
  935. /* Reset register OFR1 */
  936. CLEAR_BIT(ADCx->OFR1,
  937. ADC_OFR1_OFFSET1_EN | ADC_OFR1_OFFSET1_CH | ADC_OFR1_OFFSET1 | ADC_OFR1_SATEN | ADC_OFR1_OFFSETPOS);
  938. /* Reset register OFR2 */
  939. CLEAR_BIT(ADCx->OFR2,
  940. ADC_OFR2_OFFSET2_EN | ADC_OFR2_OFFSET2_CH | ADC_OFR2_OFFSET2 | ADC_OFR2_SATEN | ADC_OFR2_OFFSETPOS);
  941. /* Reset register OFR3 */
  942. CLEAR_BIT(ADCx->OFR3,
  943. ADC_OFR3_OFFSET3_EN | ADC_OFR3_OFFSET3_CH | ADC_OFR3_OFFSET3 | ADC_OFR3_SATEN | ADC_OFR3_OFFSETPOS);
  944. /* Reset register OFR4 */
  945. CLEAR_BIT(ADCx->OFR4,
  946. ADC_OFR4_OFFSET4_EN | ADC_OFR4_OFFSET4_CH | ADC_OFR4_OFFSET4 | ADC_OFR4_SATEN | ADC_OFR4_OFFSETPOS);
  947. /* Reset registers JDR1, JDR2, JDR3, JDR4 */
  948. /* Note: bits in access mode read only, no direct reset applicable */
  949. /* Reset register AWD2CR */
  950. CLEAR_BIT(ADCx->AWD2CR, ADC_AWD2CR_AWD2CH);
  951. /* Reset register AWD3CR */
  952. CLEAR_BIT(ADCx->AWD3CR, ADC_AWD3CR_AWD3CH);
  953. /* Reset register DIFSEL */
  954. CLEAR_BIT(ADCx->DIFSEL, ADC_DIFSEL_DIFSEL);
  955. /* Reset register CALFACT */
  956. CLEAR_BIT(ADCx->CALFACT, ADC_CALFACT_CALFACT_D | ADC_CALFACT_CALFACT_S);
  957. /* Reset register GCOMP */
  958. CLEAR_BIT(ADCx->GCOMP, ADC_GCOMP_GCOMPCOEFF);
  959. }
  960. else
  961. {
  962. /* ADC instance is in an unknown state */
  963. /* Need to performing a hard reset of ADC instance, using high level */
  964. /* clock source RCC ADC reset. */
  965. /* Caution: On this STM32 series, if several ADC instances are available */
  966. /* on the selected device, RCC ADC reset will reset */
  967. /* all ADC instances belonging to the common ADC instance. */
  968. /* Caution: On this STM32 series, if several ADC instances are available */
  969. /* on the selected device, RCC ADC reset will reset */
  970. /* all ADC instances belonging to the common ADC instance. */
  971. status = ERROR;
  972. }
  973. return status;
  974. }
  975. /**
  976. * @brief Initialize some features of ADC instance.
  977. * @note These parameters have an impact on ADC scope: ADC instance.
  978. * Affects both group regular and group injected (availability
  979. * of ADC group injected depends on STM32 series).
  980. * Refer to corresponding unitary functions into
  981. * @ref ADC_LL_EF_Configuration_ADC_Instance .
  982. * @note The setting of these parameters by function @ref LL_ADC_Init()
  983. * is conditioned to ADC state:
  984. * ADC instance must be disabled.
  985. * This condition is applied to all ADC features, for efficiency
  986. * and compatibility over all STM32 series. However, the different
  987. * features can be set under different ADC state conditions
  988. * (setting possible with ADC enabled without conversion on going,
  989. * ADC enabled with conversion on going, ...)
  990. * Each feature can be updated afterwards with a unitary function
  991. * and potentially with ADC in a different state than disabled,
  992. * refer to description of each function for setting
  993. * conditioned to ADC state.
  994. * @note After using this function, some other features must be configured
  995. * using LL unitary functions.
  996. * The minimum configuration remaining to be done is:
  997. * - Set ADC group regular or group injected sequencer:
  998. * map channel on the selected sequencer rank.
  999. * Refer to function @ref LL_ADC_REG_SetSequencerRanks().
  1000. * - Set ADC channel sampling time
  1001. * Refer to function LL_ADC_SetChannelSamplingTime();
  1002. * @param ADCx ADC instance
  1003. * @param pADC_InitStruct Pointer to a @ref LL_ADC_REG_InitTypeDef structure
  1004. * @retval An ErrorStatus enumeration value:
  1005. * - SUCCESS: ADC registers are initialized
  1006. * - ERROR: ADC registers are not initialized
  1007. */
  1008. ErrorStatus LL_ADC_Init(ADC_TypeDef *ADCx, const LL_ADC_InitTypeDef *pADC_InitStruct)
  1009. {
  1010. ErrorStatus status = SUCCESS;
  1011. /* Check the parameters */
  1012. assert_param(IS_ADC_ALL_INSTANCE(ADCx));
  1013. assert_param(IS_LL_ADC_RESOLUTION(pADC_InitStruct->Resolution));
  1014. assert_param(IS_LL_ADC_DATA_ALIGN(pADC_InitStruct->DataAlignment));
  1015. assert_param(IS_LL_ADC_LOW_POWER(pADC_InitStruct->LowPowerMode));
  1016. /* Note: Hardware constraint (refer to description of this function): */
  1017. /* ADC instance must be disabled. */
  1018. if (LL_ADC_IsEnabled(ADCx) == 0UL)
  1019. {
  1020. /* Configuration of ADC hierarchical scope: */
  1021. /* - ADC instance */
  1022. /* - Set ADC data resolution */
  1023. /* - Set ADC conversion data alignment */
  1024. /* - Set ADC low power mode */
  1025. MODIFY_REG(ADCx->CFGR,
  1026. ADC_CFGR_RES
  1027. | ADC_CFGR_ALIGN
  1028. | ADC_CFGR_AUTDLY
  1029. ,
  1030. pADC_InitStruct->Resolution
  1031. | pADC_InitStruct->DataAlignment
  1032. | pADC_InitStruct->LowPowerMode
  1033. );
  1034. }
  1035. else
  1036. {
  1037. /* Initialization error: ADC instance is not disabled. */
  1038. status = ERROR;
  1039. }
  1040. return status;
  1041. }
  1042. /**
  1043. * @brief Set each @ref LL_ADC_InitTypeDef field to default value.
  1044. * @param pADC_InitStruct Pointer to a @ref LL_ADC_InitTypeDef structure
  1045. * whose fields will be set to default values.
  1046. * @retval None
  1047. */
  1048. void LL_ADC_StructInit(LL_ADC_InitTypeDef *pADC_InitStruct)
  1049. {
  1050. /* Set pADC_InitStruct fields to default values */
  1051. /* Set fields of ADC instance */
  1052. pADC_InitStruct->Resolution = LL_ADC_RESOLUTION_12B;
  1053. pADC_InitStruct->DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
  1054. pADC_InitStruct->LowPowerMode = LL_ADC_LP_MODE_NONE;
  1055. }
  1056. /**
  1057. * @brief Initialize some features of ADC group regular.
  1058. * @note These parameters have an impact on ADC scope: ADC group regular.
  1059. * Refer to corresponding unitary functions into
  1060. * @ref ADC_LL_EF_Configuration_ADC_Group_Regular
  1061. * (functions with prefix "REG").
  1062. * @note The setting of these parameters by function @ref LL_ADC_Init()
  1063. * is conditioned to ADC state:
  1064. * ADC instance must be disabled.
  1065. * This condition is applied to all ADC features, for efficiency
  1066. * and compatibility over all STM32 series. However, the different
  1067. * features can be set under different ADC state conditions
  1068. * (setting possible with ADC enabled without conversion on going,
  1069. * ADC enabled with conversion on going, ...)
  1070. * Each feature can be updated afterwards with a unitary function
  1071. * and potentially with ADC in a different state than disabled,
  1072. * refer to description of each function for setting
  1073. * conditioned to ADC state.
  1074. * @note After using this function, other features must be configured
  1075. * using LL unitary functions.
  1076. * The minimum configuration remaining to be done is:
  1077. * - Set ADC group regular or group injected sequencer:
  1078. * map channel on the selected sequencer rank.
  1079. * Refer to function @ref LL_ADC_REG_SetSequencerRanks().
  1080. * - Set ADC channel sampling time
  1081. * Refer to function LL_ADC_SetChannelSamplingTime();
  1082. * @param ADCx ADC instance
  1083. * @param pADC_RegInitStruct Pointer to a @ref LL_ADC_REG_InitTypeDef structure
  1084. * @retval An ErrorStatus enumeration value:
  1085. * - SUCCESS: ADC registers are initialized
  1086. * - ERROR: ADC registers are not initialized
  1087. */
  1088. ErrorStatus LL_ADC_REG_Init(ADC_TypeDef *ADCx, const LL_ADC_REG_InitTypeDef *pADC_RegInitStruct)
  1089. {
  1090. ErrorStatus status = SUCCESS;
  1091. /* Check the parameters */
  1092. assert_param(IS_ADC_ALL_INSTANCE(ADCx));
  1093. assert_param(IS_LL_ADC_REG_TRIG_SOURCE(ADCx, pADC_RegInitStruct->TriggerSource));
  1094. assert_param(IS_LL_ADC_REG_SEQ_SCAN_LENGTH(pADC_RegInitStruct->SequencerLength));
  1095. if (pADC_RegInitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE)
  1096. {
  1097. assert_param(IS_LL_ADC_REG_SEQ_SCAN_DISCONT_MODE(pADC_RegInitStruct->SequencerDiscont));
  1098. /* ADC group regular continuous mode and discontinuous mode */
  1099. /* can not be enabled simultenaeously */
  1100. assert_param((pADC_RegInitStruct->ContinuousMode == LL_ADC_REG_CONV_SINGLE)
  1101. || (pADC_RegInitStruct->SequencerDiscont == LL_ADC_REG_SEQ_DISCONT_DISABLE));
  1102. }
  1103. assert_param(IS_LL_ADC_REG_CONTINUOUS_MODE(pADC_RegInitStruct->ContinuousMode));
  1104. assert_param(IS_LL_ADC_REG_DMA_TRANSFER(pADC_RegInitStruct->DMATransfer));
  1105. assert_param(IS_LL_ADC_REG_OVR_DATA_BEHAVIOR(pADC_RegInitStruct->Overrun));
  1106. /* Note: Hardware constraint (refer to description of this function): */
  1107. /* ADC instance must be disabled. */
  1108. if (LL_ADC_IsEnabled(ADCx) == 0UL)
  1109. {
  1110. /* Configuration of ADC hierarchical scope: */
  1111. /* - ADC group regular */
  1112. /* - Set ADC group regular trigger source */
  1113. /* - Set ADC group regular sequencer length */
  1114. /* - Set ADC group regular sequencer discontinuous mode */
  1115. /* - Set ADC group regular continuous mode */
  1116. /* - Set ADC group regular conversion data transfer: no transfer or */
  1117. /* transfer by DMA, and DMA requests mode */
  1118. /* - Set ADC group regular overrun behavior */
  1119. /* Note: On this STM32 series, ADC trigger edge is set to value 0x0 by */
  1120. /* setting of trigger source to SW start. */
  1121. if (pADC_RegInitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE)
  1122. {
  1123. MODIFY_REG(ADCx->CFGR,
  1124. ADC_CFGR_EXTSEL
  1125. | ADC_CFGR_EXTEN
  1126. | ADC_CFGR_DISCEN
  1127. | ADC_CFGR_DISCNUM
  1128. | ADC_CFGR_CONT
  1129. | ADC_CFGR_DMAEN
  1130. | ADC_CFGR_DMACFG
  1131. | ADC_CFGR_OVRMOD
  1132. ,
  1133. pADC_RegInitStruct->TriggerSource
  1134. | pADC_RegInitStruct->SequencerDiscont
  1135. | pADC_RegInitStruct->ContinuousMode
  1136. | pADC_RegInitStruct->DMATransfer
  1137. | pADC_RegInitStruct->Overrun
  1138. );
  1139. }
  1140. else
  1141. {
  1142. MODIFY_REG(ADCx->CFGR,
  1143. ADC_CFGR_EXTSEL
  1144. | ADC_CFGR_EXTEN
  1145. | ADC_CFGR_DISCEN
  1146. | ADC_CFGR_DISCNUM
  1147. | ADC_CFGR_CONT
  1148. | ADC_CFGR_DMAEN
  1149. | ADC_CFGR_DMACFG
  1150. | ADC_CFGR_OVRMOD
  1151. ,
  1152. pADC_RegInitStruct->TriggerSource
  1153. | LL_ADC_REG_SEQ_DISCONT_DISABLE
  1154. | pADC_RegInitStruct->ContinuousMode
  1155. | pADC_RegInitStruct->DMATransfer
  1156. | pADC_RegInitStruct->Overrun
  1157. );
  1158. }
  1159. /* Set ADC group regular sequencer length and scan direction */
  1160. LL_ADC_REG_SetSequencerLength(ADCx, pADC_RegInitStruct->SequencerLength);
  1161. }
  1162. else
  1163. {
  1164. /* Initialization error: ADC instance is not disabled. */
  1165. status = ERROR;
  1166. }
  1167. return status;
  1168. }
  1169. /**
  1170. * @brief Set each @ref LL_ADC_REG_InitTypeDef field to default value.
  1171. * @param pADC_RegInitStruct Pointer to a @ref LL_ADC_REG_InitTypeDef structure
  1172. * whose fields will be set to default values.
  1173. * @retval None
  1174. */
  1175. void LL_ADC_REG_StructInit(LL_ADC_REG_InitTypeDef *pADC_RegInitStruct)
  1176. {
  1177. /* Set pADC_RegInitStruct fields to default values */
  1178. /* Set fields of ADC group regular */
  1179. /* Note: On this STM32 series, ADC trigger edge is set to value 0x0 by */
  1180. /* setting of trigger source to SW start. */
  1181. pADC_RegInitStruct->TriggerSource = LL_ADC_REG_TRIG_SOFTWARE;
  1182. pADC_RegInitStruct->SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE;
  1183. pADC_RegInitStruct->SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
  1184. pADC_RegInitStruct->ContinuousMode = LL_ADC_REG_CONV_SINGLE;
  1185. pADC_RegInitStruct->DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
  1186. pADC_RegInitStruct->Overrun = LL_ADC_REG_OVR_DATA_OVERWRITTEN;
  1187. }
  1188. /**
  1189. * @brief Initialize some features of ADC group injected.
  1190. * @note These parameters have an impact on ADC scope: ADC group injected.
  1191. * Refer to corresponding unitary functions into
  1192. * @ref ADC_LL_EF_Configuration_ADC_Group_Regular
  1193. * (functions with prefix "INJ").
  1194. * @note The setting of these parameters by function @ref LL_ADC_Init()
  1195. * is conditioned to ADC state:
  1196. * ADC instance must be disabled.
  1197. * This condition is applied to all ADC features, for efficiency
  1198. * and compatibility over all STM32 series. However, the different
  1199. * features can be set under different ADC state conditions
  1200. * (setting possible with ADC enabled without conversion on going,
  1201. * ADC enabled with conversion on going, ...)
  1202. * Each feature can be updated afterwards with a unitary function
  1203. * and potentially with ADC in a different state than disabled,
  1204. * refer to description of each function for setting
  1205. * conditioned to ADC state.
  1206. * @note After using this function, other features must be configured
  1207. * using LL unitary functions.
  1208. * The minimum configuration remaining to be done is:
  1209. * - Set ADC group injected sequencer:
  1210. * map channel on the selected sequencer rank.
  1211. * Refer to function @ref LL_ADC_INJ_SetSequencerRanks().
  1212. * - Set ADC channel sampling time
  1213. * Refer to function LL_ADC_SetChannelSamplingTime();
  1214. * @note Caution if feature ADC group injected contexts queue is enabled
  1215. * (refer to with function @ref LL_ADC_INJ_SetQueueMode() ):
  1216. * using successively several times this function will appear as
  1217. * having no effect.
  1218. * To set several features of ADC group injected, use
  1219. * function @ref LL_ADC_INJ_ConfigQueueContext().
  1220. * @param ADCx ADC instance
  1221. * @param pADC_InjInitStruct Pointer to a @ref LL_ADC_INJ_InitTypeDef structure
  1222. * @retval An ErrorStatus enumeration value:
  1223. * - SUCCESS: ADC registers are initialized
  1224. * - ERROR: ADC registers are not initialized
  1225. */
  1226. ErrorStatus LL_ADC_INJ_Init(ADC_TypeDef *ADCx, const LL_ADC_INJ_InitTypeDef *pADC_InjInitStruct)
  1227. {
  1228. ErrorStatus status = SUCCESS;
  1229. /* Check the parameters */
  1230. assert_param(IS_ADC_ALL_INSTANCE(ADCx));
  1231. assert_param(IS_LL_ADC_INJ_TRIG_SOURCE(ADCx, pADC_InjInitStruct->TriggerSource));
  1232. assert_param(IS_LL_ADC_INJ_SEQ_SCAN_LENGTH(pADC_InjInitStruct->SequencerLength));
  1233. if (pADC_InjInitStruct->SequencerLength != LL_ADC_INJ_SEQ_SCAN_DISABLE)
  1234. {
  1235. assert_param(IS_LL_ADC_INJ_SEQ_SCAN_DISCONT_MODE(pADC_InjInitStruct->SequencerDiscont));
  1236. }
  1237. assert_param(IS_LL_ADC_INJ_TRIG_AUTO(pADC_InjInitStruct->TrigAuto));
  1238. /* Note: Hardware constraint (refer to description of this function): */
  1239. /* ADC instance must be disabled. */
  1240. if (LL_ADC_IsEnabled(ADCx) == 0UL)
  1241. {
  1242. /* Configuration of ADC hierarchical scope: */
  1243. /* - ADC group injected */
  1244. /* - Set ADC group injected trigger source */
  1245. /* - Set ADC group injected sequencer length */
  1246. /* - Set ADC group injected sequencer discontinuous mode */
  1247. /* - Set ADC group injected conversion trigger: independent or */
  1248. /* from ADC group regular */
  1249. /* Note: On this STM32 series, ADC trigger edge is set to value 0x0 by */
  1250. /* setting of trigger source to SW start. */
  1251. if (pADC_InjInitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE)
  1252. {
  1253. MODIFY_REG(ADCx->CFGR,
  1254. ADC_CFGR_JDISCEN
  1255. | ADC_CFGR_JAUTO
  1256. ,
  1257. pADC_InjInitStruct->SequencerDiscont
  1258. | pADC_InjInitStruct->TrigAuto
  1259. );
  1260. }
  1261. else
  1262. {
  1263. MODIFY_REG(ADCx->CFGR,
  1264. ADC_CFGR_JDISCEN
  1265. | ADC_CFGR_JAUTO
  1266. ,
  1267. LL_ADC_REG_SEQ_DISCONT_DISABLE
  1268. | pADC_InjInitStruct->TrigAuto
  1269. );
  1270. }
  1271. MODIFY_REG(ADCx->JSQR,
  1272. ADC_JSQR_JEXTSEL
  1273. | ADC_JSQR_JEXTEN
  1274. | ADC_JSQR_JL
  1275. ,
  1276. pADC_InjInitStruct->TriggerSource
  1277. | pADC_InjInitStruct->SequencerLength
  1278. );
  1279. }
  1280. else
  1281. {
  1282. /* Initialization error: ADC instance is not disabled. */
  1283. status = ERROR;
  1284. }
  1285. return status;
  1286. }
  1287. /**
  1288. * @brief Set each @ref LL_ADC_INJ_InitTypeDef field to default value.
  1289. * @param pADC_InjInitStruct Pointer to a @ref LL_ADC_INJ_InitTypeDef structure
  1290. * whose fields will be set to default values.
  1291. * @retval None
  1292. */
  1293. void LL_ADC_INJ_StructInit(LL_ADC_INJ_InitTypeDef *pADC_InjInitStruct)
  1294. {
  1295. /* Set pADC_InjInitStruct fields to default values */
  1296. /* Set fields of ADC group injected */
  1297. pADC_InjInitStruct->TriggerSource = LL_ADC_INJ_TRIG_SOFTWARE;
  1298. pADC_InjInitStruct->SequencerLength = LL_ADC_INJ_SEQ_SCAN_DISABLE;
  1299. pADC_InjInitStruct->SequencerDiscont = LL_ADC_INJ_SEQ_DISCONT_DISABLE;
  1300. pADC_InjInitStruct->TrigAuto = LL_ADC_INJ_TRIG_INDEPENDENT;
  1301. }
  1302. /**
  1303. * @}
  1304. */
  1305. /**
  1306. * @}
  1307. */
  1308. /**
  1309. * @}
  1310. */
  1311. #endif /* ADC1 || ADC2 || ADC3 || ADC4 || ADC5 */
  1312. /**
  1313. * @}
  1314. */
  1315. #endif /* USE_FULL_LL_DRIVER */