33
33
#define ADC_V2 (0)
34
34
#endif
35
35
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
+
36
42
#if defined(STM32F0 ) || defined(STM32L0 )
37
43
#define ADC_STAB_DELAY_US (1)
38
44
#define ADC_TEMPSENSOR_DELAY_US (10)
@@ -122,7 +128,7 @@ STATIC void adc_config(ADC_TypeDef *adc, uint32_t bits) {
122
128
#if defined(STM32F0 )
123
129
adc -> CFGR2 = 1 << ADC_CFGR2_CKMODE_Pos ; // PCLK/2 (synchronous clock mode)
124
130
#elif defined(STM32F4 ) || defined(STM32F7 ) || defined(STM32L4 )
125
- ADC123_COMMON -> CCR = 0 ; // ADCPR=PCLK/2
131
+ ADCx_COMMON -> CCR = 0 ; // ADCPR=PCLK/2
126
132
#elif defined(STM32H7 )
127
133
ADC12_COMMON -> CCR = 3 << ADC_CCR_CKMODE_Pos ;
128
134
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
255
261
#elif defined(STM32F4 ) || defined(STM32F7 )
256
262
257
263
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 ;
259
265
if (channel == ADC_CHANNEL_TEMPSENSOR ) {
260
266
adc_stabilisation_delay_us (ADC_TEMPSENSOR_DELAY_US );
261
267
}
262
268
} else if (channel == ADC_CHANNEL_VBAT ) {
263
- ADC123_COMMON -> CCR |= ADC_CCR_VBATE ;
269
+ ADCx_COMMON -> CCR |= ADC_CCR_VBATE ;
264
270
}
265
271
266
272
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
280
286
adc -> PCSEL |= 1 << channel ;
281
287
ADC_Common_TypeDef * adc_common = adc == ADC3 ? ADC3_COMMON : ADC12_COMMON ;
282
288
#elif defined(STM32L4 )
283
- ADC_Common_TypeDef * adc_common = ADC123_COMMON ;
289
+ ADC_Common_TypeDef * adc_common = ADCx_COMMON ;
284
290
#elif defined(STM32WB )
285
291
ADC_Common_TypeDef * adc_common = ADC1_COMMON ;
286
292
#endif
@@ -348,16 +354,17 @@ typedef struct _machine_adc_obj_t {
348
354
349
355
STATIC void machine_adc_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
350
356
machine_adc_obj_t * self = MP_OBJ_TO_PTR (self_in );
351
- #if defined(STM32F0 ) || defined(STM32L0 ) || defined(STM32WB )
352
357
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 )
356
364
if (self -> adc == ADC3 ) {
357
365
adc_id = 3 ;
358
366
}
359
367
#endif
360
- #endif
361
368
mp_printf (print , "<ADC%u channel=%u>" , adc_id , self -> channel );
362
369
}
363
370
0 commit comments