liangliangwa 发表于 2017-7-8 16:56:07

初始化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();
    }
}

zhao.zhao 发表于 2017-7-8 17:37:06

在死的那句while()的前面加个延迟函数,时间要长些,1秒左右就会好了。

wenyangzeng 发表于 2017-7-8 18:00:38

只要32768晶振不起振,就会出现这个问题。

liangliangwa 发表于 2017-7-9 09:04:17

wenyangzeng 发表于 2017-7-8 18:00
只要32768晶振不起振,就会出现这个问题。

32768上电起振不稳定?

wenyangzeng 发表于 2017-7-9 14:02:45

liangliangwa 发表于 2017-7-9 09:04
32768上电起振不稳定?

单步跟踪看是否死在等待LSE晶振起振

liangliangwa 发表于 2017-7-9 16:42:57

wenyangzeng 发表于 2017-7-9 14:02
单步跟踪看是否死在等待LSE晶振起振

单步跟踪每次都能过,不死。

liangliangwa 发表于 2017-7-9 16:43:58

zhao.zhao 发表于 2017-7-8 17:37
在死的那句while()的前面加个延迟函数,时间要长些,1秒左右就会好了。

谢谢,我试下先~~

alisa123 发表于 2017-7-10 13:20:04

从你的程序中来看,你用的是LSE始终,你可以看看你的LSE始终什么时候才能上电稳定!
页: [1]
查看完整版本: 初始化RTC,会进入HardFault_Handler()函数