STM32学习-31-[时钟]时钟树编程
时钟树的初始状态

如图便是时钟树的初始状态
系统时钟来自于HSI
各个分配器都是设置为/1分频
PCLK1和PCLK2都是8HMz
系统时钟也是8MHz
内核的时钟决定了单片机的执行速度

使用简单的延时可以简单验证
标准库的启动代码

打开单片机的启动文件
单片机是从这个Reset handler开始执行的

所以启动后未用户设置的状态应该如下图

尝试注释启动文件里面为我们配置时钟树的代码

运行后就可以进行上面的那个验证程序了
时钟树的编程接口

HSE和HSI是不同的时钟源
PLL是锁相环
System是系统时钟
HCLK PCLK1 PCLK2对应图中的各个位置
配置时钟树
通过代码实现单片机提供的YsytemInit的对时钟树的配置
步骤如图所示





void App_SystemClock_Init(void){
// 1. 开启HSE
RCC_HSEConfig(RCC_HSE_ON); // 开启HSE
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待HSE就绪
// 2. 配置并启动锁相环
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // HSE * 9
RCC_PLLCmd(ENABLE); // 开启PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // 等待PLL就绪
// 3. 配置AHB APB1 APB2分频器的分频系数
RCC_HCLKConfig(RCC_SYSCLK_Div1);// HCLK = SYSCLK / 1
RCC_PCLK1Config(RCC_HCLK_Div2);// PCLK1 = HCLK / 2
RCC_PCLK2Config(RCC_HCLK_Div1);// PCLK2 = HCLK / 1
// 4. 切换System的时钟来源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // SYSCLK来自锁相环
while(RCC_GetSYSCLKSource() != 0x08); // 等待切换完成
}
配置Flash的指令读取

这部分代码在SystemInit里面已经被实现了,但是我们注释掉了
所以要自己实现
// 还没配置时钟树,频率正好是8MHz
FLASH_PrefetchBufferCmd(ENABLE); // 开启Flash指令预取
FLASH_SetLatency(FLASH_Latency_2);
片上外设开关和复位

要开启那个片上外设的时钟要注意其挂在哪个总线上,调用不同的命令

浙公网安备 33010602011771号