APOLLO F429之RTC日历输出实验时间不变的问题

2019-07-20 08:19发布

各位同行:
      小弟是一菜鸟,最近买了一款APOLLO F429,在做RTC日历输出实验时,遇到一个问题,那就是时间不能更新显示,在调试模式下跟踪,发现取得的时间没有变,代码粘贴如下:
int main(void)
{  
RTC_TimeTypeDef rtcTimeCurr;
RTC_DateTypeDef rtcDateCurr;

char l_chArrayPresent[100];
     
    HAL_Init();                     //初始化HAL库
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
delay_init(180);//初始化delay(systick版本的)

//uart_init(115200,USART1);
SDRAM_Init();
LCD_Init();

POINT_COLOR=RED;
LCD_ShowString(10,40,260,32,32,"Apollo STM32F429");

Mine_RTC_Init();
//HAL_RTC_GetDate(&rtc_Handle1,&rtcDateCurr,RTC_FORMAT_BIN);//注意:这一句逻辑上是有问题的,做日历、电子钟肯定要日期时间成对读,但碰巧发现了这个问题
  
while(1)
{  
  HAL_RTC_GetDate(&rtc_Handle1,&rtcDateCurr,RTC_FORMAT_BIN);
  memset(l_chArrayPresent,0,sizeof(l_chArrayPresent));
  sprintf(l_chArrayPresent,"20%02u/%02u/%02u",rtcDateCurr.Year,rtcDateCurr.Month,rtcDateCurr.Date);
  LCD_ShowString(10,80,260,32,32,(unsigned char *)l_chArrayPresent);
  
  memset(l_chArrayPresent,0,sizeof(l_chArrayPresent));
  sprintf(l_chArrayPresent,"WeekDay:%u",rtcDateCurr.WeekDay);
  LCD_ShowString(10,120,260,32,32,(unsigned char *)l_chArrayPresent);
  
  HAL_RTC_GetTime(&rtc_Handle1, &rtcTimeCurr,RTC_FORMAT_BIN);  
  memset(l_chArrayPresent,0,sizeof(l_chArrayPresent));
  sprintf(l_chArrayPresent,"%02u:%02u:%02u",rtcTimeCurr.Hours,rtcTimeCurr.Minutes,rtcTimeCurr.Seconds);
  LCD_ShowString(10,160,260,32,32,(unsigned char *)l_chArrayPresent);   
  
  delay_ms(1000);  
}
}
       当时,我在while循环之前,读取日期(见红字部分),在while循环内部读时间,发现屏幕上显示的时间不变。重新启动arm机时间改变,查了咱论坛上的一个帖子,说是读取顺序(应按照一定顺序读取日期和时间)的问题。给了我提示,试了几下,将while循环之前读取日期(见红字部分)语句注释掉,移动到while循环内部(见蓝 {MOD}部分),成功了。另外,经过实验发现,与读取顺序没有关系,只要成对出现就可以。不知道我的结论是不是正确,请各位高手指点,谢谢。



0条回答

一周热门 更多>