STM32芯片flash被锁导致Error: Flash Download failed - "Cortex-M4",解决办法(全)亲测有效🤩!
方法1:由于Keil 中debug的仿真器配置出错导致的下载失败(这种问题虽然是低级错误,但我还是觉得非常有必要确认一下自己的配置有没有出错)
方法2:使用第三方烧录软件,通过串口烧录覆盖flash,暴力解锁,此方法不支持STM429和429以上版本的芯片
方法3:J-Link仿真器通过J-Flash软件破解
方法4:ST-LINK仿真器搭配STM32 ST-LINK Utility软件破解,本博客使用此方法!(四种方法我都试过,方法4成功解决,成功率最高!)
Setup_JLink_V500k下载链接:
链接:百度网盘 请输入提取码
提取码:1234
STM32STLINKUtility_v4.5.0下载链接:
链接:百度网盘 请输入提取码
提取码:1234
起因:最近学校搞实训,给每个小组发了STM32F429的板子,因为我做的是蓝牙主从通信,所以前两天又从老师那儿多要了一块。
原本这几天一切顺利,结果昨天遇到了问题,前几天有组员捣蛋用杜邦线母头接3.3V,公头直接触碰led电阻(手动点灯显摆),今天开始做项目才发现LED灯坏了,亮不了了(好在今天实话实说,实训老师宽宏大量,没有计较,后续吹掉换个新的灯珠或者LED电阻应该能修好),这里也提醒大家没事千万别拿杜邦线接电源乱搞。
于是昨天下午想用后拿的那款板子先继续做项目,结果发现居然程序烧录不进去!
先是在KEIL里用野火的DAP直接下载,报错如下:
Error: Flash Download failed - "Cortex-M4"
然后我换了ST官方的烧录软件烧录,又给我报错,报错如下:可能存在写保护!
然后我查资料问下度娘,果然!FLASH芯片被锁了!
于是我偷偷摸摸去实验室又换了唯一剩下的板子回来,结果一烧录,绝!也被锁住了!!你说气人不!😱
于是接下来我只能尝试办法破解软件了。先是与老师沟通如下:
去实验室拿来了一个J-link的JTAG仿真器,搭配官方的J-FLASH软件,尝试网上的方法进行erase chip破解,由于没有20Pin转SWD的转接线,所以只能串联野火DAP再通过DPA上的SWD连接板子。结果发现虽然可以connect成功,但却erase chip不了,会直接报错。
突然脑海闪过一个想法,能不能直接用第三方的烧录软件mcuisp和FlyMcu进行烧写覆盖从而破解。转念一想,STM429和429以上版本的芯片不支持第三方烧录软件o(╥﹏╥)o,真的哭。
结果搞了一晚上,啥进展没有,头倒是大了一圈。
接着来到今天上午,老师给了我一个JTAG转接头,跟我说只能死马当活马医了,我又重新用J-FLASH软件试了一下,这次终于可以erase chip了,但是虽然没有直接报错,当是好像没啥效果。用仿真器烧录程序依然显示Flash Download failed - "Cortex-M4"。
老师说实在不行,应该是芯片被最高级锁死了,只能拿回去把芯片吹掉换一个了。要命!那可等不了了!就在我摆烂的时候,突然发现还有一种方法,就是用ST-link仿真器解锁,我决定试试。
于是我问了老师,老师说下午带一个给我。
来到下午我成功拿到了最终秘籍:ST-Link,蓝白配色!爱了!
再配上野火的SWD转接头图片
连上板子后,先安装好STM-Link Utility软件
然后打开STM32 ST-LINK Utility.exe,先连接:Connect
连接成功后如下:(如果芯片被锁死,所有FLASH的位都是0。我的不是0,是因为我解锁完芯片之后为了演示过程,又重新conncet的)
然后点击Target里面的Option Bytes,先选择Level 0,然后下面的扇区全部取消选中(Unselect all)
接着点击apply,就可以成功将芯片解锁啦!
最后再重新用仿真器烧录程序,先验证下仿真器配置有没有错(防止有些小伙伴是因为仿真器没配置好才烧录不了程序的)
尤其要注意flash的选择不能错
最后烧录程序成功如下所示(一个按键点灯的程序):
点灯成功!accomplish!!😜