你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

初始化RTC,会进入HardFault_Handler()函数

[复制链接]
liangliangwa 提问时间:2017-7-8 16:56 /
我的程序是这样子的,要是打断点,单步就能过,正常跑就死在了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();
    }
}
收藏 评论7 发布时间:2017-7-8 16:56

举报

7个回答
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始终什么时候才能上电稳定!

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版