我们现在基于STM32系统时钟,来解释RTC时钟源:
下面是系统时钟图:红色方框分别是RTC和SYSTICK。


SysTick
-
在 RTOS 下 :SysTick 通常被配置为 1ms 周期中断,作为 RTOS 的"心跳"。每次中断都会触发任务调度,检查是否有更高优先级的任务就绪,或是否到达当前任务的时隙。
-
裸机下 :SysTick 依然可以作为一种通用的定时器 。比如你可以用它实现非阻塞延时 (
HAL_Delay就是基于 SysTick)、软件定时器 、系统时基等。所以它并不是 RTOS 专属,只是 RTOS 依赖它作为调度驱动。
RTC
1. 在 RTOS 低功耗模式(tickless)下
-
当 RTOS 启用 tickless 模式 ,且系统进入 Stop 模式 这类深度睡眠时,SysTick 会停止。
-
此时 RTC 接管时间基准。它会计算距离下一个任务唤醒还剩多少时间,设置一个闹钟,然后 CPU 彻底休眠。
-
等到 RTC 闹钟触发,CPU 被唤醒,RTOS 再根据实际经过的时间"补"滴答数,继续正常运行。
-
这样避免了 CPU 每 1ms 醒来一次的无谓耗电,非常适合电池供电的产品。
2. 在其他场景下(裸机 / 常规应用)
实时时钟/日历:在 VBAT 备用电池支持下,主电源断电后仍能继续走时,为数据记录、事件打时间戳提供可靠时间基准。
低功耗定时唤醒:在裸机程序中,可让 CPU 进入 Stop/Standby 模式,RTC 设置闹钟定时唤醒,实现"睡死到点再醒"的超低功耗循环。
备份寄存器:RTC 模块自带的备份寄存器在 VBAT 供电下数据不丢失,可用于存储系统状态、开机次数、异常标志等关键信息。
方波输出:可配置 RTC_OUT 引脚输出 1Hz、32.768kHz 等精确时钟,用于校准或为外部芯片提供时钟。