1 RCC主要作用——时钟部分
设置系统时钟SYSCLK、设置AHB分频因子(决定HCLK等于多少)、设置APB2分频因子(决定PCLK2等于多少)、设置APB1因子(决定PCLK1等于多少)、设置各个外设的分频因子;控制AHB、APB2和APB1这三条总线时钟的开启、控制每个外设的时钟开启。对于SYSCLK、HCLK、PCLK2、PCLK1这4个时钟的配置一般是:PCLK2=HCLK=SYSCLK=PLLCLK=72MHz,PCLK1=HCLK/2=36MHz。这个时钟配置也是库函数的标准配置,我们用的最多的就是这个。
2 RCC框图剖析——时钟部分
对于时钟树,单纯讲理论的话会比较枯燥,如果选取一条主线,并辅以代码,先后主次讲解的话会很容易,而且记忆还更深刻。这里选取库函数时钟系统时钟库函数:SetSysClockTo72(),以这个函数的编写流程来讲解时钟树,这个函数也是我们用库的时候默认的系统时钟设置函数。该函数的功能是利用HSE把时钟设置为:PCLK2=HCLK=SYSCLK=PLLCLK=72MHz。下面就以这个代码的流程为主线来分析时钟树。如图所示:
代码流程在时钟树种以数字的大小顺序①-⑦标识。
2.1 系统时钟
2.1.1 HSE高速外部时钟信号
HSE是高速的外部时钟信号,可以由有源晶振或者无源晶振提供,频率为4~16MHz。当使用有源晶振时,时钟从OSC_IN引脚进入,OSC_OUT引脚悬空;当使用无源晶振时,时钟从OSC_IN和OSC_OUT进入,并且要配谐振电容。
HSE最常使用的就是8MHz的无源晶振。当确定PLL时钟来源的时候,HSE可以不分频或者2分频,这个由时钟配置寄存器CGFGR的位17,即PLLXTPRE设置。这里设置位HSE不分频。
2.1.2 PLL时钟源
PLL时钟来源可以有两个:一个是HSE,另外一个是HSI/2/具体用哪个由时钟配置寄存器CFGR的位16,即PLLSRVC设置。HSI是内部高速的时钟信号频率为8MHz,根据温度和环境的情况频率会漂移,一般不作为PLL的时钟来源。这里我们选HSE作为PLL的时钟来源。
2.1.3PLL时钟PLLCLK
通过设置PLL的倍频因子,可以对PLL的时钟来源进行倍频,倍频因子可以是2~16,具体设置成多少,由时钟配置寄存器CFGR的位21~18,即PLLMUL[3:0]设置。这里设置位9倍频,因为上一步设置PLL的时钟来源位HSE=8MHz,所以经过PLL倍频之后的PLL时钟为:PLLCLK=8M×9=72MHz
72MHz是ST官方推荐的稳定运行时钟,如果想超频的话,增大倍频因子即可,最高为128MHz。