近日工程中遇到了STM32无法Dubug 也无法正常运行的问题,现象如下:
程序一直在反汇编中循环运行,无法将程序运行至main函数,更不用说断点调试了。查看了网上的说法,可能的原因有
1、output 设置没有选中 debug information;
2、debug 选项 run to main() 没有选中;
3、程序中使用了printf 并通过fputc进行了重定向,但未选择“use microLib”选项;
4、debug 设置中 reset 选择为autodetect,导致无法调试。我这里选为SYSRESETREQ;
5、Boot0 引脚没有拉低,导致程序不是从flash中运行;
1)
2)
3)
综上几种可能的原因进行逐一排除,发现本项目的问题是BOOT0引脚没有拉低处理,通过导线将该引脚接地后,程序从FLASH中启动,并能进行debug调试。
由于硬件工程师将BOOT0引脚只进行悬空处理,让我浪费了很长时间排查问题。所以还是应该严谨一些呀。
援引大牛的说法: “boot0不能悬空的,必须要接地,否则有时候根本就不会工作,而且要加上拉,否则ISP不能烧录程序”
me:使用STLINK下载可以将BOOT0直接接地。
有些芯片没有boot1引脚,改用内部寄存器代替,这样就节省了一个引脚的空间。
参考:
https://blog.csdn.net/dddxxxx/article/details/77877051
http://bbs.eeworld.com.cn/thread-249822-1-1.html
https://www.eefocus.com/uniquecndzz1880742/blog/17-08/423551_35c3e.html?shenhe=0?shenhe=0
http://bbs.eeworld.com.cn/thread-329347-1-1.html
https://blog.csdn.net/qlexcel/article/details/51007482
https://www.amobbs.com/thread-5588543-1-1.html