我正在做RTC时钟显示在LCD上的程序,但是问题是每个几秒就会跳一秒,比如说11:11:51然后可能就直接跳到53了这样,大概是4秒左右会跳一下吧~我也不知道是什么问题,感觉配置也是按照一般的来的。
程序在下面麻烦各位大神指导指导,不太懂呢~谢谢哈
配置:
void RTC_Config(void)
{ __IO uint32_t AsynchPrediv = 0, SynchPrediv = 0;
RTC_InitTypeDef RTC_InitStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForSynchro();
if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x5050)
{
RTC_WriteProtectionCmd(DISABLE);
RTC_EnterInitMode();
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv; //也用过0x7D-1
RTC_InitStructure.RTC_SynchPrediv = SynchPrediv; //0XFF-1
RTC_Init(&RTC_InitStructure);
RTC_TimeStructure.RTC_Seconds = 0x00;
RTC_TimeStructure.RTC_Minutes = 0x01;
RTC_TimeStructure.RTC_Hours = 0x11;
//RTC_TimeStructure.RTC_H12 = RTC_H12_AM;
RTC_SetTime(RTC_Format_BIN,&RTC_TimeStructure);
RTC_DateStructure.RTC_Date = 30;
RTC_DateStructure.RTC_Month = 5;
//RTC_DateStructure.RTC_WeekDay= RTC_Weekday_Thursday;
RTC_DateStructure.RTC_Year = 12;
RTC_SetDate(RTC_Format_BIN,&RTC_DateStructure);
RTC_ExitInitMode();
RTC_WriteBackupRegister(RTC_BKP_DR0,0x5050);
RTC_WriteProtectionCmd(ENABLE);
RTC_WriteBackupRegister(RTC_BKP_DR0,0x5050);
}
PWR_BackupAccessCmd(DISABLE);
}
显示的话是下面这个程序,LCD已经在main里写好了,所以这边没写了。
void Get_TD(void){
RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
LCD_ClearLine(LINE(7));
LCD_ClearLine(LINE(8));
LCD_ClearLine(LINE(9));
RTC_GetTime(RTC_Format_BIN,&RTC_TimeStructure);
sprintf((char*)tbuf,"Time:%02d:%02d:%02d",
RTC_TimeStructure.RTC_Hours,
RTC_TimeStructure.RTC_Minutes,
RTC_TimeStructure.RTC_Seconds);
LCD_DisplayStringLine(LINE(7),tbuf);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
sprintf((char*)tbuf,"Date:20%02d/%02d/%02d",
RTC_DateStructure.RTC_Year,
RTC_DateStructure.RTC_Month,
RTC_DateStructure.RTC_Date);
LCD_DisplayStringLine(LINE(8),tbuf); } |