【实战经验】使用STM32 ST-LINK Utility 设置读保护后不能运行
2016-08-12 18:34
239 查看
使用STM32 ST-LINK Utility 设置读保护后不能运行
前言
有些时候,我们总是按自己的想法,觉得不会有问题的时候,出现了一些看起来奇奇怪怪的问题,只不过最后还是可以发现这是有理可据的。
问题
某客户在其产品的设计中,使用了STM32F411VET6。客户工程师在开发过程中,尝试使用STM32 ST-LINK Utility 软件配合 ST-LINK 给32F411EDISCOVERY 板上的STM32 加上Level 1 的读保护。工程师发 现,原本在板子上正常运行的代码,加上读保护后,就不运行了。按了板上的RESET 按键也无济于事。
调研
1.了解问题
客户工程师使用32F411EDISCOVERY 来验证读保护的功能。
[align=left]客户打开STM32 ST-LINK Utility 软件,点击“连接Connect to the target”按钮,再把功能代码下载到板上的STM32F411VET6,实现跑马灯的功能。然后,点击“Target → Option Bytes”调出选项字节对话框,将读保护Read OutProtection 设置为Level 1,如下:[/align]
[align=left]点击“Apply”之后,STM32 ST-LINK Utility 就将选项字节烧写进去了。此时,弹出一个对话框:[/align]
此对话框告知我们无法读取存储器。这是对的,因为我们已经将读保护设置成Level 1 了,点击“OK”就可以了。
此时,客户所说的问题来了,板子上的跑马灯不跑了,按下板上的Reset 按键也没用,程序没有运行。
2.问题分析
关于此问题,需要查找一份比较老的编程手册PM0075。此文档虽然是STM32F10xxx 的编程手册,但是有些内容还是值得我们借鉴的,比如现在遇到的这个问题。
翻到2.4.1 Read Protection 章节,在这里,我们看到如下的句子:
[align=left]第一句话的意思是:读保护是在设置RDP 选项字节后,再执行一次系统复位以重载新的RDP 选项字节后才生效的。接下来的这个注意就很重要了,它的意思是:当读保护被设置的时候调试器仍然通过JTAG/SWD 连接在目标芯片,那么要让选项字节生效,必须执行一次上电复位,而不是系统复位,目的是断开调试器的连接。
[/align]
[align=left]对于使用STM32 ST-LINK Utility 来更改RDP 选项字节的操作,正好符合了这两句话的意思,ST-LINK 还通过SWD 接口接在STM32F411VET6 上,所以需要一次上电复位才可以。
[/align]
[align=left]那为什么按下Reset 键也没用呢?我们看一下32F411EDISCOVERY 的电路图,看到RESET 键的电路如下:[/align]
[align=left]此按键是接到STM32F411VET6 的NRST 引脚上的。
[/align]
[align=left]来看一下STM32F411 参考手册RM0383 关于System Reset 的定义:[/align]
[align=left]在NRST 引脚上产生的低电平复位,也就是外部复位,是属于系统复位System Reset 的一种。这就是为什么在Discovery 板上按RESET 键不能起作用的原因了。
[/align]
3.问题解决
只要将32F411DISCOVERY 板连接到PC 的USB 断开,让其断电后,重新插入USB 口,上电,就可以看到跑马灯程序又在运行了。
结论
由于使用STM32 ST-LINK Utility 给STM32 设置读保护时,需要ST-LINK 调试器通过JTAG/SWD 连接到STM32 上进行选项字节的更新,要使更新生效,必须让STM32 重新上电,执行上电复位才行。
处理
使用STM32 ST-LINK Utility 给STM32 设置读保护之后,需要重新上电才可激活新的选项字节并运行程序。
[align=left]
[/align]
[align=left]
[/align]
文档下载地址:
http://www.stmcu.org/document/list/index/category-1016
实战经验汇总:
http://www.stmcu.org/module/forum/thread-606863-1-1.html
前言
有些时候,我们总是按自己的想法,觉得不会有问题的时候,出现了一些看起来奇奇怪怪的问题,只不过最后还是可以发现这是有理可据的。
问题
某客户在其产品的设计中,使用了STM32F411VET6。客户工程师在开发过程中,尝试使用STM32 ST-LINK Utility 软件配合 ST-LINK 给32F411EDISCOVERY 板上的STM32 加上Level 1 的读保护。工程师发 现,原本在板子上正常运行的代码,加上读保护后,就不运行了。按了板上的RESET 按键也无济于事。
调研
1.了解问题
客户工程师使用32F411EDISCOVERY 来验证读保护的功能。
[align=left]客户打开STM32 ST-LINK Utility 软件,点击“连接Connect to the target”按钮,再把功能代码下载到板上的STM32F411VET6,实现跑马灯的功能。然后,点击“Target → Option Bytes”调出选项字节对话框,将读保护Read OutProtection 设置为Level 1,如下:[/align]
[align=left]点击“Apply”之后,STM32 ST-LINK Utility 就将选项字节烧写进去了。此时,弹出一个对话框:[/align]
此对话框告知我们无法读取存储器。这是对的,因为我们已经将读保护设置成Level 1 了,点击“OK”就可以了。
此时,客户所说的问题来了,板子上的跑马灯不跑了,按下板上的Reset 按键也没用,程序没有运行。
2.问题分析
关于此问题,需要查找一份比较老的编程手册PM0075。此文档虽然是STM32F10xxx 的编程手册,但是有些内容还是值得我们借鉴的,比如现在遇到的这个问题。
翻到2.4.1 Read Protection 章节,在这里,我们看到如下的句子:
[align=left]第一句话的意思是:读保护是在设置RDP 选项字节后,再执行一次系统复位以重载新的RDP 选项字节后才生效的。接下来的这个注意就很重要了,它的意思是:当读保护被设置的时候调试器仍然通过JTAG/SWD 连接在目标芯片,那么要让选项字节生效,必须执行一次上电复位,而不是系统复位,目的是断开调试器的连接。
[/align]
[align=left]对于使用STM32 ST-LINK Utility 来更改RDP 选项字节的操作,正好符合了这两句话的意思,ST-LINK 还通过SWD 接口接在STM32F411VET6 上,所以需要一次上电复位才可以。
[/align]
[align=left]那为什么按下Reset 键也没用呢?我们看一下32F411EDISCOVERY 的电路图,看到RESET 键的电路如下:[/align]
[align=left]此按键是接到STM32F411VET6 的NRST 引脚上的。
[/align]
[align=left]来看一下STM32F411 参考手册RM0383 关于System Reset 的定义:[/align]
[align=left]在NRST 引脚上产生的低电平复位,也就是外部复位,是属于系统复位System Reset 的一种。这就是为什么在Discovery 板上按RESET 键不能起作用的原因了。
[/align]
3.问题解决
只要将32F411DISCOVERY 板连接到PC 的USB 断开,让其断电后,重新插入USB 口,上电,就可以看到跑马灯程序又在运行了。
结论
由于使用STM32 ST-LINK Utility 给STM32 设置读保护时,需要ST-LINK 调试器通过JTAG/SWD 连接到STM32 上进行选项字节的更新,要使更新生效,必须让STM32 重新上电,执行上电复位才行。
处理
使用STM32 ST-LINK Utility 给STM32 设置读保护之后,需要重新上电才可激活新的选项字节并运行程序。
[align=left]
[/align]
[align=left]
[/align]
文档下载地址:
http://www.stmcu.org/document/list/index/category-1016
实战经验汇总:
http://www.stmcu.org/module/forum/thread-606863-1-1.html
相关文章推荐
- STM32单片机使用ST-LINK调试程序时不能设断点
- Eclipse stm32 编辑 编译 下载 调试 ( ST-Link J-Link ) 环境搭建 (使用GNU ARM Eclipse)
- STM32使用JLINK或STLink下载程序需要用的的引脚
- 使用ST-Link Utility去除STM32芯片读写保护
- 树莓派 st-link master使用ST-LINK V2下载STM32程序 支持F0 F1 F2 等
- ftp 的使用经验 防火墙设置导致其它电脑不能访问
- 使用ST-Link Utility去除STM32芯片读写保护
- 关于ST-Link下载STM32程序的使用
- 使用C#设置IIS站点运行的.Net版本示例
- MS DTC 无法正确处理DC升级/降级事件。MS DTC 将继续运行并使用现有的安全设置。
- 十分棘手的问题,使用vs2005在文件系统机制下开发出来的web程序,配置到iis就不能正常运行?
- ASP.NET 在域控制器上使用默认 ASPNET 帐户不能正常运行315158
- 使用C#设置IIS站点运行的.Net版本示例
- 使用C#设置IIS站点运行的.Net版本示例
- Oracle SQLPlus 一些使用经验记录(设置环境变量和字符串比较)
- Fedora 9 系统语言设置为英文后不能使用SCIM的解决(转载)
- 使不能运行的JAR文件可以使用java -jar运行
- c#asp.net url 传递中文参数要使用 System.Web.HttpUtility.UrlEncode 而不能使用Server.UrlEncode
- ASP.NET 在域控制器上使用默认 ASPNET 帐户不能正常运行
- 在使用ArcGIS的ArcToolbox时出错提示"该内存不能为读":安装MapInfo 时出现对话框“该计算机缺少Installscript引擎。请运行ISScript.msi(如果有的话),或者联系您的支持人员获得进一步的帮助。”