aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/stm32/Kconfig9
-rw-r--r--src/stm32/stm32f0.c3
2 files changed, 11 insertions, 1 deletions
diff --git a/src/stm32/Kconfig b/src/stm32/Kconfig
index 4b2cd7db..98e5aed8 100644
--- a/src/stm32/Kconfig
+++ b/src/stm32/Kconfig
@@ -187,6 +187,15 @@ choice
bool "Pins PB12(rx) and PB13(tx)" if MACH_STM32F4
endchoice
+config STM32F0_TRIM
+ int "Internal clock trim override" if LOW_LEVEL_OPTIONS && MACH_STM32F0 && STM32_CLOCK_REF_INTERNAL && !USBSERIAL
+ default 16
+ help
+ Specify the internal clock trim value. Setting this can be
+ useful if the factory default internal clock is not accurate.
+ Default is 16 (use factory default). Each increment increases
+ the clock rate by ~240KHz.
+
config STM32F042_PIN_SWAP
bool "Use PA9/PA10 for USB or CAN" if MACH_STM32F042
depends on (USBSERIAL || CANSERIAL) && MACH_STM32F042
diff --git a/src/stm32/stm32f0.c b/src/stm32/stm32f0.c
index 3b4d35d4..0232b602 100644
--- a/src/stm32/stm32f0.c
+++ b/src/stm32/stm32f0.c
@@ -127,7 +127,8 @@ pll_setup(void)
if (!CONFIG_STM32_CLOCK_REF_INTERNAL) {
// Configure 48Mhz PLL from external crystal (HSE)
uint32_t div = CONFIG_CLOCK_FREQ / CONFIG_CLOCK_REF_FREQ;
- RCC->CR |= RCC_CR_HSEON;
+ RCC->CR = ((RCC->CR & ~RCC_CR_HSITRIM) | RCC_CR_HSEON
+ | (CONFIG_STM32F0_TRIM << RCC_CR_HSITRIM_Pos));
cfgr = RCC_CFGR_PLLSRC_HSE_PREDIV | ((div - 2) << RCC_CFGR_PLLMUL_Pos);
} else {
// Configure 48Mhz PLL from internal 8Mhz oscillator (HSI)