方法一
本文主要参考以下两篇文章
bbhttps://blog.youkuaiyun.com/weixin_35779001/article/details/112037894https://blog.youkuaiyun.com/weixin_35779001/article/details/112037894https://blog.youkuaiyun.com/a919964703/article/details/124072915
https://blog.youkuaiyun.com/a919964703/article/details/124072915
/*实际上是stlink的接线问题,一开始我将stm32的复位脚接到stlink的reset脚,一直运行不了,忘记在哪里看到说f4的stlink复位引脚已经硬件拉高需要我们手动置低,即接GND或者不接即可。*/
以上的方法是正确的,但理解的原因确实错误的,经过下文对boot1和boot0的学习,我回去翻看了该开发板的原理图(stm32f411)他stlink连接的引脚Reset连接的是boot0,然后我测试了stlink运行时reset引脚输出的是高电平,所以所有的问题都浮出水面,当我连接了reset引脚时boot0一直为1所以stlink烧录完成后不能运行。
以上是我在上一块板子(stm32f411cet6)时第一次烧录程序遇到的问题,当时就像这样一知半解,糊里糊涂的解决了这个问题,以为我已经解决了,但深层原因并没有理解,直至最近又运用上了一块新的板子(stm32f4zgt6)又遇到了同样的情况,不过这次用的是DAP烧录。花了我好久都不能解决这个问题。最后发现是单片机boot引脚的问题,厂家出厂的时候将boot0与3.3v引脚用盖帽短接,导致程序不能运行,再深入了解了单片机烧录程序与boot0,boot1引脚的关系后,发现可以归类为一类问题。就是在DAP、stlink、J-link等烧录的时候boot0要始终为0。boot0与boot1与单片机的关系如下图所示。
简单的来说
使用串口烧录程序时需要将boot0置1,boot1置0
使用DAP等烧录工具进行烧录时需要将boot0置0才行
下图也可以跟直观的看出,J-link的情况我照搬到DAP上试过也同样适用。
方法二
网上有方法说长按RST,点击编译后再松开
这种方法的原理是,屏蔽里面原有的代码
因为原有的代码将SWJ调试端口关闭了
我长按RST后他的代码不运行,当我们松开的瞬间SWJ调试端口立即被占用,就会重新刷新单片机中的代码就可以了。
方法三
使用串口烧录将原有的关闭了SWJ调试端口的代码覆盖掉就好了