一、RCC简介
RCC是:Reset and Clock Control(复位和时钟控制),是STM32内部的一个重要外设。
RCC能够管理各个时钟源和时钟分频,为各个外设提供时钟使能。RCC模块可以通过寄存器操作或库函数配置系统时钟和总线时钟。
二、时钟树
学习时钟,最重要的就是理解时钟树
三、配置时钟实验
1、使用HSE
一般情况下,都是使用HSE,然后HSE经过PLL倍频之后作为系统时钟。通常的配置是:HSE=8M, PLL的倍频因子为9。 系统时钟就设置成:SYSCLK=8M*9=72M
2、硬件设计
1)、rcc
2)、LED一个
RCC是单片机内部资源,不需要外部电路。通过led闪烁的频率来直观的判断不同系统时钟频率对软件的延时效果
3、软件设计
编写两个RCC驱动文件,bsp_rccclkconfig.h和bsp_rccclkconfig.c,用来存放RCC系统时钟配置函数
4、编程要点
编程要点对应功时钟树图中红色序号:
1、开启时钟信号HSE/HSE,并等待其稳定
2、设置AHB、APB2、APB1的预分频因子
3、设置PLL的时钟来源,和PLL的倍频因子,设置各种频率主要就是在这里设置
4、开启PLL,并等待其稳定
5、把PLLCLK切换为系统时钟SYSCLK
6、读取时钟切换状态位,确保PLLCLK被选为系统时钟
void Hse_SetSysClk(uint32_t RCC_PLLMul_x)
{
ErrorStatus HSEStatus;
//把RCC寄存器复位成复位值,以便重新配置时钟系统
RCC_DeInit();
//1、使能HSE并等待其稳定
RCC_HSEConfig(RCC_HSE_ON);
HSEStatus=RCC_WaitForHSEStartUp();
if(HSEStatus ==SUCCESS)
{
//使能预取指缓冲区,并设置闪存延迟周期为2个时钟周期。这样可以提高闪存的存取速度和性能
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
//2、设置AHB、APB2、APB1的预分频因子HCLK = SYSCLK、PCLK2 = HCLK、PCLK1 = HCLK/2
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
//3、设置PLL的时钟来源为HSE,和PLL的倍频因子RCC_PLLMul_x
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);