STM32学习日志——RTC实时时钟

发布时间:
来源: 电子工程世界

以前刚买手机时,有一个困惑,为什么时钟拔掉电池后时间就暂停了,而手机拔掉电池后,时间照样在走,为了证明是否是联网的原因,将网络关掉后还是一样。后来学了单片机才明白系统有一个实时时钟,由一个小纽扣电池供电。手机应该也是类似的原因。

首先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显示实时时间,并有闹钟功能的一个电子设计。以后学更多的知识后再往里面加闹铃歌曲,每天都不一样,这样起床不会那么艰难了,汗。


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。