时钟源简介
在 STM32F4 中,有 5 个重要的时钟源,分别为 HSI、HSE、LSI、LSE、PLL。其中 PLL 又分为主 PLL 和专用 PLL。上述时钟根据英文缩写可以判断时钟的高低频和内外部时钟。
时钟树解析
①HSE 高速外部时钟信号
- 当使用有源晶振时,时钟从OSC_IN 引脚进入,OSC_OUT 引脚悬空;
- 当选用无源晶振时,时钟从OSC_IN 和OSC_OUT 进入,并且要配谐振电容。
- 当HSE 故障时,高速的内部时钟信号HSI会作为备用的系统时钟,直到HSE恢复正常,HSI=16M。
②锁相环PLL
- HSE 或者HSI 经过PLL 时钟输入分频因子PPLM(2-63)分频后,成为VCO 的时钟输入,VCO 的时钟必须在1~2M 。
- PLL的配置经过根据公式可得:
- VCOCLK_IN = PLLCLK_IN / M = HSE / PLLM
- VCOCLK_OUT = VCOCLK_IN * N = HSE/PLLM*PLLN
- PLLCLK_OUT=VCOCLK_OUT/PLLP = HSE*PLLN/(PLLM * PLLP)
- 如果使能了PLL,则PLLCLK即为我们需要的时钟。
③系统时钟SYSCLK
- 系统时钟来源可以是:HSI、PLLCLK、HSE,具体的由时钟配置寄存器RCC_CFGR的SW位配置。
可以在system_stm32f4xx.c文件中配置
#define RCC_CFGR_SW_HSI ((uint32_t)0x00000000)
#define RCC_CFGR_SW_HSE ((uint32_t)0x00000001)
#define RCC_CFGR_SW_PLL ((uint32_t)0x00000002)
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= RCC_CFGR_SW_PLL;
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
{
}
上图即配置时钟来源为PLLCLK。
④AHB 总线时钟HCLK
- 系统时钟SYSCLK经过AHB预分频器分频之后得到时钟叫APB总线时钟,片上的大部分时钟都是由HCLK分频得到的。
- 根据上面讲述的PLLCLK的配置,可知这里的HCLK即为PLLCLK。我们也可以通过选择RCC_CFGR_SWS_HSI或RCC_CFGR_SWS_HSE来更换系统时钟来源。
⑤APB2 总线时钟HCLK2
- APB2的时钟频率由HCLK分频得来,分频可设。高频时钟,以F405为例,最大允许84M。
⑥APB1 总线时钟HCLK1
- APB1的时钟频率由HCLK分频得来,分频可设。低频时钟,以F405为例,最大允许42M
- AHB、APB1、APB2在system_stm32f4xx.c文件的配置详情见下面的代码块。
RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx)
RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
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 时钟
- 当外接USB PHY芯片时,PHY芯片需要给MCU提供一个时钟。
- 如果当前芯片内部没有集成PHY芯片,则需要外接一个PHY芯片。
F、MCO 时钟输出
- MCO是microcontroller clock output的缩写,是微控制器时钟输出引脚,主要作用是可以对外提供时钟,相当于一个有源晶振。
KEIL内的时钟计算
主时钟计算
- 此处我们只计算时钟来源为PLLCLK,即系统时钟由PLL倍频而来的情况。
- 那么SYSCLK = PLLCLK = HSE*PLLN/(PLLM * PLLP)
其他外设时钟计算
- HCLK = SYSCLK = PLLCLK
- HCLK1 = PLLCLK / 2
- HCLK2 = PLLCLK / 4
- 这个分频比一般都不会变,但是在发现按照这个默认值计算的时钟不对时,要及时的检查配置并计算实际的时钟情况。
- APB1上的外设包括:
- DACEN
- CANEN(1、2)
- I2CEN(1、2、3)
- UART(4、5)
- USARTEN(2、3)
- SPIEN(2、3)
- WWDGEN(窗口看门狗)
- TIMEN(2、3、4、5、6、7、12、13、14)
- APB2上的外设包括:
-TIMEN(1、8、9、10、11)
- SYSCFGEN
- SPIEN(1)
- SDIOEN(安全数字输入输出接口)
- ADCEN(1、2、3)
- USARTEN(1、6)
总结一句,用于记忆,即: APB2负责AD,I/O,高级TIM,串口1、6。 APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM 但这句总结不够严谨,我们可以根据上图面的记录看出,APB1并不负责所有的SPI,但可以用于记录大部分的内容,开发就是如此,既要通过这种口诀记忆一般芯片的通性,又要根据手册去对比验证,这样能确保万无一失。
此文档由学习了“小峰学长生活大爆炸”的文章而来,叙述部分肯定有一些相似之处,但也有我的理解和补充,本意是为了再次加深印象和供以后查阅,如有冒犯,可联系本人。谢谢。
|