打印
[STM32F4]

关于RTC时间和日历的问题

[复制链接]
4179|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
njpanyi|  楼主 | 2015-8-7 10:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我正在做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);        }
沙发
njpanyi|  楼主 | 2015-8-7 11:04 | 只看该作者
哎呀我知道了,是我main里有一个delay对它有影响了

使用特权

评论回复
板凳
进击的ic| | 2015-8-7 13:21 | 只看该作者
呵呵,多实践总是好的

使用特权

评论回复
地板
mmuuss586| | 2015-8-7 13:22 | 只看该作者

解决了就好;

使用特权

评论回复
5
njpanyi|  楼主 | 2015-8-9 07:00 | 只看该作者
进击的ic 发表于 2015-8-7 13:21
呵呵,多实践总是好的

谢谢回复~

使用特权

评论回复
6
njpanyi|  楼主 | 2015-8-9 07:00 | 只看该作者

谢谢回复~

使用特权

评论回复
7
豆腐块| | 2015-8-9 10:04 | 只看该作者
main里有一个delay对它有影响了,可以详细说一下吗

使用特权

评论回复
8
njpanyi|  楼主 | 2015-8-23 00:29 | 只看该作者
豆腐块 发表于 2015-8-9 10:04
main里有一个delay对它有影响了,可以详细说一下吗

就是我delay100毫秒才获取时间然后显示,然后这样几次之后delay到一秒了显示就看起来像跳了一秒,我觉得好像是这样,我后来改了10毫秒就好了

使用特权

评论回复
9
米尔豪斯| | 2015-8-23 15:41 | 只看该作者
几次之后delay到一秒了显示就看起来像跳了一秒,是的

使用特权

评论回复
10
好风四季| | 2018-11-17 10:26 | 只看该作者
不是很明白,delay也不会影响到RTC的运行,就像我看手表,我1s内看10次手表,不可能51s直接跳到53s呀,至少也得有9次52s呀。而且我的跳秒比你的还严重,延时500ms,会跳1~10s。

使用特权

评论回复
11
handlike| | 2018-11-17 16:44 | 只看该作者
读取RTC和显示LCD的函数没有及时刷新或执行,这不是大问题把更重要的事情及时处理了是关键,没有更要的事情刷新执行的频率提高些都解决了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝