STM32F4_RCC系统时钟配置及描述

来源:互联网 发布:hse风险矩阵标准 编辑:程序博客网 时间:2024/05/19 12:25

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      7ErrorStatus HSEStartUpStatus;RCC_DeInit();/* 使能外部晶振时钟 */RCC_HSEConfig(RCC_HSE_ON); /* 等待外部晶振源启振 */HSEStartUpStatus = RCC_WaitForHSEStartUp();while(HSEStartUpStatus == ERROR);/* 设置HCLK, PCLK1,PCLK2 分频系数 */RCC_HCLKConfig(RCC_SYSCLK_Div1);    //(HCLK=SYSCLK)=168MHzRCC_PCLK1Config(RCC_HCLK_Div4);     //(PCLK1=SYSCLK/4)=42MHzRCC_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;

}

原创粉丝点击