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

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

[复制链接]
冯兆亮 提问时间: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晶振不起振,就会出现这个问题。
冯兆亮 回答时间: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晶振起振
冯兆亮 回答时间:2017-7-9 16:42:57
wenyangzeng 发表于 2017-7-9 14:02
单步跟踪看是否死在等待LSE晶振起振

单步跟踪每次都能过,不死。
冯兆亮 回答时间: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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版