F4 的 RTC ,当修改了时,分,秒 中的任意一个 然后马上读取时间和日期是正确的,但是当修改了 年,月,日中的任意一个 然后马上读取时间和日期就不对了

2019-07-21 02:22发布

原来使用的是F103ZET6  修改时间和日期  都能正确的读取和显示,现在公司的升级 使用F407ZGT6  修改时,分,秒 中的任意的一个或者几个  然后马上读取能够正确的显示  时间和日期,但是当我修改了年,月,日中的任意一个或者几个  然后马上读取时   第一次读取的时间和日期  是修改之前的日期  但是如果同时修改了时,分,秒  ,时分秒 又是修改之后的时分秒。

比如修改之前:2015-07-20   08:17:30

如果只修改时分秒中的一个比如改为:2015-07-20  08:17:00    然后马上读取   时间和日期都是对的。

如果修改了日期中的任何一个或者几个同时也修改了 时间中的一个或者几个 比如改为: 2015-08-21  08:16:20    然后马上读取  第一次读取时 读出来的是:

2015-07-20  08:16:20   其中日期和修改之前的是一样的  但是时间又和修改之后是一样的    ,但是如果再读取日期和时间  ,他们又都是对的。
F4  RTC  的初始化就是使用原子的RTC 的初始化。

[mw_shl_code=c,true]void RTC_SET_TIME(void) //设置时间和日期的函数 { RTC_TimeTypeDef RTC_TimeStruct_temp; RTC_DateTypeDef RTC_DateStruct_temp; if(receive_data_end==1) //接收数据结束 { receive_data_end=0; RTC_DateStruct_temp.RTC_Year=USART6_RX_BUF[0]; RTC_DateStruct_temp.RTC_Month=USART6_RX_BUF[1]; RTC_DateStruct_temp.RTC_Date=USART6_RX_BUF[2]; RTC_TimeStruct_temp.RTC_Hours=USART6_RX_BUF[3]; RTC_TimeStruct_temp.RTC_Minutes=USART6_RX_BUF[4]; RTC_TimeStruct_temp.RTC_Seconds=USART6_RX_BUF[5]; year_temp=RTC_DateStruct_temp.RTC_Year+2000; month_temp=RTC_DateStruct_temp.RTC_Month; date_temp=RTC_DateStruct_temp.RTC_Date; week_day=RTC_Get_Week(year_temp,month_temp,date_temp); //计算出星期几 if(RTC_TimeStruct_temp.RTC_Hours>12) { RTC_Set_Time(RTC_TimeStruct_temp.RTC_Hours,RTC_TimeStruct_temp.RTC_Minutes,RTC_TimeStruct_temp.RTC_Seconds,RTC_H12_PM); RTC_Set_Date(RTC_DateStruct_temp.RTC_Year,RTC_DateStruct_temp.RTC_Month,RTC_DateStruct_temp.RTC_Date,week_day); } else { RTC_Set_Time(RTC_TimeStruct_temp.RTC_Hours,RTC_TimeStruct_temp.RTC_Minutes,RTC_TimeStruct_temp.RTC_Seconds,RTC_H12_AM); RTC_Set_Date(RTC_DateStruct_temp.RTC_Year,RTC_DateStruct_temp.RTC_Month,RTC_DateStruct_temp.RTC_Date,week_day); } } } void usart6_send_data(void) //发送时间和日期的函数 { RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct); RTC_GetDate(RTC_Format_BIN,&RTC_DateStruct); memset(USART6_TX_BUF,0,sizeof(USART6_TX_BUF)); USART6_TX_BUF[0]=0x5a; USART6_TX_BUF[1]=0xa5; USART6_TX_BUF[2]=RTC_DateStruct.RTC_Year; USART6_TX_BUF[3]=RTC_DateStruct.RTC_Month; USART6_TX_BUF[4]=RTC_DateStruct.RTC_Date; USART6_TX_BUF[5]=RTC_TimeStruct.RTC_Hours; USART6_TX_BUF[6]=RTC_TimeStruct.RTC_Minutes; USART6_TX_BUF[7]=RTC_TimeStruct.RTC_Seconds; usart6_send_data(USART6_TX_BUF,8); memset(USART6_TX_BUF,0,sizeof(USART6_TX_BUF)); }[/mw_shl_code] 真心不太明白  ,  求各路大神指教,谢谢!!!!!!




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。