STM32学习-31-[时钟]时钟树编程

时钟树的初始状态

image
如图便是时钟树的初始状态
系统时钟来自于HSI
各个分配器都是设置为/1分频
PCLK1和PCLK2都是8HMz
系统时钟也是8MHz

内核的时钟决定了单片机的执行速度
image
使用简单的延时可以简单验证

标准库的启动代码

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

image

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

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

运行后就可以进行上面的那个验证程序了

时钟树的编程接口

image

HSE和HSI是不同的时钟源
PLL是锁相环
System是系统时钟
HCLK PCLK1 PCLK2对应图中的各个位置

配置时钟树

通过代码实现单片机提供的YsytemInit的对时钟树的配置

步骤如图所示
image

image

image

image

image

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的指令读取

image
这部分代码在SystemInit里面已经被实现了,但是我们注释掉了
所以要自己实现

	// 还没配置时钟树,频率正好是8MHz
	FLASH_PrefetchBufferCmd(ENABLE);	// 开启Flash指令预取
	FLASH_SetLatency(FLASH_Latency_2);

片上外设开关和复位

image

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

posted @ 2026-09-02 11:10  灵垚克府  阅读(6)  评论(0)    收藏  举报