RTC,是Real Time Counter的缩写。在MCU中,其实是一组连续计数的计数器,各个产品及系列各不相同。因此,在相应的软件配置下,可提供时钟日历的功能。当然,修改这个计数器的值也就重新设置了系统当前的时间和日期。
本文引用地址:http://www.eepw.com.cn/article/182407.htm
RTC只是一个时钟,但与RTC相连的有两个系统时钟,一个是APB1接口的PCLK1另一个是RTC时钟[注意1]。这样,RTC功能也就分为两个部分:第一部分,APB1接口部分,与APB1总线相连,MCU也就是通过这条总线对其进行读写操作。另一部,RTC核,由一系列可编程计数器组成,这部分又再细分为两个组件:预分频模块与32位可编程计数器。预分频模块用来产生最长为1秒的RTC时间基准,而32位的可编程的计数器可被初始化为当前的系统时间。
下图为RTC简化框图:
读RTC寄存器
从上面的工作原理可知,RTC核完全独立于RTC APB1接口,软件通过APB1接口来访问RTC的各项参数,包括预分频值、计数器值等等,但是这些参数值只在RTC时钟的上升沿被更新,之后,RTC时钟会与RTC APB1时钟进行重新同步。这里会有一些问题出现,就是在APB1接口刚刚被开启时,第一次的内部寄存器更新之前,那么此时从RTC寄存器中读出的第一个值可能被破坏了,例如下面所述的三种情况:
发生系统复位或电源复位
系统刚从待机模式唤醒
系统刚从停机模式唤醒
可以简单得出,在APB1接口被禁止时(复位,无时钟或断电)RTC核仍保持运行状态。因此,在禁止了RTC的APB1接口后,软件首先须等等RSF位被硬件置1.
RTC功能配置
1. 查询RTOFF 位,直到RTOFF 的值变为“1”
2. 置CNF 值为1,进入配置模式
3. 对一个或多个RTC 寄存器进行写操作
4. 清除CNF 标志位,退出配置模式
5. 查询RTOFF,直至RTOFF 位变为“1” 以确认写操作已经完成。
仅当CNF 标志位被清除时,写操作才能进行,这个过程至少需要3 个RTCCLK 周期。
注意1:RTC时钟必须小于PCLK1时钟的四分之一以上。