summaryrefslogtreecommitdiff
path: root/ports/stm32/adc.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/stm32/adc.c')
-rw-r--r--ports/stm32/adc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/ports/stm32/adc.c b/ports/stm32/adc.c
index 07368f473..c912d9df3 100644
--- a/ports/stm32/adc.c
+++ b/ports/stm32/adc.c
@@ -314,6 +314,11 @@ static void adcx_clock_enable(ADC_HandleTypeDef *adch) {
static void adcx_init_periph(ADC_HandleTypeDef *adch, uint32_t resolution) {
adcx_clock_enable(adch);
+ // Set ADC clock prescaler, if it's not done by HAL_ADC_Init() below.
+ #if defined(STM32N6)
+ LL_RCC_SetADCPrescaler(4 - 1); // 200MHz / 4 = 50MHz
+ #endif
+
adch->Init.Resolution = resolution;
adch->Init.ContinuousConvMode = DISABLE;
adch->Init.DiscontinuousConvMode = DISABLE;
@@ -387,7 +392,7 @@ static void adcx_init_periph(ADC_HandleTypeDef *adch, uint32_t resolution) {
#endif
#if defined(STM32G0)
HAL_ADCEx_Calibration_Start(adch);
- #elif defined(STM32G4) || defined(STM32H5) || defined(STM32L4) || defined(STM32WB)
+ #elif defined(STM32G4) || defined(STM32H5) || defined(STM32L4) || defined(STM32N6) || defined(STM32WB)
HAL_ADCEx_Calibration_Start(adch, ADC_SINGLE_ENDED);
#endif
}
@@ -461,7 +466,7 @@ static void adc_config_channel(ADC_HandleTypeDef *adc_handle, uint32_t channel)
if (__HAL_ADC_IS_CHANNEL_INTERNAL(channel)) {
sConfig.SamplingTime = ADC_SAMPLETIME_246CYCLES_5;
} else {
- sConfig.SamplingTime = ADC_SAMPLETIME_11CYCLES_5;
+ sConfig.SamplingTime = ADC_SAMPLETIME_46CYCLES_5;
}
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;