1、RTC 简介
实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC 还包含用于管理低功耗模式的自动唤醒单元。
两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时( 12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、 29(闰年)、 30 和 31 天。并且还可以进行夏令时补偿。
其它 32 位寄存器还包含可编程的闹钟亚秒、 秒、分钟、小时、星期几和日期。此外,还可以使用数字校准功能对晶振精度的偏差进行补偿。
RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变,只要后备区域供电正常,那么 RTC 将可以一直运行。上电复位后,所有 RTC 寄存器都会受到保护,以防止可能的非正常写访问。所以在要设置时间之前,先要取消备份区域(BKP)写保护。
2、RTC 框图及功能说明
下图即是 RTC 框图:
2.1、时钟和预分频器
RTC 时钟源 (RTCCLK) 通过时钟控制器从 LSE 时钟、 LSI 振荡器时钟以及 HSE 时钟三者中选择(通过设置 RCC_BDCR 寄存器选择)。一般选择 LSE,即外部 32.768KHz 晶振作为时钟源(RTCCLK),因为外部晶振具有精度高的优点。
可编程的预分频器阶段可生成 1 Hz 的时钟,用于更新日历。为最大程度地降低功耗,预分频器分为 2 个可编程的预分频器(参见 RTC 框图):
- 一个通过 RTC_PRER 寄存器的 PREDIV_A 位配置的 7 位异步预分频器。
- 一个通过 RTC_PRER 寄存器的 PREDIV_S 位配置的 15 位同步预分频器。
注意: | 使用两个预分频器时,推荐将异步预分频器配置为较高的值,以最大程度降低功耗。要使用频率为 32.768 kHz 的 LSE 获得频率为 1 Hz 的内部时钟 (ck_spre),需要将异步预分频系数设置为 128,并将同步预分频系数设置为 25 |
经过 7 位异步预分频器出来的时钟 ck_apre 可作为 RTC_SSR 亚秒递减计数(RTC_SSR)的时钟, ck_apre 时钟频率的计算公式如下: