本文基于STM32F105系列,STM32F1系列的单片机应该都使用,其他单片机没有实际调试过。
时钟树
一、设置外部晶振频率(HSE)
根据硬件实际所外接的晶振频率,在软件内外部晶振频率。
文件:stm32f10x.h,找到如下代码:
STM32F10X_CL是互联型STM32单片机(STM32F105\STM32F107)。若是互联型STM32单片机,则修改117行对应的频率,默认是25MHz,此处由于我用的外部晶振是8MHz,因此改为8MHz。其它型号的单片机,则修改下面119行的频率。
二、设置系统时钟频率(SYSCLK)
文件:system_stm32f10x.c
以_VL结尾的是超值型STM32单片机(STM32F100),此处我们是STM32F105芯片,因此使用else内的代码。系统时钟频率可根据需要配置,这里我们使用默认的72MHz。
三、设置HCLK\PCLK1\PCLK2
HCLK\PCLK1\PCLK2的频率,通过配置AHB预分频器、APB1预分频器和APB2预分频器的分频系数来实现。
文件:system_stm32f10x.c
找到与系统时钟频率对应的主频配置函数SetSysClockTo72(),这里以72MHz为例。此函数内有如下代码:
四、设置PREDIV1CLK
此部分设置PREDIV2、PLL2MUL、PREDIV1SCR、PREDIV1四个功能块,1035和1036行先对寄存器相应位进行清零,1037和1038行按需求进行配置。
五、设置PLLCLK
此部分设置PLLSCR、PLLMUL功能块,同样是先清零再配置。
六、选择系统时钟的时钟源
此部分设置SW,先清零再设置。