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