一个IAP程序 下载完程序后软件复位后 卡死在hardfault_handler

2019-08-14 01:58发布

主芯片用的是stm32l15系列
在0x08000000-0x08004000放了一段IAP程序
0x08004000之后放的是主程序。

直接用Keil下载两段程序后可以正常跳转到主程序运行。运行IAP模式, 更新主程序后复位再次跳转到主程序是卡死在第一段程序的hardfault_handler。

 修改了第一段程序的 HardFault_Handler函数
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
//   while (1)
//   {
 // }
wait();
}
__asm void wait()
{
BX lr
}
 
发现是运行到0x080043F8后跳转到HardFault_Handler 查代码发现是system_stm32|1xx.c 325行里 static void SetSysClock(void) 中的
    FLASH->ACR &= ~FLASH_ACR_LATENCY;  这一行。

几个疑问:
1.为什么我正常下载程序没问题,IAP更新的程序(同一段主程序)会有问题?是否是我Flash擦写操作有问题?我单步调试,在Keil里用memory查看擦写的地址,都是正常在擦写的。
2.为什么已经跳转进入第二段程序(我把断点设置在static void SetSysClock(void) 开头,Debug时可以正常进入,单步运行到上述那行时就出错),出现硬件错误,还是跳转回第一段程序的HardFault_Handler,是否我跳转时向量表便宜设置有问题?

我把第二段程序再用KEIL 下载一遍 程序又可以正常运行了。

各位大侠有没有遇到过这种问题,或者可不可以提供一点调试思路。调试了两天了 好难过

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
正点原子
1楼-- · 2019-08-14 06:03
估计是你的iap更新代码有问题。
都叫我大力
2楼-- · 2019-08-14 10:26
 精彩回答 2  元偷偷看……
FGY
3楼-- · 2019-08-14 13:46
都叫我大力 发表于 2017-4-18 14:26
麻烦问一下,你遇到的问题解决了吗,我的也是这样

请问您解决了吗?我也遇到同样的问题。
萧洛
4楼-- · 2019-08-14 18:32
FGY 发表于 2017-7-7 13:39
请问您解决了吗?我也遇到同样的问题。

不是bin文件的问题的,你把bin文件,以16进制打开,然后仿真的时候,看接收到的数据,看接收的数据有没有出错。  然后至于你的仿真卡在那里了,估计跟你仿真的时候操作有关,我刚也遇到了这种情况。
星星之火在哪里
5楼-- · 2019-08-14 21:04
楼主,我也遇到一样的问题,我就是使用原子的IAP例程改的SD卡IAP。
我发现,我把LCD_Init这句注释掉,然后删除掉boot里面所有的显示屏操作内容,就会出现这个问题,一旦我把LCD_Init的注释去掉,再测试,就没有这个问题,奇葩啊
楼主你现在解决掉了吗
另外@正点原子 原子哥帮我看看呗

一周热门 更多>