初始化RTC,会进入HardFault_Handler()函数
我的程序是这样子的,要是打断点,单步就能过,正常跑就死在了while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);从而就进入了HardFault_Handler()函数,这是怎么回事?/*RTC init*/
void rtc_config(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)
{
BKP_DeInit();
RCC_LSEConfig(RCC_LSE_ON);
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);//就会死在这一步,从而进入HardFault_Handler()函数
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForLastTask();
RTC_WaitForSynchro();
RTC_WaitForLastTask();
RTC_ITConfig(RTC_IT_ALR, ENABLE);
RTC_WaitForLastTask();
RTC_EnterConfigMode();
RTC_SetPrescaler(32767);
RTC_ExitConfigMode();
BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
}
else
{
RTC_WaitForSynchro();
RTC_ITConfig(RTC_IT_ALR, ENABLE);
RTC_WaitForLastTask();
}
}
在死的那句while()的前面加个延迟函数,时间要长些,1秒左右就会好了。 只要32768晶振不起振,就会出现这个问题。 wenyangzeng 发表于 2017-7-8 18:00
只要32768晶振不起振,就会出现这个问题。
32768上电起振不稳定? liangliangwa 发表于 2017-7-9 09:04
32768上电起振不稳定?
单步跟踪看是否死在等待LSE晶振起振 wenyangzeng 发表于 2017-7-9 14:02
单步跟踪看是否死在等待LSE晶振起振
单步跟踪每次都能过,不死。 zhao.zhao 发表于 2017-7-8 17:37
在死的那句while()的前面加个延迟函数,时间要长些,1秒左右就会好了。
谢谢,我试下先~~ 从你的程序中来看,你用的是LSE始终,你可以看看你的LSE始终什么时候才能上电稳定!
页:
[1]