文章目录
Keil中的配置
时钟配置在system_stm32f4xx.c和stm32f4xx.h中,如PLL_M、PLL_N、PLL_P、PLL_Q、HSE_VALUE。
时钟配置函数:SystemInit()
- m:
VCO输入时钟 分频因子,取值2~63 - n:
VCO输出时钟 倍频因子,取值192~432 - p:
SYSCLK时钟 分频因子,取值2,4,6,8 。 - q:
OTG FS,SDIO,RNG时钟 分频因子,取值4~15 PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_NSB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQSYSCLK = PLL_VCO / PLL_P
- 一般情况下,我们都是使用
HSE,HSE经过PLL倍频之后作为系统时钟。 - 如果开启了
CSS功能的话,那么可以当HSE故障时,在CSS中断里面采取补救措施,使用HSI,重新设置系统频率为180M,让系统恢复正常使用。
时钟树详解
- 对于SYSCLK、HCLK、PCLK2、PCLK1 这四个时钟的配置一般是:HCLK =SYSCLK=PLLCLK = 180M,PCLK2=HCLK/2 = 90M,PCLK1=HCLK/4 = 45M。
①HSE 高速外部时钟信号
- 当使用有源晶振时,时钟从
OSC_IN引脚进入,OSC_OUT引脚悬空;当选用无源晶振时,时钟从OSC_IN和OSC_OUT进入,并且要配谐振电容。 - 当
HSE故障时,高速的内部时钟信号HSI会作为备用的系统时钟,直到HSE恢复正常,HSI=16M。
②锁相环PLL
-
HSE 或者HSI 经过PLL 时钟输入分频因子M(
2~63)分频后,成为VCO的时钟输入,VCO的时钟必须在1~2M 之间,我们选择HSE=25M作为PLL 的时钟输入,M设置为25,那么VCO输入时钟就等于1M。 -
PLLCLK_OUTMAX = VCOCLK_OUTMAX / P_MIN = 432/2=216M,即F429 最高可超频到216M。 -
PLL 的时钟配置经过,稍微整理下可由如下公式表达:
VCOCLK_IN = PLLCLK_IN / M = HSE / 25 = 1MVCOCLK_OUT = VCOCLK_IN * N = 1M * 360 = 360MPLLCLK_OUT=VCOCLK_OUT/P=360/2=180MUSBCLK = VCOCLK_OUT/Q=360/7=51.7。暂时这样配置,到真正使用USB 的时候会重新配置。
③系统时钟SYSCLK
系统时钟来源可以是:HSI、PLLCLK、HSEHSE,具体的由时钟配置寄存器RCC_CFGR的SW位配置。
④AHB 总线时钟HCLK
- 系统时钟
SYSCLK经过AHB预分频器分频之后得到时钟叫APB总线时钟,即HCLK。 - 片上大部分外设的时钟都是经过
HCLK分频得到。
⑤APB2 总线时钟HCLK2
APB2总线时钟PCLK2由HCLK经过高速APB2预分频器得到。HCLK2属于高速的总线时钟,片上高速的外设就挂载到这条总线上,比如全部的GPIO、USART1、SPI1等。
⑥APB1 总线时钟HCLK1
APB1总线时钟PCLK1由HCLK经过低速APB1预分频器得到。HCLK1属于低速的总线时钟,最高为45M,片上低速的外设就挂载到这条总线上,比如USART2/3/4/5、SPI2/3,I2C1/2等。
A、RTC 时钟
RTCCLK时钟源可以是HSE 1 MHz、LSE或者LSI时钟。- 通常的做法是由
LSE给RTC提供时钟,大小为32.768KHZ。 LSE由外接的晶体谐振器产生,所配的谐振电容精度要求高,不然很容易不起震。
B、独立看门狗时钟
由内部的低速时钟LSI提供,大小为32KHZ。
C、I2S 时钟
I2S时钟可由外部的时钟引脚I2S_CKIN输入,也可由专用的PLLI2SCLK提供。
D、PHY以太网时钟
- F429要想实现以太网功能,除了有本身内置的
MAC之外,还需要外接一个PHY芯片。 - 当使用
RMII接口时,PHY芯片只需输出一路时钟给MCU即可。 - 如果是
MII接口,PHY芯片则需要提供两路时钟给MCU。
E、USB PHY 时钟
- F429 的
USB没有集成PHY,必须外置USB PHY芯片。 - 当外接
USB PHY芯片时,PHY芯片需要给MCU提供一个时钟。
F、MCO 时钟输出
MCO是microcontroller clock output的缩写,是微控制器时钟输出引脚,主要作用是可以对外提供时钟,相当于一个有源晶振。