先贴上中断部分的程序: void RTC_IRQHandler(void) { vu32 Time_temp; if (RTC_GetITStatus(RTC_IT_SEC) != RESET) { /* Clear the RTC Second interrupt */ RTC_ClearITPendingBit(RTC_IT_SEC);
/* Enable time update */ TimeDisplay = 1;
/* Wait until last write operation on RTC registers has finished */ RTC_WaitForLastTask(); /* Reset RTC Counter when Time is 23:59:59 */ Time_temp=RTC_GetCounter(); if (Time_temp >= 0x00015180) //这部分原来是判断计数器是否等于0x00015180(即86400),如果等于的话,将计数器清零,现在这个是我改的 { Time_temp=Time_temp%0x00015180; RTC_SetCounter(Time_temp); /* Wait until last write operation on RTC registers has finished */ RTC_WaitForLastTask(); } } }
情况是这样的,我在主程序里将时间设置好以后,板子超过一天没上电,再上电时显示40:00:10,我就把中断函数改了下,计算计数器的值除以0x00015180的余数,将余数写回计数器,达到自动修正时间的目的,但是改完后,再次上电就发现程序卡在RTC_WaitForLastTask()这个函数里了,也就是这句while ((RTC->CRL & RTC_FLAG_RTOFF) == (u16)RESET)。 不知道咋会卡到这儿,计数器还在一直计数 |