
引言你有没有想过你的 ARM-CPU 能从 Flash 上读取代码并执行可是是谁让 ARM-CPU 读取指令的你的 ARM-CPU 能一直从 Flash 上读取代码并执行可是是谁一直让 ARM-CPU 读取指令的事实上任何计算机系统包括单片机CPU 也要被驱动。CPU 很聪明可以读取指令分析指令执行指令周而复始CPU 也很傻它必须在别人的催促下才能完成上面的工作这里 “催促” CPU 运行的硬件机制叫做时钟什么是时钟时钟类似一个 节拍器以固定的频率给设备发送电信号催促目标设备进行工作CPU 不会主动执行需要在时钟这个外力的驱使下才能进行工作认识时钟源如图图中上面的心脏部分就是时钟源它不断产生高低电平驱动CPU和外设工作功耗原因但是并不是所有的外设都需要同时工作的所以时钟源驱动外设时还需要通过一个开关我们可以通过这个开关来控制外设的工作与否。CPU是不用使能的因为CPU需要一直工作。倍频与分频但是每个外设工作的频率是不一样的而时钟源就只有一个所以就有了倍频器与分频器来控制外设上的时钟频率。下图为不同外设的工作频率倍频与分频示例时钟源与振荡器振荡器是产生原始周期性电信号的硬件时钟源是系统里提供时钟信号的来源振荡器是最核心、最常见的一类时钟源如下图是MCU外部的时钟源由无源谐振振荡器构成。无源谐振振荡器内外时钟源事实上时钟源不止一个一般分为内部时钟源由MCU自己提供相当于一个缺省的时钟源外部时钟源由硬件工程师提供MCU中有外部晶振的接口上面的四个时钟源的详细信息如下表HSE和LSE是MCU外部的时钟源是需要硬件工程师自己提供晶振的。那为什么意法半导体官方的参考手册会把它画到MCU的内部呢其实这也算不上一种错误前面我们学过晶振就知道无源晶振是需要外部配合的MCU内部也有一部分关于该时钟源的电路意法半导体把这个系统视为了一个整体故把它画在MCU里面倍频和分频的配置选择时钟源时钟源使能外设的开关其实就是与门我们目前只关心第一部分即可时钟树简化图不同视角的时钟源软硬工程师的不同视角从总线架构看时钟源关于CSS了解即可CSS 的全称Clock Security System时钟安全系统它由如下特性⭐ HSE 故障 → 自动切到 HSI STM32F103 的时钟安全系统CSS一旦检测到 HSE 失效无论 HSE 是直接做 SYSCLK 还是经 PLL硬件会立即关闭 HSE 及 PLL把 SYSCLK 强制切换到 HSI8 MHz这个过程完全由硬件完成软件来不及干预但会产生 NMI 中断供后续补救HSI 故障 → 不自动切到 HSEHSI 是内部 RC 振荡器规格书里不存在 “HSI 失效检测” 与 “自动切到 HSE ” 的机制。如果 HSI 因意外停振系统只能死机或复位。因此只有 HSE 故障时 MCU 才会自动降级到 HSI若想反向保护需要软件自己写监控逻辑。在STM32CubeMX中是类似的总线结构和时钟树打通理解如下图意法半导体并没有公开说明是什么样的这也只是一种理解时钟如何统一调度CPU和外设工作存一个比特位的寄存器A端接高低电平是使能端八位MCU如何从外设中读取信息如何对外设的寄存器进行写操作利用时钟信号来作为开关的控制信号控制寄存器