stm32默认复位刚开始由hsi作为主时钟源而后来才换成的pll
在STM32微控制器(几乎所有系列,如F0, F1, F2, F3, F4, F7, L4, G0, G4, H7等)上,复位后的初始时钟配置遵循这个原则:
-
复位后立即使用HSI:
-
当STM32从复位状态释放(无论是上电复位、外部复位还是看门狗复位等),它的时钟系统会进入一个默认的安全状态。
-
此时,内部高速时钟(HSI RC振荡器) 被自动选为系统时钟(SYSCLK)的来源。
-
原因:
-
启动速度快: HSI是一个内部的RC振荡器,不需要外部元件,启动时间非常短(通常是微秒级别),确保CPU内核和关键外设(如Flash接口、SRAM控制器)能立即获得时钟信号并开始执行代码(从地址0x00000000,通常是启动存储器的起始处)。
-
可靠性: 它不依赖于外部晶振(HSE),外部晶振可能因为硬件问题(未焊接、损坏、负载电容不匹配)或环境因素(温度、振动)而无法启动。使用内部HSI保证了最基础的可靠启动。
-
简化启动流程: 提供一个已知且稳定的时钟源,让启动代码(Bootloader或用户程序的开头部分)能在一个确定的环境下运行。
-
-
-
后续切换到PLL(或其他时钟源):
-
复位后,芯片开始执行启动代码。对于使用标准库(如标准外设库、HAL/LL库)或CubeMX生成代码的项目,通常会在
SystemInit()
函数(或类似名称的函数)中执行时钟系统的配置。 -
在这个配置过程中,软件会:
-
使能目标时钟源: 通常是使能外部高速时钟(HSE),等待其稳定(通过检查RCC状态标志位)。有时也可能使用HSI直接作为PLL输入或直接作为系统时钟(如果性能要求不高)。
-
配置PLL: 设置PLL的输入源(HSE或HSI)、倍频系数(N)、分频系数(M用于预分频输入频率,P用于分频输出给系统时钟)等参数。
-
使能PLL: 启动PLL,并等待其锁定(PLLRDY标志置位),表明输出频率稳定。
-
切换系统时钟源: 将系统时钟源(SYSCLK)从当前的HSI切换到配置好的PLL输出。
-
更新总线分频器: 根据新的SYSCLK频率,调整AHB、APB1、APB2等总线的预分频系数,确保连接到这些总线上的外设工作在允许的频率范围内。
-
-
这个切换过程是由用户程序(或库函数)主动执行的。如果程序不做任何时钟配置,MCU会一直运行在HSI时钟下(通常是8MHz或16MHz,具体取决于型号)。
-
总结关键点:
-
默认复位状态: SYSCLK源 = HSI。
-
原因: 快速、可靠、保证最基本启动。
-
切换时机: 在启动代码(如
SystemInit()
)中由软件配置和切换。 -
切换目标: 通常切换到配置好的PLL(以HSE为输入源,提供更高的主频),但也可能切换到HSE或HSI(如果不需要高性能)。
-
依赖软件: 切换到更高性能时钟(如PLL)不是自动发生的,必须由用户代码或库函数显式配置。