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

所有评论(0)