8000 stm32/machine_adc: Fix build for F4 and L4 MCUs that only have ADC1. · micropython/micropython@22099ab · GitHub
[go: up one dir, main page]

Skip to content

Commit 22099ab

Browse files
committed
stm32/machine_adc: Fix build for F4 and L4 MCUs that only have ADC1.
1 parent 356a728 commit 22099ab

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

ports/stm32/machine_adc.c

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
#define ADC_V2 (0)
3434
#endif
3535

36+
#if defined(STM32F4) || defined(STM32L4)
37+
#define ADCx_COMMON ADC_COMMON_REGISTER(0)
38+
#elif defined(STM32F7)
39+
#define ADCx_COMMON ADC123_COMMON
40+
#endif
41+
3642
#if defined(STM32F0) || defined(STM32L0)
3743
#define ADC_STAB_DELAY_US (1)
3844
#define ADC_TEMPSENSOR_DELAY_US (10)
@@ -122,7 +128,7 @@ STATIC void adc_config(ADC_TypeDef *adc, uint32_t bits) {
122128
#if defined(STM32F0)
123129
adc->CFGR2 = 1 << ADC_CFGR2_CKMODE_Pos; // PCLK/2 (synchronous clock mode)
124130
#elif defined(STM32F4) || defined(STM32F7) || defined(STM32L4)
125-
ADC123_COMMON->CCR = 0; // ADCPR=PCLK/2
131+
ADCx_COMMON->CCR = 0; // ADCPR=PCLK/2
126132
#elif defined(STM32H7)
127133
ADC12_COMMON->CCR = 3 << ADC_CCR_CKMODE_Pos;
128134
ADC3_COMMON->CCR = 3 << ADC_CCR_CKMODE_Pos;
@@ -255,12 +261,12 @@ STATIC void adc_config_channel(ADC_TypeDef *adc, uint32_t channel, uint32_t samp
255261
#elif defined(STM32F4) || defined(STM32F7)
256262

257263
if (channel == ADC_CHANNEL_VREFINT || channel == ADC_CHANNEL_TEMPSENSOR) {
258-
ADC123_COMMON->CCR = (ADC123_COMMON->CCR & ~ADC_CCR_VBATE) | ADC_CCR_TSVREFE;
264+
ADCx_COMMON->CCR = (ADCx_COMMON->CCR & ~ADC_CCR_VBATE) | 10000 ADC_CCR_TSVREFE;
259265
if (channel == ADC_CHANNEL_TEMPSENSOR) {
260266
adc_stabilisation_delay_us(ADC_TEMPSENSOR_DELAY_US);
261267
}
262268
} else if (channel == ADC_CHANNEL_VBAT) {
263-
ADC123_COMMON->CCR |= ADC_CCR_VBATE;
269+
ADCx_COMMON->CCR |= ADC_CCR_VBATE;
264270
}
265271

266272
adc->SQR3 = (channel & 0x1f) << ADC_SQR3_SQ1_Pos; // select channel for first conversion
@@ -280,7 +286,7 @@ STATIC void adc_config_channel(ADC_TypeDef *adc, uint32_t channel, uint32_t samp
280286
adc->PCSEL |= 1 << channel;
281287
ADC_Common_TypeDef *adc_common = adc == ADC3 ? ADC3_COMMON : ADC12_COMMON;
282288
#elif defined(STM32L4)
283-
ADC_Common_TypeDef *adc_common = ADC123_COMMON;
289+
ADC_Common_TypeDef *adc_common = ADCx_COMMON;
284290
#elif defined(STM32WB)
285291
ADC_Common_TypeDef *adc_common = ADC1_COMMON;
286292
#endif
@@ -348,16 +354,17 @@ typedef struct _machine_adc_obj_t {
348354

349355
STATIC void machine_adc_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
350356
machine_adc_obj_t *self = MP_OBJ_TO_PTR(self_in);
351-
#if defined(STM32F0) || defined(STM32L0) || defined(STM32WB)
352357
unsigned adc_id = 1;
353-
#else
354-
unsigned adc_id = (self->adc - ADC1) / (ADC2 - ADC1) + 1;
355-
#if defined(STM32H7)
358+
#if defined(ADC2)
359+
if (self->adc == ADC2) {
360+
adc_id = 2;
361+
}
362+
#endif
363+
#if defined(ADC3)
356364
if (self->adc == ADC3) {
357365
adc_id = 3;
358366
}
359367
#endif
360-
#endif
361368
mp_printf(print, "<ADC%u channel=%u>", adc_id, self->channel);
362369
}
363370

0 commit comments

Comments
 (0)
0