STM32 的RTC模块中有需要将无符号的32位整形数字转化为包含年,月,日,时,分,秒的结构体或者其余表达形式的信号,在纠结了好久之后,勉强第一次实现了功能,现在贴上代码
PS: 因为KEIL调试不够方便,将代码移植到WINDOWS里面调试成功,目前还未移植到STM32中。
#include
typedef unsigned char INT8U;
typedef unsigned short int INT16U;
typedef unsigned int INT32U;
/* rtc.h
*/
#ifndef __RTC_H__
#define __RTC_H__
#define SECDAY 86400UL
#define YEAR_START 1970 //系统第一天为1970年1月1日
#define FIRST_WEEK 6 //1970年1月1日为星期四 2000年1月1日为星期六
#define YEAR_TOTAL 130 //只支持100年的数据
//定义结构体记录从RTC模块读取出的数据
typedef struct rtc_time{ //没有加入溢出检查模块,请自行防止数字溢出
INT8U tm_sec; //0-59
INT8U tm_min; //0-59
INT8U tm_hour; //0-23
INT8U tm_day; //1-31
INT8U tm_week; //1-7
INT8U tm_mon; //1-12
INT8U tm_year; //0- YEARTOTAL-1
} RTC_S;
void to_tm(INT32U tim,RTC_S* tm); //将32位数字转换为结构体
void from_tm(RTC_S* tm,INT32U* tim); //从tm中读取内容记录到tim中
void quick_init(void); //快速初始化,其实功能是加快后续运算,空间换时间
#endif
/* rtc.c
事实时钟模块
*/
//#include "includes.h"
#define ISLEEP(YEAR) (((YEAR)%4 =&