学习STM32的RTC功能 一定要看这个

RTC即Real_Time Clock,是实时时钟的简称,说白了就是“日历和时钟”的功能。

这个功能在STM32中是怎么实现的?

以STM32F1系列芯片为例,这个芯片中并有专门的实现实时时钟功能的外设,比如DS1307之类的功能。在RTC这块,STM32提供的主要功能就是一个32位的计数器,同时通过配置相关寄存器,可以产生秒脉冲,并且可以掉电工作。这为实现实时时钟,提供了技术平台。

为什么这么说?先说说时间是怎么回事。

现实生活中的时间从某种意义上说,就是数秒,数到了60,就是1分钟,再数到60,就是1小时,1小时数到24就是1天…..如此延续就有了时间的概念。而且时间是个相对的概念,它是针对逝去的时间而言。假如没有一个时间的起点,也就无所谓当前时间了。理清了这些,就可以在这个技术平台上实现实时时钟的功能了。

首先定义一个时间的起点,比如2000年1月1日,0点0分0秒。这里要多说一句,其实这个起点可以随便定义,0也没关系。但网络上通常的做法是1970年的1月1日,至于为什么,可以了解时间戳的概念。

有了这个起点,就可以算出这个点到当前时间一共过去了多少秒,把这个值作为初值,写入32位的计数器,并且启动计数,时间就得以记录了,计数器的当前值,就是当前时间,惊不惊喜?意不意外?

关键来了,现在时间是有了,比如现在计数器的值是55,我们认为是0点0分55秒,可年、月、日咋办?到底是哪年哪月哪天呢?

其实STM32并没有专门的记录分钟、小时、日、月、年的寄存器,换句话说,他只是记录了从时间起点(计数器的初值)到当前时间的总秒数,并且能在掉电情况下持续计数运行。要想得到年、月、日信息,是需要我们自己写函数实现的。这里总感觉STM32干得有猛,很粗鲁的样子,上电的时候直接给年、月、日的变量赋值,想要哪年哪月哪日,就直接赋值,然后在这个基础上累加时间,并不断更新,这样就确定了年、月、日的信息。

但别忘了,这是在CPU上电程序运行的情况下进行的,一旦CPU掉电,程序也不再运行,年、月、日信息就不再更新。此时在工作的,只有那个32位的秒计数器。

要想再次上电后正确显示年、月、日等信息,就需要上电后重新调用自己写的这个函数,根据初始化时的年、月、日初值和计数器的当前值,输出当前时间信息。

因此说,STM32的RTC功能,只是提供了实现这个功能的技术平台,获取准确的时间信息,还需要自己编程实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值