实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供一个带可编程闹钟中断的日历时钟以及一个具有中断功能的周期性可编程唤醒标志。RTC 还包含用于管理所有低功耗模式的自动唤醒单元。
两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或 24 小时制)、星 期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。
系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。并且还可以进行夏令时 补偿。
其它 32 位寄存器还包含可编程的闹钟亚秒、秒、分钟、小时、星期几和日期。
数字校准功能可以对晶振精度的偏差进行补偿。
后备域复位后,所有 RTC 寄存器都会受到保护,以防止可能的非正常写访问。
无论器件状态如何(运行模式、低功耗模式或处于复位状态),只要电源电压保持在工作范围内,RTC 便不会停止工作。
方框图:
特点:
● 包含亚秒、秒、分钟、小时(12/24 小时制)、星期几、日期、月份和年份的日历
● 软件可编程的夏令时补偿
● 具有中断功能的可编程闹钟。可通过任意日历字段的组合驱动闹钟
● 自动唤醒单元,可周期性地生成标志以触发自动唤醒中断
● 参考时钟检测:可使用更加精确的第二时钟源(50 Hz 或 60 Hz)来提高日历的精确度
● 利用亚秒级移位特性与外部时钟实现精确同步
● 数字校准电路(周期性计数器调整)
— 精度为 0.95 ppm,在数秒钟的校准窗口中获得
● 用于事件保存的时间戳功能
● 带配置过滤器和内部上拉的入侵检测
● 可屏蔽中断/事件:
— 闹钟 A
— 闹钟 B
— 唤醒中断
— 时间戳
— 入侵检测
● 20 个备份寄存器
日历功能:
RTC的时钟源(LSE(32.768KHZ)、HSE_RTC、LSI)经过一个精密校准(RTC_CALR),再经过7位的预分频器进行分频(RTC_PRER,默认127+1=128)会产生一个ck_apre()时钟。再经过粗略校准(RTC_CALPR),再经过RTC_PRER(一个同步15位预分频器(默认值=256),影子寄存器(RTC_SSR)),然后再产生一个ck_spre(默认1HZ)为真正的RTC核心时钟。然后提供1HZ的频率给日历(影子寄存器,RTC_TR,RTC_DR,是时间和日期的寄存器)。同步15位预分频器的影子寄存器(RTC_SSR的时钟来自于ck_apre,它的初值来自于RTC_PRER,假设为256,当它计数到零,那么ck_apre就产生了256次,而ck_spre只产生了一次送到日历去)和日历的影子寄存器决定了精确的时间。当闹钟A或者B的时间跟日历时间相等,则产生闹钟。
周期自动唤醒功能:
周期性唤醒标志由 16 位可编程自动重载递减计数器生成。唤醒定时器范围可扩展至 17 位。 可通过 RTC_CR 寄存器中的 WUTE 位来使能此唤醒功能。 唤醒定时器的时钟输入可以是:
● 2、4、8 或 16 分频的 RTC 时钟 (RTCCLK)。 当 RTCCLK 为 LSE (32.768 kHz) 时,可配置的唤醒中断周期介于 122 μs 和 32 s 之间,且分辨率低至 61 μs。
● ck_spre(通常为 1 Hz 内部时钟) 当 ck_spre 频率为 1 Hz 时,可得到的唤醒时间为 1s 到 36h 左右,分辨率为 1 秒。这一较大的可编程时间范围分为两部分:
— WUCKSEL [2:1] = 10 时为 1s 到 18h。
— WUCKSEL [2:1] = 11 时约为 18h 到 36h。在后一种情况下,会将 216 添加到 16 位计数器当前值。完成初始化序列后,定时器开始递减计数。在低功耗模式下使能唤醒功能时,递减计数保持有效。此外,当计数器计数到 0 时,RTC_ISR 寄存器的 WUTF 标志会置 1,并且唤醒寄存器会使用其重载值(RTC_WUTR 寄存器值)动重载。
必须用软件清零 WUTF 标志。
通过将 RTC_CR寄存器中的 WUTIE 位置 1 来使能周期性唤醒中断时,它会使器件退出低功耗模式。
如果已通过 RTC_CR 寄存器中的位 OSEL[0:1] 使能周期性唤醒标志,则该标志可连接到 RTC_ALARM 输出。可通过 RTC_CR 寄存器的 POL 位配置 RTC_ALARM 极性。
系统复位以及低功耗模式(睡眠、停机和待机)对唤醒定时器没有任何影响。
闹钟输出:
RTC_CR寄存器中的OSEL[1:0]位用于激活闹钟输出RTC_ALARM和选择哪一个功能输出。RTC_ISR寄存器中的相应标志反应出了这些功能。
闹钟输出:使用RTC_OR寄存器中的RTC_ALARM_TYPE控制位可以配置RTC_ALARM引脚为漏极开路与推挽输出。
NOTE:一旦使能RTC_ALARM输出,它的优先级高于RTC_CALIB(COE位不关心且必须清零)
当RTC_CALIB或RTC_ALARM输出被选择的时候, RTC_OUT引脚自动被配置为输出