以下内容是参考《CM3权威指南》和stm32f10x的解决方法总结的,有些内容会有所出入。实操中找不到和图片相同的内容时记得要灵活变通。
1.在stm32f4xx_it.c中的HardFault_Handler()中添加断点。当硬错误发生时就可以马上暂停程序执行。
2.此时查看R14(LR)寄存器的值,确定哪个指针的值是有效的。根据图片里的数值,我取MSP的值0x20000938。
3.打开Memory窗口,跳至MSP=0x20000938的内存位置。从这里向高地址数六个(也就是第七个?我也不是很清楚~)unsigned long,那个0x0800xxxx的数字就是出错的程序位置了。
4.打开反汇编窗口,右键->”Show Disassembly at Address”,输入我看到的第七个地址0x080021F2,就可跳转到发生HardFault的那一行代码了。
参考链接:
http://bbs.ednchina.com/BLOG_ARTICLE_3024685.HTM
(另外在FreeRTOS中有个更详细的指南,我没看~:
http://www.freertos.org/Debugging-Hard-Faults-On-Cortex-M-Microcontrollers.html
)
版权声明:本文为Maple_Leaf_15原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。