前言
我在给STM32单片机下载程序时,出现下载成功一次后,后面就下载不了了,识别不到下载器设备,经过排查,最终确认是代码配置有误,导致板子烧录口锁死,下面我将把问题的出现到问题的解决进行复现,供各位参考
一、问题的出现
1、现在是一块正常的板子,连接好了STlink,准备下程序
2、我随便下了个程序,下载成功,没问题
3、对程序进行一些修改,使用到了CubeMX,配置过程中没有设置烧录口,或者忘了设置(锁死原因)
4、这是没有配置烧录口的CubeMX生成的错误代码,注意如下语句,我们失能了下载口
5、我们对上面没有设置烧录口的错误代码进行下载,第一次下载,没问题,成功下载进去
6、对上述错误代码,啥也没更改,进行第二次下载,欸!发现下载不了了
7、在keil中检测一下下载设备,也检测不到,至此,我们的烧录口成功被锁死了
二、问题的解决
1、先将错误代码配置正确,将烧录口配置好,然后重新生成代码
2、这是CubeMX生成的配置好烧录口的代码体现,我们使能了烧录口
3、按住板子的复位键,如果你的板子没有复位键,找出你板子的原理图,如下图所示,把连接复位引脚的电容拿根导线给它短了(一个人完成不了可以让好基友帮忙),目的就是让复位引脚直接接地
4、可以在keil的debug里查看一下,发现我们摁住复位键的时候,是能识别到下载设备的
5、(关键操作)复位键不要放的同时,进行程序下载,出现读条的时候或者点击程序下载键0.5~1秒左右,松开复位键
6、程序下载成功(一次不行的多来几次),问题解决。注意程序配置好烧录口后再下进去,别又下个错误的进去继续锁死
三、总结
在使用CubeMX配置STM32时,如果没有配置SYS里的Debug,那么很有可能导致程序在下载成功一次后,就下载不了了。这是因为STM32微控制器在出厂时,默认是处于安全启动模式的。在这种模式下,只有经过授权的代码才能被下载到微控制器中。如果没有配置SYS里的Debug,那么微控制器将无法进入调试模式。在这种情况下,我们无法使用调试器来下载程序。