7.8.1 实时时钟的功能和结构
实时时钟即RTC,它可以提供时钟、日历的功能,并且可以使用外部电池供电,在极低的功耗下保持计数,使系统在断电之后还能够计算时间,因此被称为实时时钟。
STM32F1系列MCU的RTC是一个32位的计数器,使用时,需要将计数器的值换算成日期和时间。RTC还具备后备存储区,可以利用电池供电,保存10个16位的数据。RTC内部结构如图7.26所示。

图7.26 RTC内部结构
1.RTC基准时钟源
RTC的时钟源RTCCLK可以是HSE时钟除以128、LSE振荡器时钟、LSI振荡器时钟。RTC内部有一个20位的可编程预分频器,可以实现一秒的RTC基准时钟TR_CLK。
2.32位可编程计数器(https://www.daowen.com)
32位的可编程计数器可被初始化为当前的系统时间。系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较。如果RTC_CR控制寄存器中设置了相应的允许位,比较匹配时,将产生一个闹钟中断。
3.溢出标志和中断
在每一个RTC核心的时钟周期中,更改RTC计数器之前,应设置RTC秒标志(SECF)。
在计数器到达0x0000之前的最后一个RTC时钟周期中,应设置RTC溢出标志(OWF)。
在计数器的值到达闹钟寄存器的值加1(RTC_ALR+1)之前的RTC时钟周期中,应设置RTC_Alarm和RTC闹钟标志(ALRF)。
上述标志若使能中断,则产生一次RTC中断。