STM32定时器时钟配置问题说明SystemCoreClock

在研究STM32L476的通用定时器时,遇到了一个关于SystemCoreClock值=4000000U的问题,琢磨了好久,终于弄明白了,这里记录一下。

1、定时器初始化函数中

STM32定时器时钟配置问题说明SystemCoreClock_第1张图片

2、其中的SystemCoreClock是在system_stm32l4xx.c文件中定义的一个变量

STM32定时器时钟配置问题说明SystemCoreClock_第2张图片

3、其实这个值在此处只是一个变量定义时的初始值,系统在时钟初始化时会使用上面的方法3进行更新的。在SystemClock_Config中会调用HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3)函数更新系统时钟。

STM32定时器时钟配置问题说明SystemCoreClock_第3张图片

4、在HAL_RCC_ClockConfig

STM32定时器时钟配置问题说明SystemCoreClock_第4张图片

5、在HAL_RCC_ClockConfig函数中同样会初始化系统Tick时钟

STM32定时器时钟配置问题说明SystemCoreClock_第5张图片

6、初始化SYSTICK为SystemCoreClock/1000,然后在HAL_RCC_ClockConfig还会再次初始化SYSTICK时钟,当然有的也在HAL_InitTick函数中直接进行初始化

STM32定时器时钟配置问题说明SystemCoreClock_第6张图片

7、在其中的HAL_RCC_GetHCLKFreq()函数中获取系统的时钟参数

系统时钟SystemCoreClock在前面已经更新。整个过程及更新了SystemCoreClock,又更新了SYSTICK,保证了即使修改主时钟频率时,SYSTICK的1ms也是不变的。

 

 

 

你可能感兴趣的:(STM32)