diff options
author | Yuuki NAGAO <wf.yn386@gmail.com> | 2025-09-21 10:07:53 +0900 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2025-09-23 14:48:50 +1000 |
commit | ddf1a383ca110fa6787ea71ff92e3e110378bf2e (patch) | |
tree | c820cee317f7cd1434c63c00d1c730c5bd8f0fc5 | |
parent | 7ba82219f3d40689479704edfcc97fcf5b914b2c (diff) |
stm32/machine_adc: Fix machine.ADC so it works on STM32G0.
Fixes are:
- Enable VREG before initializing ADC.
- The channel value of internal sensor should convert with
__LL_ADC_CHANNEL_TO_DECIMAL_NB().
Signed-off-by: Yuuki NAGAO <wf.yn386@gmail.com>
-rw-r--r-- | ports/stm32/machine_adc.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/ports/stm32/machine_adc.c b/ports/stm32/machine_adc.c index 63cd4e089..20f392516 100644 --- a/ports/stm32/machine_adc.c +++ b/ports/stm32/machine_adc.c @@ -244,12 +244,12 @@ void adc_config(ADC_TypeDef *adc, uint32_t bits) { } #endif - #if defined(STM32G4) || defined(STM32H5) || defined(STM32H7) || defined(STM32L0) || defined(STM32L4) || defined(STM32WB) || defined(STM32WL) + #if defined(STM32G0) || defined(STM32G4) || defined(STM32H5) || defined(STM32H7) || defined(STM32L0) || defined(STM32L4) || defined(STM32WB) || defined(STM32WL) if (!(adc->CR & ADC_CR_ADVREGEN)) { adc->CR = ADC_CR_ADVREGEN; // enable VREG #if defined(STM32H7) mp_hal_delay_us(10); // T_ADCVREG_STUP - #elif defined(STM32G4) || defined(STM32L4) || defined(STM32WB) + #elif defined(STM32G0) || defined(STM32G4) || defined(STM32L4) || defined(STM32WB) mp_hal_delay_us(20); // T_ADCVREG_STUP #endif } @@ -379,6 +379,12 @@ static void adc_config_channel(ADC_TypeDef *adc, uint32_t channel, uint32_t samp #else adc->SMPR = sample_time << ADC_SMPR_SMP_Pos; // select sample time #endif + + #if defined(STM32G0) + if (__LL_ADC_IS_CHANNEL_INTERNAL(channel)) { + channel = __LL_ADC_CHANNEL_TO_DECIMAL_NB(channel); + } + #endif adc->CHSELR = 1 << channel; // select channel for conversion #elif defined(STM32F4) || defined(STM32F7) |