为什么SWD烧录STM32时BOOT0脚要接高电平,否则SWD下载失败
之前网上买了个STM32的最小系统开发板,由于最近换了笔记本,为了测试重新搭建的开发环境是否能用,用st-link v2烧写这块开发板,发现居然提示
Reason: (4) No device found on target.
把板子侧的管脚定义,st-link侧的管脚定义,连接杜邦线的连通性都测了,居然还是不行,见鬼了。。。
上网查了下,有人说到买的一个开发板有类似的情况,客服让他把BOOT0短接3.3V,再烧写就可以工作了。嗯?BOOT0短接3.3V不是用于串口下载么,SWD按理说可以无视BOOT0配置,这是什么思路。测试了以下,居然还真的好用了,而且之后再用SWD烧录,无需再短接3.3V和BOOT0。
好奇心被成功勾起,再次网上搜索,直到发现有人说了这样一段话(特意把作者论坛id截图了,以示敬意)
OK,这个应该就是正解了。板子里烧的是出厂程序,我买了后没有新烧录(懒。。。买了有一年多。。。一直没用。。。)。原来的程序不知道是什么样的,但是猜测应该是把SWD调试接口禁用了,这样SWD的引脚就可以用作普通GPIO使用,这样下载完第一次程序后,如果从flash启动(BOOT0==0)则无法继续使用SWD接口重新下载程序或者调试,BOOT0拉高,可以让STM32从RAM启动,这样就可以重新使用SWD下载程序。后面由于我下载的程序里使能了SWD接口,所以不用BOOT0拉高也可以烧写。
OK,用CubeIDE测试一下猜测,禁掉SWD接口,烧录,再次烧录,复现了之前的问题,猜测正确。
更坑的一点是,现在CubeMX默认是把SWD调试关闭的(No Debug),这就导致如果没注意这一点,烧进程序后,BOOT0拉低(STM32推荐的正常工作状态),SWD再次烧写就会失败。
————————————————
版权声明:本文为CSDN博主「RockHill_001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/RockHill_001/article/details/103198039
我的解决办法:
发现RESET一直是0V,检查发现stm32reset引脚与旁边接地引脚短接了。
解决办法:烙铁将reset引脚与旁边引脚拉开即可。
网上的解决办法:
1 我遇到这个问题的原因是stm32一直处于reset状态,所以先考虑下是否是硬件的原因。
2 如果MCUBoot1没接地,也会出现这种情况。
3 我试过以前正常的板和程序,现在均有问题,也看过了编译选项,有选的,不过换成MDK4.10就正常了,原因不了解
4 上面写的清楚啊,reset接地了。或者是编译选项里你没选器件?或者是下载选项里没选器件?
5 原子告诉我吧BOOT0设置为1,下载程序,再恢复BOOT0为0,之后就能用了。
6 体现象是,可以下载,但是一运行就没办法中断,系统的提示跟楼主的一样。一开始以为是硬件或者ULink调试器设置的问题,查了很久,最后发现确实是主频过高。因为ST的例子代码,默认是8M晶振,锁相环9倍,结果我外部是25M晶振,就变成了25×9=225M!不知道什么原因,不过把频率改了,暂时没出现问题
网友评论