以前刚买手机时,有一个困惑,为什么时钟拔掉电池后时间就暂停了,而手机拔掉电池后,时间照样在走,为了证明是否是联网的原因,将网络关掉后还是一样。后来学了单片机才明白系统有一个实时时钟,由一个小纽扣电池供电。手机应该也是类似的原因。
首先RTC的时钟源由RCC_BDCR的RTCSEL位控制,一般选择LSE振荡器,接着通过RTCPRL位将其分频,假设LSE为32.768kHZ,则PRL写入32767可得到周期为1秒的信号。而RTC_DIV是一个递减的计数器,用PRL的数据装载,每次归零后重新装载,通过读取DIV的当前值,可以获得更精确的时间,比如DIV的当前值为3276,说明还有(3276/32767=0.1s)完成一个周期,说明这个周期过了0.9s。
RTC_CNT是一个32位的寄存器,每当TR_CLK一个周期后,CNT加一,按照上面的配置,则是每1s加一,一个CNT值其实就是对应一个时间。RTC有3个中断,秒中断,溢出中断,闹钟中断。秒中断比较常用,其实是一个PRL溢出一次,这个周期通常为1s。溢出中断是指CNT溢出,为2的32次方,假如是每1sCNT加一的话,大约是136年溢出一次。闹钟中断是指往该寄存器存放一个数,当它与CNT的当前值一样时触发中断。
明天想做一个OLED显示实时时间,并有闹钟功能的一个电子设计。以后学更多的知识后再往里面加闹铃歌曲,每天都不一样,这样起床不会那么艰难了,汗。