笔者在给客户调试代码时,发现比较奇怪的问题,特此记录下来。
客户问题:
stm32f072vbt6内部flash在擦除仿真时,卡死在擦除函数,同时弹出“Cannot access target.shutting down debug session”,同时退出仿真。
问题解决:
1、通过去现场,客户使用的是Keil5 + HAL库开发环境,查看代码,发现客户在if语句后多添加分号,导致程序直接进入死循环。
2、去掉分号,发现编译器在仿真的时候,弹出“Cannot
access target.shutting down debug session”,同时退出仿真。
3、跟进代码,发现在进入HAL_FLASHEx_Erase(&EraseInitStruct, &PageError)函数里面,出现异常,反复调试客户代码,均未有代码错误。
4、在客户产品上,烧录官方例程,发现同样出现该问题。
5、查看客户硬件问题,未发现PA14引脚是否被占用,使用IAR烧录官方代码,能成功调试。
6、经过反复试验,发现这问题跟Keil编译器有关,在HAL_FLASHEx_Erase(&EraseInitStruct, &PageError)函数里面,增加1ms延时,能解决此问题。
至于为什么,笔者就不太清楚,但是这样确实解决了问题,望了解此问题大神,留下宝贵的解决,与大家共勉!