一、RTC实时时钟原理
1、RTC实时时钟是一个独立的定时器,可以提供日期时间或者闹钟的功能。其核心是通过32位可编程计数器RTC_CNT计数来进行时间配置。
2、图1中RTCCLK为RTC时钟源,其主要是由外部晶振提供时钟源,一般为32.768kHZ如图2所示。RTC_PRL为预分频系数,可自己设置。TR_CLK是经过预分频之后的时钟,比如RTCCLK=32768HZ,RTC_PRL=(32767+1),则TR_CLK为每秒1HZ。RTC_DIV为余数分频器,是为了时钟更加精确。RTC_ALR是闹钟寄存器,可自己设计时间,当RTC_CNT=RTC_ALR时并且设置了中断,则会进入中断。
3、RTC 模块和时钟配置系统是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变。因此在使用RTC模块是必须先对其进行时钟使能:RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE)
4、如图3所示,在寄存器进行配置时必须要注意一些情况,如:
①修改CRH/CRL寄存器,必须先判断RSF位,确定已经同步。
利用库函数RTC_WaitForSynchro()进行配置
②修改CNT,ALR,PRL的时候,必须先配置CNF位进入配置模式,修改完之后,设置CNF位为0退出配置模式