Skip to content

Commit

Permalink
analog.c: Fix pinToMux() for STM32F0xx (#19658)
Browse files Browse the repository at this point in the history
The `adc_read()` code for STM32F0xx expects to get the 0-based channel
number in `mux.input`, but the `pinToMux()` code for STM32F0xx was
attempting to pass the CHSELR bit mask in that field, which resulted in
selecting a wrong channel, therefore `analogReadPin()` did not work
properly for the STM32F0xx chips.  Fix `pinToMux()` to put the channel
number in that field (this matches the behavior for other supported
chips and also allows selection of channels 16...18, which can be used
to access the builtin temperature, reference voltage and VBAT sensors).
  • Loading branch information
sigprof authored Jan 25, 2023
1 parent 0edf478 commit 81ca832
Showing 1 changed file with 16 additions and 16 deletions.
32 changes: 16 additions & 16 deletions platforms/chibios/drivers/analog.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,22 +138,22 @@ static ADCConversionGroup adcConversionGroup = {
__attribute__((weak)) adc_mux pinToMux(pin_t pin) {
switch (pin) {
#if defined(STM32F0XX)
case A0: return TO_MUX( ADC_CHSELR_CHSEL0, 0 );
case A1: return TO_MUX( ADC_CHSELR_CHSEL1, 0 );
case A2: return TO_MUX( ADC_CHSELR_CHSEL2, 0 );
case A3: return TO_MUX( ADC_CHSELR_CHSEL3, 0 );
case A4: return TO_MUX( ADC_CHSELR_CHSEL4, 0 );
case A5: return TO_MUX( ADC_CHSELR_CHSEL5, 0 );
case A6: return TO_MUX( ADC_CHSELR_CHSEL6, 0 );
case A7: return TO_MUX( ADC_CHSELR_CHSEL7, 0 );
case B0: return TO_MUX( ADC_CHSELR_CHSEL8, 0 );
case B1: return TO_MUX( ADC_CHSELR_CHSEL9, 0 );
case C0: return TO_MUX( ADC_CHSELR_CHSEL10, 0 );
case C1: return TO_MUX( ADC_CHSELR_CHSEL11, 0 );
case C2: return TO_MUX( ADC_CHSELR_CHSEL12, 0 );
case C3: return TO_MUX( ADC_CHSELR_CHSEL13, 0 );
case C4: return TO_MUX( ADC_CHSELR_CHSEL14, 0 );
case C5: return TO_MUX( ADC_CHSELR_CHSEL15, 0 );
case A0: return TO_MUX( 0, 0 );
case A1: return TO_MUX( 1, 0 );
case A2: return TO_MUX( 2, 0 );
case A3: return TO_MUX( 3, 0 );
case A4: return TO_MUX( 4, 0 );
case A5: return TO_MUX( 5, 0 );
case A6: return TO_MUX( 6, 0 );
case A7: return TO_MUX( 7, 0 );
case B0: return TO_MUX( 8, 0 );
case B1: return TO_MUX( 9, 0 );
case C0: return TO_MUX( 10, 0 );
case C1: return TO_MUX( 11, 0 );
case C2: return TO_MUX( 12, 0 );
case C3: return TO_MUX( 13, 0 );
case C4: return TO_MUX( 14, 0 );
case C5: return TO_MUX( 15, 0 );
#elif defined(STM32F3XX)
case A0: return TO_MUX( ADC_CHANNEL_IN1, 0 );
case A1: return TO_MUX( ADC_CHANNEL_IN2, 0 );
Expand Down

0 comments on commit 81ca832

Please sign in to comment.