在看时钟树之间我们应该对时钟有以下基本概念:

单片机的时钟系统是整个芯片的心跳基准,它输出固定频率的周期性方波信号,为单片机内部所有数字电路提供统一的运行节拍。没有时钟,单片机的 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 Ref

shiz

为什么它要叫作时钟树呢,我觉得可以这样理解 把左边的OSC_OUT,OSC_IN,OSC32_IN,OSC32_OUT等部分当作树根,那我们现实中的树根就是汲取水分为树干提供营养对吧,时钟树呢则是从外部晶振获得时钟信号,为右侧的各种总线,外设提供时钟基准。也就是说时钟树最终的目的就是提供时钟信号,让单片机正常运行,那我们主要看什么呢:1.它从哪里获得时钟信号2.时钟信号在传输过程中经历了什么3.时钟树存在的意义;

那我们先从第一点看起:首先我们先分别解释一下上文中提到的树根都是什么吧 以及为什么最下面的MCO不是树根;

MCO(时钟输出)是从 SYSCLK、HSE、HSI、PLL 分频时钟中选一路,通过 PA8 引脚输出到芯片外部。它只是主干上接出来的一个 “对外出水口”,自身不产生时钟,因此完全不属于树根。

HSE(High Speed External外部高速时钟源)

对应引脚:OSC_INOSC_OUT

功能:在这两个引脚之间外接高速石英晶振(常用 8MHz、12MHz),也可以直接输入外部方波时钟信号,作为芯片主系统的高精度时钟源头。

特点:精度高、温漂小,是单片机跑主程序、做串口 / SPI 等精准通信的首选主时钟,相当于供给整棵树主要养分的主树根。

LSE(Low Speed External外部低速时钟源)

对应引脚:OSC32_INOSC32_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 供电,功耗可以降到微安级别。

保证全芯片时序同步:所有模块的时钟都源自同一个根时钟源,整个芯片的数字电路在统一的时序体系下运行,外设间通信、数据交互不会出现时序错位,保证系统稳定可靠。

Logo

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

更多推荐