博士
最后登录1970-1-1
在线时间 小时
注册时间2015-10-31
|
楼主 |
发表于 2016-8-24 16:05:12
|
显示全部楼层
本帖最后由 CSWZH8 于 2016-8-24 16:10 编辑
网络接收一个对时字符串TIME:2016Y08M05D06H09M33S,存放在DATA数组中,然后用下面自己写的函数做处理,里面调用的都是野火的RTC程序中的函数
void Time_Adjust_NET(char* DATA,struct rtc_time *SYSTM)
{
char TIME_RTC[26];
//u32 T_YEAR,T_MONTH,T_DAY,T_HOUR,T_MIN,T_SEC;
memcpy(TIME_RTC,DATA,26);
SYSTM->tm_year=ascTnum2(TIME_RTC[7],TIME_RTC[8])+2000;
SYSTM->tm_mon=ascTnum2(TIME_RTC[10],TIME_RTC[11]);
SYSTM->tm_mday=ascTnum2(TIME_RTC[13],TIME_RTC[14]);
SYSTM->tm_hour=ascTnum2(TIME_RTC[16],TIME_RTC[17]);
SYSTM->tm_min=ascTnum2(TIME_RTC[19],TIME_RTC[20]);
SYSTM->tm_sec=ascTnum2(TIME_RTC[22],TIME_RTC[23]);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
GregorianDay(SYSTM);
RTC_WaitForLastTask();
RTC_SetCounter(mktimev(SYSTM));
RTC_WaitForLastTask();
BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
PWR_BackupAccessCmd(DISABLE);//3y ÄüPWR_CRμÄDBPλ
printf("网络对时成功 \n");
Time_Display( RTC_GetCounter(),&systmtime);
}
u32 ascTnum2(unsigned char GAO,unsigned char DI)//把两个字符转换为数字
{
u32 NUM;
if(GAO>=48&&GAO<=57&&DI>=48&&DI<=57)
{
NUM=(GAO-48)*10+(DI-48);
return NUM;
}
else
return 0;
}
|
|