短文标题:HSI启动、HSE稳频、PLL加速:时钟源三级跳

你有没有想过一个问题:STM32上电后,外部晶振还没起振,程序怎么跑的?先用内部RC(HSI)跑起来,等外部晶振(HSE)稳定了再切过去,再用PLL倍频加速。HSI是“备胎”,HSE是“主力”,PLL是“加速器”——三级时钟源各司其职。第一级:HSI(内部RC振荡器)——起跑

上电即用,让系统先跑起来。 复位后默认时钟源就是HSI。第二级:HSE(外部晶体振荡器)——稳频

精度高,但启动慢。 系统先HSI跑着,等HSE稳定了再切换过去。切换流程

// 1. 使能HSE

RCC->CR |= RCC_CR_HSEON;

// 2. 等待HSE就绪(几毫秒)

while (!(RCC->CR & RCC_CR_HSERDY));

// 3. 配置PLL(如8MHz→72MHz)

RCC->CFGR |= RCC_CFGR_PLLMULL9;  // 9倍频

RCC->CR |= RCC_CR_PLLON;

while (!(RCC->CR & RCC_CR_PLLRDY));

// 4. 切换系统时钟到PLL

RCC->CFGR |= RCC_CFGR_SW_PLL;

while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);

第三级:PLL(锁相环)——加速,PLL将HSE(8MHz)倍频到72MHz。倍频系数2~16可选(STM32F103),输出频率不超过72MHz。PLL是“涡轮增压器”——让系统跑满速。为什么HSI是“备胎”?

  • 精度不够:±1%精度做不了精准定时(串口高波特率可能误码)
  • 温漂大:温度变化频率飘,现场环境不可靠

但HSI在HSE失效时保命:配合CSS(时钟安全系统),HSE失效自动切回HSI,系统不挂。外部晶振的两类

有源晶振更稳定,但贵。无源晶振需要两个负载电容(10~22pF)匹配晶振数据手册。这个故事的启示HSI起跑,HSE稳频,PLL加速——三级时钟源接力,让系统又快又稳。没有HSI,上电要等晶振起振(几ms延迟);没有HSE,精度不够;没有PLL,跑不到72MHz。写在最后,时钟源配置不是“选最高频率”,是三级接力:先用HSI活着,再用HSE稳住,最后PLL冲起来。三级跳完,系统才达到最佳性能。


(本文灵感源于于振南《新概念ARM32单片机》教程第2.2节、第2.3节、第2.4节。)

觉得有用?点赞、转发,让更多人看懂HSI→HSE→PLL的时钟三级跳。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐