钻石会员
主题
帖子
积分15934
阅读权限50
注册时间2012-10-25
最后登录1970-1-1
在线时间 小时
|
很多朋友在处理STM32的RTC实时时间时遇到很大的困难,首先这个是秒计数器,网上很多人把这个类似计数器进行对3600取整得到小时方法虽然可以得到小时分钟和日,但是这个方法不但效率低,闰年闰月还不好处理。事实上,最近研究3264万年历的时候也遇到了这个头痛的问题。经过本人苦苦研究发现:keil已经帮我们完成这个问题!keil里面有个头文件,叫time.h,专门针对32位计数器处理时间,设置时间,而且这个头文件还支持两个地方的时间差计算,自动计算出星期等功能,能够支持从1970年到2108年的时间!更有趣的是,该文件还支持把计数器的值直接打印成字符串输出,下面是本人把这个功能直接打印在液晶屏的结果:
在该头文件里面定义了一个结构体:tm,该结构体声明了秒、时、分、日期、月份、年份、该年的天数等变量,而在文件中声明了一个函数:
extern _ARMABI struct tm *localtime(const time_t * /*timer*/) __attribute__((__nonnull__(1)));
这个函数的作用就是输入一个32位计算值,输出一个结构体时间信息,跟这个相反的函数:
extern _ARMABI time_t mktime(struct tm * /*timeptr*/) __attribute__((__nonnull__(1)));
就是输入一个结构体时间信息,输出一个32位计数值,把这个计算值填入STM32的RTC计数器就可以设置时间日期了。另外在里面还有一个函数:
extern _ARMABI unsigned char *asctime(const struct tm * /*timeptr*/) __attribute__((__nonnull__(1)));
这个就是本文开头的功能了!
|
|