带你了解STM32:RTC实时时钟(第一部分)
目录
0.RTC分为三部分讲解
1.Unix时间戳
这样设计的好处:
时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量
世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间
2.UTC/GMT
3.时间戳转换
4.时间戳转换
0.RTC分为三部分讲解
第一部分:时间戳,学习RTC时钟前必要的知识点
第二部分:BKP和RTC外设的结构
第三部分:代码实现现象
1.Unix时间戳
Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒
这样设计的好处:
1.简化硬件电路,设计RTC硬件电路的时候,直接用一个很大的秒寄存器就可以了,不需要考虑,年月日寄存器、进位、大月小月等等这些
2.进行一些时间间隔的计算时,非常方便,比如1月1号6点到3月1号9点,直接用秒相减就好了,其他的月、日、小时、分钟都不用考虑
3.储存方便,给一个比较大的变量即可,如果储存年月日就要很多变量了,但也有不好的,占用软件资源
时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量
有符号32位最大的数是2^32/2-1,在2038年的1月19号溢出,到了那个时候32位有符号的储存时间戳的设备就会出错,但是,目前手机电脑都是64位时间戳的设备,基本不用担心。这款STM32单片机的RTC时钟是无符号32位,最大数为2^32-1,到2106年才会溢出
世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间
将穿过英国伦敦的经线(本初子午线)的1970-1-1,时间戳记为0秒,是一个时间标准,然后,以本初子午线划分24个时区,每偏差一个时区,时间就加或减一个小时
一个时间轴,从时间戳0开始一直计时,储存在一个永不进位的秒计时器里面,然后,将通过一系列复杂的计算(C语言官方设计的time函数已经完成了这些计算)得到伦敦时间,然后,以此得到各地的时间
2.UTC/GMT
GMT(Greenwich Mean Time)格林尼治(地名,位于英国伦敦)标准时间是一种以地球自转为基础的时间计量系统。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准,但因为地球越转越慢,这个计时方法就会出现弊端,1秒就不是一个常量了
UTC(Universal Time Coordinated)协调世界时是一种以原子钟为基础的时间计量系统,这种计时方法,上千万年才会误差1秒,所以1秒就成为了一个常量。它规定铯133原子基态的两个超精细能级间在零磁场下跃迁辐射9,192,631,770周所持续的时间为1秒。当原子钟计时一天的时间与地球自转一周的时间相差超过0.9秒时,UTC会执行闰秒(计时系统多走1秒,也就是一分钟61秒,但显示是一分钟60秒)来保证其计时与地球自转的协调一致
3.时间戳转换
C语言的time.h模块提供了时间获取和时间戳转换的相关函数,可以方便地进行秒计数器、日期时间和字符串之间的转换