进阶#看门狗#IWDG#RTC#32.768kHz#低功耗#Standby
看门狗、RTC 与低功耗硬件 Watchdog / RTC / Low-Power
1. 设计动机
<>
它们都是"系统管理"类硬件,且互相配合:产品要长期无人值守运行,就怕程序跑飞——看门狗负责在软件卡死时自动复位;要掉电保持时间,就靠 RTC(Real-Time Clock) 走时;要电池供电长续航,就得让 MCU 平时睡在低功耗模式,靠 RTC 闹钟或外部中断唤醒。
硬件上要点:看门狗用独立时钟(即使主时钟挂了也能复位)、RTC 用 32.768kHz 晶振、低功耗要把不用的时钟/外设都关掉。
2. 原理图
下图是三者的硬件关系:独立看门狗由内部 LSI 驱动,超时喂狗就复位;RTC 由外部 32.768kHz 晶振驱动,负责走时与唤醒;低功耗模式停掉内核时钟,由 RTC/外部中断唤醒。
3. 静态分析(DC)
- IWDG(Independent Watchdog):由独立内部 RC(LSI,约 32kHz)驱动,不依赖主时钟。即使主时钟故障,它仍能超时复位。
- RTC 时钟源:LSE(外部 32.768kHz 晶振,精准)或 LSI(内部 RC,便宜但不准)。
- 低功耗电流:Run 模式 mA 级、Stop 模式 µA 级、Standby 模式 nA~µA 级。功耗随关断程度指数下降。
4. 动态分析(AC / 瞬态)
- 喂狗周期:IWDG 计数器递减到 0 前必须重新加载("喂狗"),否则产生复位。喂狗周期要远大于正常任务最长执行时间。
- 32.768kHz 的妙处:,经 15 次二分频正好得到 1Hz 秒脉冲,硬件实现简单。
5. 环路分析
<>
若看门狗和主程序共用一个时钟,主时钟一旦停振,看门狗也跟着停,就复位不了了。独立 LSI 即使主时钟/软件全挂,仍在走时、到点复位。这是"独立"二字的硬件意义。
6. 元件取值与工程权衡
- 看门狗超时:按任务最坏执行时间设,留足余量;太短会误复位。
- RTC 晶振:对时间精度敏感用 LSE 外部 32.768kHz(±20ppm);对成本敏感用 LSI。
- 低功耗:进低功耗前关掉不用的外设时钟、未用脚设模拟态,否则电流降不下来。
- 唤醒源:RTC 闹钟、外部中断引脚;唤醒后从复位点或断点继续。
7. 完整设计示例
<>
- 需求:电池供电,每秒采样一次传感器,其余时间休眠。
- RTC:LSE 32.768kHz,设 1 秒闹钟。
- 流程:采数据 → 写 RTC 闹钟 → 进 Stop 模式 → RTC 闹钟唤醒 → 重复。
- 看门狗:开 IWDG,超时设为 2 秒(>最坏任务时间)。
- 功耗:Stop 模式 ~5µA,平均电流 µA 级,电池可用数年。
- 验算:RTC 走时准确、每秒唤醒一次、无看门狗复位。
8. 仿真与实验
- 故意不喂狗,观察 MCU 周期性复位。
- 量 Stop 模式电流,确认降到 µA 级;若仍 mA 级,查未关的外设时钟/悬空脚。
- 设 RTC 闹钟,验证定时唤醒。
扩展与变种电路
扩展1:IWDG 与 WWDG 对比
定位:两种看门狗的分工。
<>
- IWDG:独立时钟,防程序跑飞/死机,超时即复位。
- WWDG(窗口看门狗):由主时钟驱动,必须在"窗口"内喂狗——太早喂(说明主循环异常快)或太晚喂都复位,可抓时序错乱。
- 工业产品常用 IWDG 兜底,安全相关加 WWDG。
取值对比:
| 看门狗 | 时钟 | 作用 |
|---|---|---|
| IWDG | 独立 LSI | 防跑飞 |
| WWDG | 主时钟 | 抓时序异常 |
<>
- 现象:正常运行也反复复位。
- 原因:超时设得比任务最长时间还短。
- 解决:按最坏执行时间留余量设超时。
扩展2:RTC 32.768kHz 晶振 LSE
定位:RTC 为什么用这个频率。
_
<>
- 32768=2^15,15 次二分频得 1Hz,硬件秒脉冲简洁。
- 负载电容按晶振 CL 反推,常取 12.5pF。
- LSE 功耗极低,适合 VBAT 后备供电长期走时。
取值对比:
| 时钟源 | 精度 | 功耗 |
|---|---|---|
| LSE 外部晶振 | ±20ppm | 极低 |
| LSI 内部 RC | ±5% | 低但不准 |
<>
- 现象:一天差好几秒。
- 原因:LSI 精度 ±5%,温漂大。
- 解决:对时间敏感用 LSE 外部 32.768kHz 晶振。
9. 常见坑与故障现象
<>
- 低功耗电流降不下来:外设时钟没关、引脚悬空。进低功耗前关时钟、固定引脚电平。
- RTC 走时不准:用了 LSI。换 LSE 晶振。
- 看门狗误复位:超时太短。按最坏时间设。
- Standby 后不唤醒:唤醒源没配好。核对 RTC 闹钟/外部中断。
10. 自测题
为什么 RTC 用 32.768kHz 而不是随便一个频率?
因为 32768=2^15,经 15 次二分频正好得到 1Hz 秒脉冲,硬件实现简单、功耗低。
独立看门狗为什么要用独立时钟?
这样即使主时钟停振、软件跑飞,看门狗仍靠独立 LSI 走时并超时复位,真正起到兜底作用。
11. 参考资料
- STM32 IWDG/WWDG 与 RTC 应用笔记
- ARM Cortex-M 低功耗模式文档