主芯片用的是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 下载一遍 程序又可以正常运行了。
各位大侠有没有遇到过这种问题,或者可不可以提供一点调试思路。调试了两天了 好难过
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我发现,我把LCD_Init这句注释掉,然后删除掉boot里面所有的显示屏操作内容,就会出现这个问题,一旦我把LCD_Init的注释去掉,再测试,就没有这个问题,奇葩啊
楼主你现在解决掉了吗
另外@正点原子 原子哥帮我看看呗
一周热门 更多>