STM32F4xx_HAL_Driver  1.8.3
stm32f4xx_hal_adc_ex.h
Go to the documentation of this file.
1 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef __STM32F4xx_ADC_EX_H
21 #define __STM32F4xx_ADC_EX_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f4xx_hal_def.h"
29 
38 /* Exported types ------------------------------------------------------------*/
55 typedef struct
56 {
57  uint32_t InjectedChannel;
60  uint32_t InjectedRank;
72  uint32_t InjectedOffset;
88  FunctionalState AutoInjectedConv;
110 
114 typedef struct
115 {
116  uint32_t Mode;
118  uint32_t DMAAccessMode;
120  uint32_t TwoSamplingDelay;
123 
128 /* Exported constants --------------------------------------------------------*/
136 #define ADC_MODE_INDEPENDENT 0x00000000U
137 #define ADC_DUALMODE_REGSIMULT_INJECSIMULT ((uint32_t)ADC_CCR_MULTI_0)
138 #define ADC_DUALMODE_REGSIMULT_ALTERTRIG ((uint32_t)ADC_CCR_MULTI_1)
139 #define ADC_DUALMODE_INJECSIMULT ((uint32_t)(ADC_CCR_MULTI_2 | ADC_CCR_MULTI_0))
140 #define ADC_DUALMODE_REGSIMULT ((uint32_t)(ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1))
141 #define ADC_DUALMODE_INTERL ((uint32_t)(ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1 | ADC_CCR_MULTI_0))
142 #define ADC_DUALMODE_ALTERTRIG ((uint32_t)(ADC_CCR_MULTI_3 | ADC_CCR_MULTI_0))
143 #define ADC_TRIPLEMODE_REGSIMULT_INJECSIMULT ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_0))
144 #define ADC_TRIPLEMODE_REGSIMULT_AlterTrig ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_1))
145 #define ADC_TRIPLEMODE_INJECSIMULT ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_2 | ADC_CCR_MULTI_0))
146 #define ADC_TRIPLEMODE_REGSIMULT ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1))
147 #define ADC_TRIPLEMODE_INTERL ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1 | ADC_CCR_MULTI_0))
148 #define ADC_TRIPLEMODE_ALTERTRIG ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_3 | ADC_CCR_MULTI_0))
156 #define ADC_DMAACCESSMODE_DISABLED 0x00000000U
157 #define ADC_DMAACCESSMODE_1 ((uint32_t)ADC_CCR_DMA_0)
158 #define ADC_DMAACCESSMODE_2 ((uint32_t)ADC_CCR_DMA_1)
159 #define ADC_DMAACCESSMODE_3 ((uint32_t)ADC_CCR_DMA)
167 #define ADC_EXTERNALTRIGINJECCONVEDGE_NONE 0x00000000U
168 #define ADC_EXTERNALTRIGINJECCONVEDGE_RISING ((uint32_t)ADC_CR2_JEXTEN_0)
169 #define ADC_EXTERNALTRIGINJECCONVEDGE_FALLING ((uint32_t)ADC_CR2_JEXTEN_1)
170 #define ADC_EXTERNALTRIGINJECCONVEDGE_RISINGFALLING ((uint32_t)ADC_CR2_JEXTEN)
178 #define ADC_EXTERNALTRIGINJECCONV_T1_CC4 0x00000000U
179 #define ADC_EXTERNALTRIGINJECCONV_T1_TRGO ((uint32_t)ADC_CR2_JEXTSEL_0)
180 #define ADC_EXTERNALTRIGINJECCONV_T2_CC1 ((uint32_t)ADC_CR2_JEXTSEL_1)
181 #define ADC_EXTERNALTRIGINJECCONV_T2_TRGO ((uint32_t)(ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))
182 #define ADC_EXTERNALTRIGINJECCONV_T3_CC2 ((uint32_t)ADC_CR2_JEXTSEL_2)
183 #define ADC_EXTERNALTRIGINJECCONV_T3_CC4 ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_0))
184 #define ADC_EXTERNALTRIGINJECCONV_T4_CC1 ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1))
185 #define ADC_EXTERNALTRIGINJECCONV_T4_CC2 ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))
186 #define ADC_EXTERNALTRIGINJECCONV_T4_CC3 ((uint32_t)ADC_CR2_JEXTSEL_3)
187 #define ADC_EXTERNALTRIGINJECCONV_T4_TRGO ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_0))
188 #define ADC_EXTERNALTRIGINJECCONV_T5_CC4 ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_1))
189 #define ADC_EXTERNALTRIGINJECCONV_T5_TRGO ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))
190 #define ADC_EXTERNALTRIGINJECCONV_T8_CC2 ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_2))
191 #define ADC_EXTERNALTRIGINJECCONV_T8_CC3 ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_0))
192 #define ADC_EXTERNALTRIGINJECCONV_T8_CC4 ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1))
193 #define ADC_EXTERNALTRIGINJECCONV_EXT_IT15 ((uint32_t)ADC_CR2_JEXTSEL)
194 #define ADC_INJECTED_SOFTWARE_START ((uint32_t)ADC_CR2_JEXTSEL + 1U)
202 #define ADC_INJECTED_RANK_1 0x00000001U
203 #define ADC_INJECTED_RANK_2 0x00000002U
204 #define ADC_INJECTED_RANK_3 0x00000003U
205 #define ADC_INJECTED_RANK_4 0x00000004U
213 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \
214  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || \
215  defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || \
216  defined(STM32F412Cx)
217 #define ADC_CHANNEL_TEMPSENSOR ((uint32_t)ADC_CHANNEL_16)
218 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F412Zx ||
219  STM32F412Vx || STM32F412Rx || STM32F412Cx */
220 
221 #if defined(STM32F411xE) || defined(STM32F413xx) || defined(STM32F423xx) || defined(STM32F427xx) || defined(STM32F437xx) ||\
222  defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
223 #define ADC_CHANNEL_DIFFERENCIATION_TEMPSENSOR_VBAT 0x10000000U /* Dummy bit for driver internal usage, not used in ADC channel setting registers CR1 or SQRx */
224 #define ADC_CHANNEL_TEMPSENSOR ((uint32_t)ADC_CHANNEL_18 | ADC_CHANNEL_DIFFERENCIATION_TEMPSENSOR_VBAT)
225 #endif /* STM32F411xE || STM32F413xx || STM32F423xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
235 /* Exported macro ------------------------------------------------------------*/
239 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx)
251 #define __HAL_ADC_PATH_INTERNAL_VBAT_DISABLE() (ADC->CCR &= ~(ADC_CCR_VBATE))
252 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */
257 /* Exported functions --------------------------------------------------------*/
266 /* I/O operation functions ******************************************************/
267 HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef *hadc);
268 HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef *hadc);
269 HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout);
270 HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef *hadc);
271 HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef *hadc);
272 uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef *hadc, uint32_t InjectedRank);
273 HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length);
274 HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc);
277 
278 /* Peripheral Control functions *************************************************/
279 HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef *hadc, ADC_InjectionConfTypeDef *sConfigInjected);
280 HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode);
281 
289 /* Private types -------------------------------------------------------------*/
290 /* Private variables ---------------------------------------------------------*/
291 /* Private constants ---------------------------------------------------------*/
300 /* Private macros ------------------------------------------------------------*/
304 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \
305  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || \
306  defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || \
307  defined(STM32F412Cx)
308 #define IS_ADC_CHANNEL(CHANNEL) ((CHANNEL) <= ADC_CHANNEL_18)
309 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE ||
310  STM32F410xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
311 
312 #if defined(STM32F411xE) || defined(STM32F413xx) || defined(STM32F423xx) || defined(STM32F427xx) || \
313  defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || \
314  defined(STM32F469xx) || defined(STM32F479xx)
315 #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) <= ADC_CHANNEL_18) || \
316  ((CHANNEL) == ADC_CHANNEL_TEMPSENSOR))
317 #endif /* STM32F411xE || STM32F413xx || STM32F423xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
318 
319 #define IS_ADC_MODE(MODE) (((MODE) == ADC_MODE_INDEPENDENT) || \
320  ((MODE) == ADC_DUALMODE_REGSIMULT_INJECSIMULT) || \
321  ((MODE) == ADC_DUALMODE_REGSIMULT_ALTERTRIG) || \
322  ((MODE) == ADC_DUALMODE_INJECSIMULT) || \
323  ((MODE) == ADC_DUALMODE_REGSIMULT) || \
324  ((MODE) == ADC_DUALMODE_INTERL) || \
325  ((MODE) == ADC_DUALMODE_ALTERTRIG) || \
326  ((MODE) == ADC_TRIPLEMODE_REGSIMULT_INJECSIMULT) || \
327  ((MODE) == ADC_TRIPLEMODE_REGSIMULT_AlterTrig) || \
328  ((MODE) == ADC_TRIPLEMODE_INJECSIMULT) || \
329  ((MODE) == ADC_TRIPLEMODE_REGSIMULT) || \
330  ((MODE) == ADC_TRIPLEMODE_INTERL) || \
331  ((MODE) == ADC_TRIPLEMODE_ALTERTRIG))
332 #define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAACCESSMODE_DISABLED) || \
333  ((MODE) == ADC_DMAACCESSMODE_1) || \
334  ((MODE) == ADC_DMAACCESSMODE_2) || \
335  ((MODE) == ADC_DMAACCESSMODE_3))
336 #define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_NONE) || \
337  ((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_RISING) || \
338  ((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_FALLING) || \
339  ((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_RISINGFALLING))
340 #define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || \
341  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || \
342  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || \
343  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || \
344  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC2) || \
345  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4) || \
346  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC1) || \
347  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC2) || \
348  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC3) || \
349  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || \
350  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || \
351  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_TRGO) || \
352  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC2) || \
353  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC3) || \
354  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || \
355  ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15)|| \
356  ((INJTRIG) == ADC_INJECTED_SOFTWARE_START))
357 #define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 4U))
358 #define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= 1U) && ((RANK) <= 4U))
359 
367 #define ADC_JSQR(_CHANNELNB_, _RANKNB_, _JSQR_JL_) (((uint32_t)((uint16_t)(_CHANNELNB_))) << (5U * (uint8_t)(((_RANKNB_) + 3U) - (_JSQR_JL_))))
368 
375 #if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F429xx) || defined(STM32F437xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
376 #define ADC_COMMON_REGISTER(__HANDLE__) ADC123_COMMON
377 #else
378 #define ADC_COMMON_REGISTER(__HANDLE__) ADC1_COMMON
379 #endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx || STM32F427xx || STM32F429xx || STM32F437xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
384 /* Private functions ---------------------------------------------------------*/
401 #ifdef __cplusplus
402 }
403 #endif
404 
405 #endif /*__STM32F4xx_ADC_EX_H */
406 
407 
HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef *hadc, ADC_InjectionConfTypeDef *sConfigInjected)
Configures for the selected ADC injected channel its corresponding rank in the sequencer and its samp...
uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc)
Returns the last ADC1, ADC2 and ADC3 regular conversions results data in the selected multi mode.
HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout)
Poll for injected conversion complete.
HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc)
Disables ADC DMA (multi-ADC mode) and disables ADC peripheral.
uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef *hadc, uint32_t InjectedRank)
Gets the converted value from data register of injected channel.
HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef *hadc)
Stop conversion of injected channels. Disable ADC peripheral if no regular conversion is on going.
HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef *hadc)
Enables the selected ADC software start conversion of the injected channels.
HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length)
Enables ADC DMA request after last transfer (Multi-ADC mode) and enables ADC peripheral.
HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode)
Configures the ADC multi-mode.
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc)
Injected conversion complete callback in non blocking mode.
HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef *hadc)
Stop conversion of injected channels, disable interruption of end-of-conversion. Disable ADC peripher...
HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef *hadc)
Enables the interrupt and starts ADC conversion of injected channels.
FunctionalState InjectedDiscontinuousConvMode
ADC Configuration injected Channel structure definition.
ADC Configuration multi-mode structure definition.
struct __ADC_HandleTypeDef else typedef struct endif ADC_HandleTypeDef
ADC handle Structure definition.
This file contains HAL common defines, enumeration, macros and structures definitions.