您的位置:首页 > 其它

STM32F4_RCC系统时钟配置及描述

2017-08-13 15:14 666 查看

STM32F4_RCC系统时钟配置及描述

1. stm32时钟树分析

在《STM32F4xx中文参考手册.pdf》的第6章介绍了RCC时钟树,时钟树如下:



(1)时钟分类

STM32芯片(所有型号)的时钟包含4类:

高速外部时钟

高速内部时钟

低速外部时钟

低速内部时钟

(2) 时钟源

从上图中可以看出,驱动stm32的系统时钟源有3种:



内部高速时钟

HSE 外部高速时钟

PLLCLK倍频时钟

(3)怎么得到最高168MHz的系统频率

从图中可知,SYSCLK可以又3种时钟源提供:HSI、HSE、PLLCLK,HSI的时钟频率为16MHz,HSE的时钟频率为4~26MHz都不可能获得168MHz的系统频率,唯一能获得168MHz的只有PLLCLK,那么PLLCLK怎么得到168MHz呢?

获得PLLCLK时钟如下图所示:



从图中可知:获得PLLCLK可以通过HSI或者HSE经PLL获得。现假设通过外部时钟HSE获得,且外部时钟为8MHz,那么获得168MHz频率的值可以如下取值:



(4)怎么配置AHB(Advanced High performance Bus)和APB(Advanced Peripheral Bus)时钟?



从图中可知配置AHB和APB的分屏系数就能够得到AHB和APB的时钟。

2. 代码分析

static ErrorStatus Stm32f4xxClockInit(void)

{

#define PLL_M      8
#define PLL_N      336
#define PLL_P      2
#define PLL_Q      7

ErrorStatus HSEStartUpStatus;
RCC_DeInit();
/* 使能外部晶振时钟 */
RCC_HSEConfig(RCC_HSE_ON);

/* 等待外部晶振源启振 */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
while(HSEStartUpStatus == ERROR);

/* 设置HCLK, PCLK1,PCLK2 分频系数 */
RCC_HCLKConfig(RCC_SYSCLK_Div1);    //(HCLK=SYSCLK)=168MHz
RCC_PCLK1Config(RCC_HCLK_Div4);     //(PCLK1=SYSCLK/4)=42MHz
RCC_PCLK2Config(RCC_HCLK_Div2);     //(PCLK2=SYSCLK/2)=84MHz

/* 配置PLLCLK时钟
* PLL=8MHz * N/ (M*P)=8MHz* 336 /(8*2) = 168MHz
*/
RCC_PLLConfig(RCC_PLLSource_HSE,PLL_M ,PLL_N ,PLL_P,PLL_Q);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

/* 选择PLLCLK作为系统时钟源 */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);

/* 关闭内部时钟HSI */
RCC_HSICmd(DISABLE);

return HSEStartUpStatus;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: