RTC简介
RTC(Real Time Clock,实时时钟)。是一个掉电后仍然可以继续运行的独立定时器。
RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。
RTC实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断)。但其高级之处也就在于掉电之后还可以正常运行。
掉电能运行,不是说它不需要电能,而是它有一套专门的供电系统。
掉电继续运行
这里所说的掉电是指的VDD掉电。VDD掉电后,由VBAT负责给后备区域供电。VBAT由电路中的纽扣电池来供电,一般的电路设计中都会加上备用电池。只要这个电池有电,则后备区域就一直会有电供应。
RTC功能框图
1 RTC的时钟源
RTC有3路时钟来源:HSE(8MHz)/128,LSE(32.768KHz), (40KHz)。其中,如果 使用HSE或LSI的话,当主电源掉电的话,这两个始终都会受到影响,RTC就无法正常工作。所以,一般的通用做法是使用LSE。2个原因:一是LSE不受主电源掉电的影响它再后备供电,二是它的频率是我们都是选择32768Hz,正好是2^15,分频容易实现。
2 APB1接口
用来和APB1总线相连。此单元还包含一组 16 位寄存器,可通过APB1总线对其进行读写操作。APB1接口由APB1总线时钟驱动,用来与APB1总线连接。
通过APB1接口可以访问RTC的相关寄存器(预分频值,计数器值,闹钟值)。
3 RTC预分频模块
PRL:20位需要两个寄存器(16位)存放。
DIV:20位需要两个寄存器(16位)存放。
这个模块是RTC预分频模块,属于后备区域,VDD掉电后,可以在VBAT下继续运行。包含了一个20位的可编程分频器(RTC预分频器)。它可编程产生 1 秒的 RTC 时间基准 TR_CLK。如果在RTC_CR寄存器中设置了相应的允许位,则在每个TR_CLK周期中RTC产生一个中断(秒中断)。
4 32位可编程计数器
这个模块也属于后备区域,是一个32位的可编程计数器,可被初始化为当前的系统时间。一个32位的时钟计数器,按秒钟计算,可以记录4294967296秒,约合136年左右,作为一般应用,这已经是足够了的。
ALR:闹钟计时器。
5 中断
从图中可以看到一共有3个中断:
秒中断:每计时1s产生一次中断。
计数器溢出中断。136年才会产生溢出,一般用不上。
RTC闹钟中断。RCT_CNT和RTC_ALR会比较相等,如果相等表示闹钟时间到,会产生闹钟中断。