【嵌入式原理系列-第二篇】时钟树配置及RTC注意事项

发布于:2025-08-16 ⋅ 阅读:(23) ⋅ 点赞:(0)

目录

引言

一、时钟源和时钟树

1.1 时钟源选择

1.2 外部源与内部源

1.3 时钟树配置推荐顺序

二、RTC相关设计注意事项

2.1 RTC精度保证

2.2 RTC软件层面防护

三、总结


引言

在嵌入式系统设计中,时钟源(Clock Source)的选择与RTC(Real-Time Clock,实时时钟)的精度管理是确保系统稳定运行的重要环节。错误的时钟策略不仅会导致系统性能下降,还可能造成功耗增加、时间漂移甚至功能异常。本文将从时钟树配置与RTC设计要点两个方面,整理工程实践中的常见经验与注意事项。


一、时钟源和时钟树

1.1 时钟源选择

 选择贴近模块所需频率的时钟源,可减少分频或倍频电路的使用,降低抖动(jitter)和功耗,同时减少时钟树(Clock Tree)复杂度。

 例如,需要 48 MHz 系统时钟时,优先选择接近 48 MHz 的晶振或内部源,而非使用 8 MHz 再通过 PLL 倍频。

若没有合适的时钟源,可以参考以下优先级:

  1. 低速源 + PLL 倍频:PLL 倍频后仍能保持较高的相位稳定性,但功耗情况较为负责:虽然低速源本身功耗小,但 PLL 模块本身功耗较高,在一些低功耗 MCU 上(尤其是超低功耗 ARM Cortex-M0+ 系列),使用低速时钟源+PLL的总功耗可能高于使用一个高速源+预分频器。因此功耗取决于目标频率、PLL效率和MCU工艺,务必结合芯片数据手册实测确认)。
  2. 高速源 + 预分频器:能提供稳定时钟,但原始高速振荡功耗较大。

1.2 外部源与内部源

1)外部时钟源(如晶振、外部时钟模块)

  • 精度高
  • 抗温漂能力强
  • 一般来说启动时间较长(相比内部时钟源,通常在毫秒级甚至更长,具体取决于晶振类型和电路设计)、功耗较高

2)内部时钟源(一般是内部RC振荡器)

  • 启动快、功耗低
  • 精度较差、受温度影响明显
  • 适用于启动阶段、低功耗模式或对时钟精度要求不高的场景

为什么MCU内部一般都是RC振荡器:

内部振荡器几乎都是 RC 振荡器,因为它便宜、易集成、不依赖外部器件。晶体振荡器一般很难做在MCU内部(因为石英晶体是机械结构,需要外部封装),所以通常 MCU 里只是集成了驱动电路(oscillator driver),让你外接晶体。


1.3 时钟树配置推荐顺序

1)关闭中断

避免时钟未稳定时中断触发导致异常。

2)选择并启用内部时钟源作为备用时钟

系统上电后,MCU通常默认使用内部RC振荡器(如HSI)作为时钟源,确保系统有一个稳定(即使精度不高)的基础时钟启动运行。这保证了即使后续外部时钟启动失败,系统也能维持基本功能(如运行错误处理代码)

3)选择并启用外部时钟源作为主时钟

一般来说MCU内部提供的都是RC振荡器,RC振荡器不管精度还是稳定性都不如晶体振荡器,因此接下来采用更稳定、高精度的外部晶振作为主时钟,此过程需要等待晶振稳定。

如何判断振荡器稳定:

1. 稳定性标志为核心依据

稳定性标志是软件判断的主要依据,MCU 振荡器硬件模块(如 OSC_RDY、PLL_LOCK)通过内部机制(如频率检测、相位检测)会生成一个“稳定标志”。软件应优先依赖并检查这个标志位来判断振荡器是否稳定。

2. 两种获取稳定标志的方法

  • 轮询(Polling):软件主动循环读取稳定标志,常见于启动初始化阶段,简单直观。
  • 中断(Interrupt):振荡器稳定后硬件触发中断,CPU 可在低功耗状态等待唤醒,提升效率,适合实时操作系统或复杂应用。

3. 可编程延时用于增强标志可信度

振荡器启动后,硬件内部启动一个可编程延时计数器,确保振荡器有充分时间稳定,避免因瞬间频率波动导致稳定标志误判。软件读取的稳定标志结合延时,保证判断结果的可靠性。

4)配置PLL参数

 PLL将主时钟倍频至系统所需频率,配置需符合芯片规格。

5)启用PLL并等待锁定

确认PLL输出频率稳定,防止时钟跳变导致异常。

6)切换系统主时钟到PLL输出

 使用高性能PLL时钟提升CPU和外设速度。

7)配置各总线和外设时钟分频并使能

总线频率满足外设要求,防止超频或时序异常。开启外设时钟使能,按需节省功耗。

8)开启中断

确保时钟和外设稳定后再开启中断,保障系统正常响应。


    二、RTC相关设计注意事项

    RTC用于记录日历时间,即便系统掉电或进入低功耗模式,也能持续计时。设计不当可能导致时间漂移、溢出甚至丢失。


    2.1 RTC精度保证

    为了确保RTC时间长期准确,常见做法包括:

    1)独立供电 + 外部晶振

    • 低功耗、温漂小
    • 常用32.768 kHz晶振,32.768 kHz经15级二分频可精确得到1 Hz信号(32768/2¹⁵=1),方便实现精确的1 Hz信号

    2)溢出中断处理

    当检测到RTC计数器即将溢出(通过预装载或比较中断)或发生溢出中断时,将当前的溢出次数保存到非易失存储器(如Flash、EEPROM),然后复位到0并保持连续计数。这样软件在读取时间时,需要将保存的累计时间与当前RTC计数值合并计算。

    3)休眠处理

    在休眠前保存当前时间,然后复位到0并保持连续计数,避免因计数器溢出导致大幅时间跳变。

    4)外部时间源同步

    使用外部时间(如GPS、NTP、蜂窝网络时间)用于定期校准,防止因供电异常或晶振偏差造成的累计误差


    2.2 RTC软件层面防护

    1)软件应定期读取并保存当前时间(如每隔数小时写入Flash)

    2)对于长期断电的设备,可在重启时从外部时间源获取基准时间


    三、总结

    时钟源与RTC虽然在系统中“默默工作”,但它们的选型与配置往往影响全局。

    良好的时钟架构不仅能提升系统性能与稳定性,还能降低功耗与维护成本。工程实践中,应结合功耗、精度、启动速度、成本等多方面权衡,制定合适的时钟与RTC策略。


    想了解更多嵌入式技术知识,请点击阅读我的其他文章

    烟花的文章链接集合-CSDN博客

    如果你觉得内容对您有帮助,别忘了点赞、收藏和分享支持下哦!


    网站公告

    今日签到

    点亮在社区的每一天
    去签到