原来使用的是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]
真心不太明白 , 求各路大神指教,谢谢!!!!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>