使用STM32 ST-LINK Utility 设置读保护后不能运行

客户在使用STM32 ST-LINK Utility给STM32F411VET6设置Level 1读保护后,原本正常运行的代码不再运行,按RESET键也无效。经调研发现,设置读保护时调试器连接在芯片上,需执行上电复位让选项字节生效,断开USB重新上电后程序恢复运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用STM32 ST-LINK Utility 设置读保护后不能运行


前言
有些时候,我们总是按自己的想法,觉得不会有问题的时候,出现了一些看起来奇奇怪怪的问题,只不过最后还是可以发现这是有理可据的。

问题
某客户在其产品的设计中,使用了STM32F411VET6。客户工程师在开发过程中,尝试使用STM32 ST-LINK Utility 软件配合 ST-LINK 给32F411EDISCOVERY 板上的STM32 加上Level 1 的读保护。工程师发 现,原本在板子上正常运行的代码,加上读保护后,就不运行了。按了板上的RESET 按键也无济于事。

调研
1.了解问题
客户工程师使用32F411EDISCOVERY 来验证读保护的功能。

客户打开STM32 ST-LINK Utility 软件,点击“连接Connect to the target”按钮,再把功能代码下载到板上的STM32F411VET6,实现跑马灯的功能。然后,点击“Target → Option Bytes”调出选项字节对话框,将读保护Read OutProtection 设置为Level 1,如下:


 

点击“Apply”之后,STM32 ST-LINK Utility 就将选项字节烧写进去了。此时,弹出一个对话框:


 

此对话框告知我们无法读取存储器。这是对的,因为我们已经将读保护设置成Level 1 了,点击“OK”就可以了。
此时,客户所说的问题来了,板子上的跑马灯不跑了,按下板上的Reset 按键也没用,程序没有运行。

2.问题分析
关于此问题,需要查找一份比较老的编程手册PM0075。此文档虽然是STM32F10xxx 的编程手册,但是有些内容还是值得我们借鉴的,比如现在遇到的这个问题。
翻到2.4.1 Read Protection 章节,在这里,我们看到如下的句子:


第一句话的意思是:读保护是在设置RDP 选项字节后,再执行一次系统复位以重载新的RDP 选项字节后才生效的。接下来的这个注意就很重要了,它的意思是:当读保护被设置的时候调试器仍然通过JTAG/SWD 连接在目标芯片,那么要让选项字节生效,必须执行一次上电复位,而不是系统复位,目的是断开调试器的连接。

对于使用STM32 ST-LINK Utility 来更改RDP 选项字节的操作,正好符合了这两句话的意思,ST-LINK 还通过SWD 接口接在STM32F411VET6 上,所以需要一次上电复位才可以。

那为什么按下Reset 键也没用呢?我们看一下32F411EDISCOVERY 的电路图,看到RESET 键的电路如下:


此按键是接到STM32F411VET6 的NRST 引脚上的。

来看一下STM32F411 参考手册RM0383 关于System Reset 的定义:



 

在NRST 引脚上产生的低电平复位,也就是外部复位,是属于系统复位System Reset 的一种。这就是为什么在Discovery 板上按RESET 键不能起作用的原因了。

3.问题解决
只要将32F411DISCOVERY 板连接到PC 的USB 断开,让其断电后,重新插入USB 口,上电,就可以看到跑马灯程序又在运行了。

结论
由于使用STM32 ST-LINK Utility 给STM32 设置读保护时,需要ST-LINK 调试器通过JTAG/SWD 连接到STM32 上进行选项字节的更新,要使更新生效,必须让STM32 重新上电,执行上电复位才行。

处理
使用STM32 ST-LINK Utility 给STM32 设置读保护之后,需要重新上电才可激活新的选项字节并运行程序。

 

 

文档下载地址:
http://www.stmcu.org/document/list/index/category-1016

实战经验汇总:
http://www.stmcu.org/module/forum/thread-606863-1-1.html

### 使用 STM32 ST-LINK Utility 取消保护 当遇到STM32芯片处于保护状态时,可以利用STM32 ST-LINK Utility来解除这种保护。具体操作如下: #### 打开并配置ST-LINK Utility 启动STM32 ST-LINK Utility软件,在主界面中点击“Target”,随后选择“Settings”。确认设置中的SWD接口已被选中,并且频率设定适当[^2]。 #### 进入Option Bytes编程模式 返回到主菜单后,再次点击“Target”,这次选择“Mass Erase”选项尝试擦除整个Flash存储区。如果由于保护的存在而无法正常连接目标设备,则需进一步进入高级设置。此时应选择“Target”下的“Unlock Flash and Option Bytes Programming…”命令[^1]。 #### 解除保护 在弹出的新窗口里找到有关于保护的部分,通常位于“Read Protection Level”的下拉列表处。将其调整至无保护的状态(Level 0),即关闭任何级别的保护功能。完成更改之后,记得保存设置并执行解锁动作。这一步骤可能会请求用户确认操作的安全性和不可逆性,请仔细阅提示信息后再做决定。 #### 验证结果 一旦上述过程顺利完成,重新打开ST-LINK Utility应该能够不受阻碍地识别到已连接的目标MCU。为了验证保护确实已经被移除,可以在工具内浏览内存映射或尝试加载新的固件文件进行测试[^3]。 ```python # Python代码仅作为示意,实际操作无需编写Python脚本 print("此段落仅为说明流程,不涉及真实编程") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值