你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】使用 STM32 ST-LINK Utility 设置读保护后不能运行

[复制链接]
STMCU小助手 发布时间:2022-2-28 19:54
前言
% {9 E8 C. `7 j! j有些时候,我们总是按自己的想法,觉得不会有问题的时候,出现了一些看起来奇奇怪怪的问题,只不过最后还是可以发现这是有理可据的。& J' W8 A# e0 E+ c6 I) ^, V

' ?& P' D% G# O0 [2 Z7 @1 z问题
7 a% X: P* n0 d9 T1 G" a某客户在其产品的设计中,使用了 STM32F411VET6。客户工程师在开发过程中,尝试使用 STM32 ST-LINK Utility 软件配合ST-LINK 给 32F411EDISCOVERY 板上的 STM32 加上 Level 1 的读保护。工程师发现,原本在板子上正常运行的代码,加上读保护后,就不运行了。按了板上的 RESET 按键也无济于事。, k9 m2 f1 d9 Y8 M, ]# K
* }; z% @: p5 {* i$ l# l" s
调研
$ E2 [7 t9 Y; ]3 B* l1.了解问题

! ]% h2 i3 c" b" y2 D, L客户工程师使用 32F411EDISCOVERY 来验证读保护的功能。9 h! t. R  a) d; q) c8 X& @  Z5 g. O2 d
客户打开 STM32 ST-LINK Utility 软件,点击“连接 Connect to the target”按钮,再把功能代码下载到板上的STM32F411VET6,实现跑马灯的功能。然后,点击“Target → Option Bytes”调出选项字节对话框,将读保护 Read OutProtection 设置为 Level 1,如下:7 U+ K1 o6 F1 v$ N  p
0 x& v' x4 N2 ^
56N[V)%Z$)G3@Q0(ZQW5Q3S.png - s# l! N$ D( f
1 ]6 Q2 F7 g/ b. f3 U
点击“Apply”之后,STM32 ST-LINK Utility 就将选项字节烧写进去了。此时,弹出一个对话框:
0 N& B' z& a2 d3 N/ j. C+ I7 a6 D+ o# h. h
696QPBHPKJI$_#{7L`YNU.png ( g/ j% a( a. k$ L

4 ^# k0 ?& H" }& [" B! i5 w此对话框告知我们无法读取存储器。这是对的,因为我们已经将读保护设置成 Level 1 了,点击“OK”就可以了。
4 @2 n9 p5 q( t3 X2 r此时,客户所说的问题来了,板子上的跑马灯不跑了,按下板上的 Reset 按键也没用,程序没有运行。7 Y! C1 u4 ?# E6 l& v3 ]7 H% a
! G9 D: t7 l) x( h$ f, W; \$ t
2.问题分析9 ]0 o& o: C% _5 d! N
关于此问题,需要查找一份比较老的编程手册 PM0075。此文档虽然是 STM32F10xxx 的编程手册,但是有些内容还是值得我们借鉴的,比如现在遇到的这个问题
# [( Q: r; ~6 }! K8 {, M: T: f# ?。
6 F: F' ^* x9 K, C% w3 P# ]翻到 2.4.1 Read Protection 章节,在这里,我们看到如下的句子:1 V7 R& S5 U& j2 l  l( e

' p, r/ J' g1 y' K+ Z F$SZ4DS(39~@X0R4YPTIIRM.png 2 b4 ^6 T8 {' d% V
$ L3 e( h9 j0 g6 x- \5 s
第一句话的意思是:读保护是在设置 RDP 选项字节后,再执行一次系统复位以重载新的 RDP 选项字节后才生效的。接下来的这个注意就很重要了,它的意思是:当读保护被设置的时候调试器仍然通过 JTAG/SWD 连接在目标芯片,那么要让选项字节生效,必须执行一次上电复位,而不是系统复位,目的是断开调试器的连接。
) K% E1 a2 S2 n. B8 p
9 W0 e( T4 \( X( K& b; Q2 D( _4 x对于使用 STM32 ST-LINK Utility 来更改 RDP 选项字节的操作,正好符合了这两句话的意思,ST-LINK 还通过 SWD 接口接在 STM32F411VET6 上,所以需要一次上电复位才可以。
8 _( d" Z/ c5 C' s# i3 Y& b$ j# m6 _+ r# P5 }& g. O, B% g, `  A' E
那为什么按下 Reset 键也没用呢?我们看一下 32F411EDISCOVERY 的电路图,看到 RESET 键的电路如下:" q1 D' l8 N& k) E  ~: p1 a. ^, \

& @% @; f( M0 Y: p( w0 f5 y OP]V(0BKYXPWTF0O6LW2(W5.png
3 W2 [  K0 z+ d  @8 L9 g7 K7 _
+ _6 M* V* p0 |& o6 a, Q5 T此按键是接到 STM32F411VET6 的 NRST 引脚上的。$ B( p4 ]5 ?; K+ {9 X
: q0 j3 h/ k% Z: i1 u% Q' ~8 i
来看一下 STM32F411 参考手册 RM0383 关于 System Reset 的定义:' _- H# I+ O; q

- V: l; {8 w. ]" G LH1E6U[C~G9IFJUNPLP_VOA.png
# u' ]. e& ^: J! P/ e  L5 F: _7 v1 |) ^
在 NRST 引脚上产生的低电平复位,也就是外部复位,是属于系统复位 System Reset 的一种。这就是为什么在 Discovery 板上按 RESET 键不能起作用的原因了。% t8 r" M& K/ X! r, G  s

) p( ]: X2 m# A0 t% {3.问题解决% ~  W6 ]. S3 i- L+ q
只要将 32F411DISCOVERY 板连接到 PC 的 USB 断开,让其断电后,重新插入 USB 口,上电,就可以看到跑马灯程序又在运行了。0 n" V* b8 Y6 F6 C, J0 g+ j
% p4 s* ^+ O0 q
! k/ Y: N. k: T, g7 L
结论
. U: V7 ~8 x& R! r6 i0 Y由于使用 STM32 ST-LINK Utility 给 STM32 设置读保护时,需要 ST-LINK 调试器通过 JTAG/SWD 连接到 STM32 上进行选项字节的更新,要使更新生效,必须让 STM32 重新上电,执行上电复位才行。
1 b+ M9 ], q- x0 c0 y9 A3 _
! {# F. E" [- |/ U5 E7 Y  c
1 B* f; S9 ~# F! y6 `" o处理6 B, X8 E5 c9 {
使用 STM32 ST-LINK Utility 给 STM32 设置读保护之后,需要重新上电才可激活新的选项字节并运行程序。
1 @  K4 L1 k8 a# G, L
# a( k0 U3 x- e: l' [' `
赞 收藏 评论0 发布时间:2022-2-28 19:54

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版