MDK KEIL 烧录STM32下载错误:Flash Timeout.Reset the Target and try it again.解决办法

使用keil开发STM32点下载时出现下面的报错:
在这里插入图片描述
点确定后:
在这里插入图片描述
出现如上情况很可能是该芯片锁死,即设置了读写保护。
解决方法是想办法解锁芯片,可以使用ST-Link配合stlink utility软件,或者使用J-link,或者用一个自动取消读写保护位的程序在SRAM区运行一下(读写保护只影响 FLASH, SRAM调试时程序下载到 SRAM 中,不受影响) 。当然其实上面的方法原理都是一样,下面就使用ST-Link配合stlink utility软件解锁芯片的方法阐述一下。

stlink utility是ST官方提供的免费软件,支持STM32 ST-LINK的程序包括带有命令行界面(CLI)的图形用户界面(GUI)。该软件可自行到ST官网搜索下载最新版。

进入stlink utility软件后,Target->Connect显示不能读到flash,这也进一步证明这个芯片被设置了读报护。
在这里插入图片描述
选择Target->Option Bytes
在这里插入图片描述
读到配置字节发现读报护果然被使能了:
在这里插入图片描述
将Read Out Protection选项设置位disable,点击Apply,这时候Flash已经成功解锁了:
在这里插入图片描述
解锁成功后会自动连接芯片,这时发现flash已经全部被擦除了,这就是芯片的保护机制,主要防止一些想不劳而获的人通过调试器窃取芯片内的软件。
在这里插入图片描述
至此,芯片已经可以正常烧录了。


补充一点:
在这里插入图片描述
有些芯片比如L0系列的,Read Out Protection选项读出来是Level 0或是 Level 1
STM32 读保护有三个等级 L0 L1 L2
L0 是没有保护,可以随意读出来的,一般调试过程中选择。在L0 状态可以设置成L1 或者L2,修改完成不会擦除芯片已有的代码;
L1 是可恢复读保护,L1–>L0状态,,会自动擦除已有的程序。L1->L2,这个设置还没有试过,(正常理解是不擦除);
L2 是不可恢复读保护,此状态下,不可恢复到其他的状态,同时芯片里的程序不能再升级 类似OTP了;
这个主要是保护代码不会被其他人恶意拷贝,保护原作者的权益。

如果是这种。解锁的时候把Level 1切换到Level 0就行了。
这里注意。自己调试时不要设到Level 2去了,这样芯片就再也不能烧录新程序了。

猜你喜欢

转载自blog.csdn.net/weixin_44788542/article/details/112612412