剖析STM32F10xxx系列单片机时钟树
在看时钟树之间我们应该对时钟有以下基本概念单片机的时钟系统是整个芯片的心跳基准它输出固定频率的周期性方波信号为单片机内部所有数字电路提供统一的运行节拍。没有时钟单片机的 CPU 和所有外设都无法工作它是单片机正常运行的核心前提。时钟的作用1. 驱动 CPU 执行指令决定运算速度2. 为所有外设提供工作节拍3. 实现精准定时与时序控制4. 作为串行通信的时序基准5. 是低功耗管理的核心手段1.首先我们打开STM32F10xxx参考手册中文看到6.2节时钟部分6.2时钟三种不同的时钟源可被用来驱动系统时钟(SYSCLK)●HSI振荡器时钟●HSE振荡器时钟●PLL时钟这些设备有以下2种二级时钟源●40kHz低速内部RC可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。●32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。当不被使用时任一个时钟源都可被独立地启动或关闭由此优化系统功耗。参照2009年12月RM0008 Refshiz为什么它要叫作时钟树呢我觉得可以这样理解 把左边的OSC_OUTOSC_INOSC32_INOSC32_OUT等部分当作树根那我们现实中的树根就是汲取水分为树干提供营养对吧时钟树呢则是从外部晶振获得时钟信号为右侧的各种总线外设提供时钟基准。也就是说时钟树最终的目的就是提供时钟信号让单片机正常运行那我们主要看什么呢1.它从哪里获得时钟信号2.时钟信号在传输过程中经历了什么3.时钟树存在的意义那我们先从第一点看起首先我们先分别解释一下上文中提到的树根都是什么吧 以及为什么最下面的MCO不是树根MCO时钟输出是从 SYSCLK、HSE、HSI、PLL 分频时钟中选一路通过 PA8 引脚输出到芯片外部。它只是主干上接出来的一个 “对外出水口”自身不产生时钟因此完全不属于树根。HSEHigh Speed External外部高速时钟源对应引脚OSC_IN、OSC_OUT功能在这两个引脚之间外接高速石英晶振常用 8MHz、12MHz也可以直接输入外部方波时钟信号作为芯片主系统的高精度时钟源头。特点精度高、温漂小是单片机跑主程序、做串口 / SPI 等精准通信的首选主时钟相当于供给整棵树主要养分的主树根。LSELow Speed External外部低速时钟源对应引脚OSC32_IN、OSC32_OUT功能外接 32.768kHz 的低速晶振专门给 RTC 实时时钟、低功耗唤醒电路提供精准的计时基准。特点频率极低、功耗极小即使芯片进入待机模式也能继续走时相当于一根独立的细树根专门给 “守时” 这个功能单独供水。树根部分就看完了那如果没有这个树根怎么办呢就像现实生活中的树一样要是没有树根会立马干枯死亡吗应该不会吧因为它内部还含有一些养分吧我们单片机也是如此 只不过它内部的养分是消耗不完的那我们为什么还要用外部时钟源直接用内部的不就行了吗还省引脚相信同学们可能会有这样的疑问但答案是不行。因为内部的时钟源都有一个缺点那就是不稳定。因为它不是由晶振提供的而是由RC震荡器提供内部高速时钟源HSIHigh Speed Internal没有外部引脚集成在芯片内部功能芯片内置的 RC 振荡器比如 STM32 通常为 8MHz上电自动启动不需要任何外部元件。特点启动快、免外部器件但精度差、受温度影响大。它也是独立的树根一般作为备用时钟或用于对精度要求不高的场景。内部低速时钟源LSILow Speed Internal没有外部引脚集成在芯片内部功能内部低频 RC 振荡器通常几十 kHz主要给独立看门狗、低功耗唤醒电路提供时钟。特点功耗极低、精度更差是完全内置的备用树根 —— 哪怕外部晶振失效看门狗依然能正常工作保障芯片安全。分类主树根可驱动 SYSCLK 系统时钟HSI、HSE、PLL 时钟 这三个是给 CPU 和高速总线供能的 “主根系”三选一作为系统主时钟。次树根二级专用时钟源LSI、LSE 这两个是独立的 “旁支根系”不参与系统主频专门给看门狗、RTC 这类低功耗 / 安全模块供电哪怕主时钟全关了它们也能工作。看完了第一点我们再来看看第二点时钟信号在传输过程中经历了什么先看HSE外部高速时钟源SYSCLK系统时钟需要最大72MHz的时钟信号但是外部晶振只能提供8MHz的时钟信号那么我们就需要经过PLLMULPLL Multiplier锁相环倍频器 / 倍频系数倍频后在到SYSCLK8MHz经过9倍频也就达到了我们需求的72MHz然后再由我们的SYSCLK经过AHB再分流到APB1,APB2等各种预分频器进行/1/2等操作达到各个外设以满足其需求。这样既满足了各外设正常运行的需求又达到了节能的目的补充PLL 的输入不只有 HSE很多初学者会误以为 PLL 只能接外部晶振实际上 STM32F1 的 PLL 有两个可选输入外部高速 HSE可选择不分频直接进 PLL或先 2 分频再进 PLL内部高速 HSI必须先 2 分频8MHz→4MHz再进 PLL最高只能倍频到 64MHz到不了 72MHz 满速 这也是 HSI 大多只做启动备用时钟、不做主时钟的原因之一。3.时钟存在的意义兼顾精度与性能用低频高精度晶振 PLL 倍频的方案避免了高频晶振成本高、干扰大、布线难的问题同时满足 CPU 的高速运行需求。按需分配频率不同模块对时钟频率的需求天差地别CPU 要 72MHzRTC 只要 32.768kHz树形的逐级分频可以给每个模块分配合适的频率避免性能浪费。精细化功耗控制从总线分支到单个外设每一级都可以独立关断时钟。不用的模块直接掐断时钟供给是单片机低功耗设计的核心手段 —— 待机模式下只保留 LSE 给 RTC 供电功耗可以降到微安级别。保证全芯片时序同步所有模块的时钟都源自同一个根时钟源整个芯片的数字电路在统一的时序体系下运行外设间通信、数据交互不会出现时序错位保证系统稳定可靠。