STM32F103的系统时钟源
和C51不同STM32F103的系统时钟源有好几个,根据官方手册,截取一个比较重要的部分如下:
从图中可以看出,系统时钟SYSCLK的来源包括HSI,PLLCLK,HSE,可以通过软件选择它们中的其中一个。
HSE 高速外部时钟信号
这个时钟信号直接来源于外部晶振(或者外部时钟),通过 OSC_IN 和 OSC_OUT 两个端子输入。晶振的大小介于4-16MHz。
HSI 内部RC振荡信号
由内部 8MHz RC振荡器生成。
PLL 锁相环
PLL 允许以 HSE 或者 HSI 作为原始信号,经过处理后得到系统时钟信号。由图可知,HSI 信号频率减半后,输入到 PLLSRC 。HSE则直接输入 PLLSRC 。可以通过软件选择用哪一个作为原始信号。PLLMUL 可以把输入信号的频率乘某个倍数,例如 8MHz 的 HSE 信号,输入到PLLMUL,用软件设置乘4倍后,就能得到 32MHz 的 PLLCLK 信号。
设置方法
主要利用 HAL_RCC_OscConfig 和 HAL_RCC_ClockConfig 函数进行设置。
这个函数原本是用STM32CubeMX生成的,在其基础上进行了修改。
1 | void SystemClock_Config(void) |
其它类型的时钟源也类似。
测试是否成功设置
调用 HAL_RCC_GetSysClockFreq 函数,在调试器中查看其返回值即可知道系统的时钟频率是否和预期的一致。