各位同行:
小弟是一菜鸟,最近买了一款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循环内部(见蓝色部分),成功了。另外,经过实验发现,与读取顺序没有关系,只要成对出现就可以。不知道我的结论是不是正确,请各位高手指点,谢谢。 |