FX1N/FX1S1N2N学习板底层源码/main/RTC_Time.c

178 lines
6.2 KiB
C
Raw Permalink Normal View History

2018-11-13 23:08:12 +08:00
/*******************************************************************************
* <EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʵ<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD>RTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յĶ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ANSI-C<EFBFBD><EFBFBD>time.h<EFBFBD><EFBFBD>
*
* <EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>jjldc <EFBFBD><EFBFBD><EFBFBD>žţ<EFBFBD>
* QQ: 77058617
*
* RTC<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UNIXʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>32bit<EFBFBD><EFBFBD>time_t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵΪu32<EFBFBD><EFBFBD>
*
* ANSI-C<EFBFBD>ı<EFBFBD>׼<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ʾʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ͣ<EFBFBD>
* time_t: UNIXʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1970-1-1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ijʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* typedef unsigned int time_t;
*
* struct tm: Calendar<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* tm<EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
* struct tm {
* int tm_sec; // <20><> seconds after the minute, 0 to 60
* (0 - 60 allows for the occasional leap second)
* int tm_min; // <20><> minutes after the hour, 0 to 59
* int tm_hour; // ʱ hours since midnight, 0 to 23
* int tm_mday; // <20><> day of the month, 1 to 31
* int tm_mon; // <20><> months since January, 0 to 11
* int tm_year; // <20><> years since 1900
* int tm_wday; // <20><><EFBFBD><EFBFBD> days since Sunday, 0 to 6
* int tm_yday; // <20><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> days since January 1, 0 to 365
* int tm_isdst; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Daylight Savings Time flag
* ...
* }
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>wday<EFBFBD><EFBFBD>yday<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӷ<EFBFBD>ȡ
* mon<EFBFBD><EFBFBD>ȡֵΪ0-11
* ***ע<EFBFBD><EFBFBD>***<EFBFBD><EFBFBD>
* tm_year:<EFBFBD><EFBFBD>time.h<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>Ϊ1900<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>2008<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ʾΪ2008-1900=108
* <EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>Ѻã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>нϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>tm<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>tm_year<EFBFBD><EFBFBD>Ϊ2008
* ע<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD>time.c<EFBFBD>еĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD>tm_year-=1900
*
* <EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* struct tm Time_ConvUnixToCalendar(time_t t);
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Unixʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>time_t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Calendar<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* time_t Time_ConvCalendarToUnix(struct tm t);
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Calendar<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Unixʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>time_t<EFBFBD><EFBFBD>
* time_t Time_GetUnixTime(void);
* <EFBFBD><EFBFBD>RTCȡ<EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Unixʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* struct tm Time_GetCalendarTime(void);
* <EFBFBD><EFBFBD>RTCȡ<EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
* void Time_SetUnixTime(time_t);
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>UNIXʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ǰRTCʱ<EFBFBD><EFBFBD>
* void Time_SetCalendarTime(struct tm t);
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Calendar<EFBFBD><EFBFBD>ʽʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ǰRTCʱ<EFBFBD><EFBFBD>
*
* <EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Calendar<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* struct tm now;
* now.tm_year = 2008;
* now.tm_mon = 11; //12<31><32>
* now.tm_mday = 20;
* now.tm_hour = 20;
* now.tm_min = 12;
* now.tm_sec = 30;
*
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>
* tm_now = Time_GetCalendarTime();
* Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӷ<EFBFBD>tm_now.tm_wday<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>
* Step1. tm_now.xxx = xxxxxxxxx;
* Step2. Time_SetCalendarTime(tm_now);
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>
* struct tm t1,t2;
* t1_t = Time_ConvCalendarToUnix(t1);
* t2_t = Time_ConvCalendarToUnix(t2);
* dt = t1_t - t2_t;
* dt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* dt_tm = mktime(dt); //ע<><D7A2>dt<64><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD>䣬ansi<73><69><EFBFBD>к<EFBFBD><D0BA><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ע<EFBFBD><EFBFBD><E2B3AC>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բο<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ansi-c<EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȹ<EFBFBD><EFBFBD>ܣ<EFBFBD>ctime<EFBFBD><EFBFBD>strftime<EFBFBD><EFBFBD>
*
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"
#include "RTC_Time.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void Time_Set(u32 t);
/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name : Time_ConvUnixToCalendar(time_t t)
* Description : ת<EFBFBD><EFBFBD>UNIXʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
* Input : u32 t <EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UNIXʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Output : None
* Return : struct tm
*******************************************************************************/
struct tm Time_ConvUnixToCalendar(time_t t)
{
struct tm *t_tm;
t_tm = localtime(&t);
t_tm->tm_year += 1900; //localtimeת<65><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tm_year<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ҫת<D2AA>ɾ<EFBFBD><C9BE><EFBFBD>ֵ
return *t_tm;
}
/*******************************************************************************
* Function Name : Time_ConvCalendarToUnix(struct tm t)
* Description : д<EFBFBD><EFBFBD>RTCʱ<EFBFBD>ӵ<EFBFBD>ǰʱ<EFBFBD><EFBFBD>
* Input : struct tm t
* Output : None
* Return : time_t
*******************************************************************************/
time_t Time_ConvCalendarToUnix(struct tm t)
{
t.tm_year -= 1900; //<2F>ⲿtm<74><EFBFBD><E1B9B9><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2008<30><38>ʽ
//<2F><>time.h<>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽΪ1900<30>ʼ<EABFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ʱҪ<CAB1><D2AA><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD>
return mktime(&t);
}
/*******************************************************************************
* Function Name : Time_GetUnixTime()
* Description : <EFBFBD><EFBFBD>RTCȡ<EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Unixʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* Input : None
* Output : None
* Return : time_t t
*******************************************************************************/
time_t Time_GetUnixTime(void)
{
return (time_t)RTC_GetCounter();
}
/*******************************************************************************
* Function Name : Time_GetCalendarTime()
* Description : <EFBFBD><EFBFBD>RTCȡ<EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>struct tm<EFBFBD><EFBFBD>
* Input : None
* Output : None
* Return : time_t t
*******************************************************************************/
struct tm Time_GetCalendarTime(void)
{
time_t t_t;
struct tm t_tm;
t_t = (time_t)RTC_GetCounter();
t_tm = Time_ConvUnixToCalendar(t_t);
return t_tm;
}
/*******************************************************************************
* Function Name : Time_SetUnixTime()
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Unixʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>RTC
* Input : time_t t
* Output : None
* Return : None
*******************************************************************************/
void Time_SetUnixTime(time_t t)
{
RTC_WaitForLastTask();
RTC_SetCounter((u32)t);
RTC_WaitForLastTask();
return;
}
/*******************************************************************************
* Function Name : Time_SetCalendarTime()
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Calendar<EFBFBD><EFBFBD>ʽʱ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UNIXʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>RTC
* Input : struct tm t
* Output : None
* Return : None
*******************************************************************************/
void Time_SetCalendarTime(struct tm t)
{
Time_SetUnixTime(Time_ConvCalendarToUnix(t));
return;
}