龙空技术网

STM32的RTC功能是怎么实现的

玉帝&哥哥 187

前言:

当前同学们对“在rtc中实现这个时间算法”都比较看重,姐妹们都需要分析一些“在rtc中实现这个时间算法”的相关文章。那么小编也在网络上网罗了一些有关“在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功能,只是提供了实现这个功能的技术平台,获取准确的时间信息,还需要自己编程实现。

开始写程序,年、月、日信息总是不对,就是因为没搞清楚这个。现在终于明白了。

n

标签: #在rtc中实现这个时间算法