From 976c3ea1a80a3dbb9be7d8aa188b45435ecf3d2f Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Wed, 14 Feb 2024 18:59:19 +0100 Subject: [PATCH] HALConfig: Use PLL3 for the ADC clock source. Signed-off-by: iabdalkader --- src/HALConfig.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/HALConfig.cpp b/src/HALConfig.cpp index 493f3f9..4aebf09 100644 --- a/src/HALConfig.cpp +++ b/src/HALConfig.cpp @@ -167,8 +167,21 @@ static uint32_t ADC_RANK_LUT[] = { }; int hal_adc_config(ADC_HandleTypeDef *adc, uint32_t resolution, uint32_t trigger, PinName *adc_pins, uint32_t n_channels) { - // Set ADC clock source. - __HAL_RCC_ADC_CONFIG(RCC_ADCCLKSOURCE_CLKP); + // PLL3 80MHz for ADC + RCC_PeriphCLKInitTypeDef pclkinit = {0}; + pclkinit.PLL3.PLL3M = 4; + pclkinit.PLL3.PLL3N = 80; + pclkinit.PLL3.PLL3P = 2; + pclkinit.PLL3.PLL3Q = 2; + pclkinit.PLL3.PLL3R = 4; + pclkinit.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_2; + pclkinit.PLL3.PLL3VCOSEL = RCC_PLL3VCOWIDE; + pclkinit.PLL3.PLL3FRACN = 0; + pclkinit.PeriphClockSelection = RCC_PERIPHCLK_ADC; + pclkinit.AdcClockSelection = RCC_ADCCLKSOURCE_PLL3; + if (HAL_RCCEx_PeriphCLKConfig(&pclkinit) != HAL_OK) { + return -1; + } // Enable ADC clock if (adc->Instance == ADC1) {