注:因网上有现成的RTC获取系统时间函数,大多数初学者也都是照搬大佬已经编辑好的函数,并未明了其底层工作原理,故此文章仅供那些尚不清楚RTC获取系统时间底层原理的朋友进行阅读。
常见的获取系统当前时间函数通常是人为编辑的(可显示出年月日时分秒星期数)。而要知道stm32的RTC时钟并不像ds1302那样采用年月日时分秒分组寄存器,只是一个32位计数器,那获取系统当前时间又是怎样实现的呢?
要知道在已经编辑好的获取时间函数中基本都会调用固件函数库中的RTC_GetCounter函数,
代码如下:(源自stm32f10x.c)
查阅手册可知该函数实现功能如下图:
回到刚才的源代码中,不难发现,函数中读取的其实是RTC->CNTL的值,
查阅手册:
其实就是系统时间,再通过一系列操作即可得到年月日时分秒的时间表示。(纯数学问题)
相反的,了解此原理后你也可以从0开始自己编写一个获得当前年月日时分秒的函数,只是需要一系列繁琐的数学计算罢了。