STM32开发总结-RCC相关
RCC是reset clock control的简写,复位和时钟控制器。
RCC 主要作用 设置时钟,设置系统时钟sysclk,HCLK(AHB分频因子),PCLK2(APB2分频因子),PCLK1(APB1分频因子)。
对于SYSCLK、HCLK、PCLK2、PCLK1 这四个时钟的配置一般是:HCLK =SYSCLK=PLLCLK = 180M,PCLK2=HCLK/2 = 90M,PCLK1=HCLK/4 = 45M。

(1)部分:HSE 高速外部时钟信号,可以由有源晶振或者无源晶振提供,频率从4-26MHZ不等。当使用有源晶振时,时钟从OSC_IN 引脚进入,OSC_OUT 引脚悬空,当选用无源
晶振时,时钟从OSC_IN 和OSC_OUT 进入,并且要配谐振电容。STM32F429开发板上的HSE 我们使用25M的无源晶振。如果我们使用HSE 或者HSE 经过PLL 倍频之后的时钟作为系统时钟SYSCLK,
当HSE 故障时候,不仅HSE 会被关闭,PLL 也会被关闭,此时高速的内部时钟时钟信号HSI 会作为备用的系统时钟,直到HSE 恢复正常,HSI=16M。
(2)锁相环PLL PLL 的主要作用是对时钟进行倍频,然后把时钟输出到各个功能部件。许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步。一般的晶振由于工艺与成本原因,做不到很高的频率,而在需要高频应用时,由相应的器件VCO,实现转成高频,但并不稳定,故利用锁相环路(PLL)就可以实现稳定且高频的时脉冲讯号。主PLL 有两路的时钟输出,第一个输出时钟PLLCLK 用于系统时钟,F429 里面最高是180M,第二个输出用于USB OTG FS 的时钟(48M)、RNG 和SDIO 时钟(<=48M)。专用的PLLI2S 用于生成精确时钟,给I2S 提供时钟。压控荡器(VCO)
HSE 或者HSI 经过PLL 时钟输入分频因子M(2~63)分频后,成为VCO 的时钟输入,VCO 的时钟必须在1~2M 之间,我们选择HSE=25M 作为PLL 的时钟输入,M设置为25,那么VCO 输入时钟就等于1M。分频因子M在哪里?有什么作用?
VCO 输入时钟经过VCO 倍频因子N 倍频之后,成为VCO 时钟输出,VCO 时钟必须在192~432M 之间。我们配置N 为360,则VCO 的输出时钟等于360M。如果要把系统时钟超频,就得在VCO 倍频系数N 这里做手脚。PLLCLK_OUTMAX =
VCOCLK_OUTMAX/P_MIN = 432/2=216M,即F429 最高可超频到216M。分频因子N在哪里?有什么作用?
VCO 输出时钟之后有三个分频因子:PLLCLK 分频因子p,USB OTG FS/RNG/SDIO时钟分频因子Q,分频因子R(F446 才有,F429 没有)。p 可以取值2、4、6、8,STM32F429开发板分频因子P配置为2,则得到PLLCLK=180M。Q 可以取值4~15,但是USB OTG FS 必须使用48M,Q=VCO 输出时钟360/48=7.5,出现了小数这明显是错误,权衡之策是是重新配置VCO 的倍频因子N=336,VCOCLK=1M*336=336M,PLLCLK=VCOCLK/2=168M,USBCLK=336/7=48M,细心的读者应该发现了,在使用USB 的时候,PLLCLK 被降低到
了168M,不能使用180M,这实乃ST 的一个奇葩设计。有关PLL 的配置有一个专门的RCC PLL 配置寄存器RCC_PLLCFGR,具体描述看手册即可。
VCOCLK_IN = PLLCLK_IN / M = HSE / 25 = 1M
VCOCLK_OUT = VCOCLK_IN * N = 1M * 360 = 360M
PLLCLK_OUT=VCOCLK_OUT/P=360/2=180M
USBCLK = VCOCLK_OUT/Q=360/7=51.7。
(3)系统时钟SYSCLK 系统时钟来源可以是:HSI、PLLCLK、HSE,具体的由时钟配置寄存器RCC_CFGR的SW 位配置。我们这里设置系统时钟:SYSCLK = PLLCLK = 180M。如果系统时钟是由HSE 经过PLL 倍频之后的PLLCLK 得到,当HSE 出现故障的时候,系统时钟会切换为HSI=16M,直到HSE 恢复正常为止。
(4)AHB 总线时钟HCLK 片上大部分外设的时钟都是经过HCLK 分频得到,STM32F429开发板设置为1 分频,即HCLK=SYSCLK=180M。
(5)APB2 总线时钟HCLK2 APB2 总线时钟PCLK2 由HCLK 经过高速APB2 预分频器得到,分频因子可以是:[1,2,4,8,16],具体由时钟配置寄存器RCC_CFGR 的PPRE2 位设置。HCLK2 属于高速的总线时钟,片上高速的外设就挂载到这条总线上,比如全部的GPIO、USART1、SPI1等。至于APB2 总线上的外设的时钟设置为多少,得等到我们使用该外设的时候才设置,我们这里只需粗线条的设置好APB2 的时钟即可。我们这里设置为2 分频,即PCLK2 =HCLK /2= 90M。
(6)APB1 总线时钟HCLK1 APB1 总线时钟PCLK1 由HCLK 经过低速APB 预分频器得到,分频因子可以是:[1,2,4,8,16],具体由时钟配置寄存器RCC_CFGR 的PPRE1 位设置。HCLK1 属于低速的总线时钟,最高为45M,片上低速的外设就挂载到这条总线上,比如
USART2/3/4/5、SPI2/3,I2C1/2 等。至于APB1 总线上的外设的时钟设置为多少,得等到我们使用该外设的时候才设置,我们这里只需粗线条的设置好APB1 的时钟即可。我们这里设置为4 分频,即PCLK1 = HCLK/4 = 45M。
MCO 是microcontroller clock output 的缩写,是微控制器时钟输出引脚,主要作用是可以对外提供时钟,相当于一个有源晶振。可以将这个时钟接到示波器上测量各种设置是否正确。

浙公网安备 33010602011771号