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

【经验分享】STM32自锁如何解锁?(解锁方法)No Cortex-M SW Device Found/HardFault_Handler

[复制链接]
STMCU小助手 发布时间:2022-3-24 21:53
在芯片锁住的时候,我们首先要查看是那种错误,/ E+ F( i4 p9 O( T( R4 y& ]
正常情况下,你在Keil下载时遇到错误应该是这样的3 {2 P5 O5 G- e) N7 ^& p2 z

/ _8 l6 v' h# S6 ]# f ITW8%{KX@P1_7SEC_ILZVHN.png
; }( C: v. p. ]! n8 z9 i
; F" _) W: O! R4 z9 W找不到Cortex™-M内核
5 C. K: w. q4 O( IFlash下载失败
, C+ v* f1 d. Q7 U) B

& c* o; l7 z# I* e) U# t打开J-Link-Commander# o+ Y; \8 p8 [! l7 G' L
U6A)}9FC$G`ZVM7EA6N1J@H.png   Q8 q7 b- [$ ?% d9 U; i
! U4 X/ f1 M4 x+ A3 x4 P( J
如果是正常,则是可以找到Cortex-M3/M4内核,
6 F/ x2 e, O* `
3 ]' b' `$ w) K {LM4QGMHAP4~X}]LDL3@J6S.png
8 X& Q+ A8 n4 h! x, c+ f
4 N' S) p1 E4 c" G8 y' x; b如果芯片自锁之后,会发现先是JTAG方式查找,之后SWD方式查找,最后找不到任何内核  E' e! ]* B, W" h+ E" w& V* a

5 Y0 ]# }1 O$ G- l% y8 I MLGFJ28G4X0TS[HSY13Q3KW.png
$ n& P1 j& ]& E2 V; p7 P# e7 x$ M, c- q: u
以下问题为J-LINK能找到芯片时的异常错误:  ?& o+ c, L: a# @+ g
BOOT脚配置问题:对于STM32往往都有些BOOT配置脚。因为BOOT脚的焊接或接触不良或者BOOT引脚没有配置正确**,导致很多问题。这种情况多表现在芯片功能时好时坏,或者部分芯片正常,部分芯片异常。, T# n9 e( g# W" p; M
9 q( f9 c  G( M  _3 a% J" }
启动文件问题:经常因为选错了启动文件,导致程序无法正常运行,或者说调试时好好的,脱机运行就出鬼。这点在做不同系列芯片间移植时最容易碰到。9 b+ B  c( s9 C7 F5 M: o

/ ]7 w3 O! a" y5 i堆或栈越界溢出:
这个也会导致芯片无法正常工作,调试时往往可能会有硬错提示。& [8 ~' O2 i7 E" _( D3 v
/ h& r9 L' Q" t3 s0 z
芯片引脚短路:
这是最典型的现象,也是最常见的原因,一般不工作的时候第一反应就是检查是否发生短路,短路引发芯片无法正常工作。
. n  f5 Z% d: E9 o4 I  O! Q" I# ]7 D+ }
外部晶振异常:
外部晶振无法正常工作也是导致芯片无法正常工作的原因,如果程序时钟配置中没有增加在外部晶振无法正常工作时切换到内部晶振的代码,将导致单片机无法正常启动,进行调试会发现代码卡在了RCC时钟的初始化中0 \2 I3 C& X! _
2 l; |' Q) c4 `
数组越界操作:
数组发生越界时,便会进行错误,结果是程序直接卡死" s3 p! z5 M3 e0 }; X& }* Z5 \
; c  ^5 ^$ X% K5 V
中断处理错误: 同样会导致单片机卡死
5 z0 w; u3 I3 i6 H5 o1 }( n; U* {4 C% H  w6 g% y
单片机发生程序异常时,会进入到HardFault_Handler中断
8 s- J- L3 {# g" k+ H4 r, R' }( L8 k- H* I* f
解决方法:
! w; e* [  l: t0 {# Y
) w3 d+ p) y' m3 _$ d9 i NL8G29`51D43I3IB4Q9XXD3.png % n& W/ }6 |. Q1 n0 G

/ d* I) K0 `. v* o; C在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真
3 o& |5 I' n' H; }) c) S" B- L+ L# h
~Q0AS[`F_6JNX6(Y%HDZKB6.png 2 k7 L9 s8 o. t* ?
; U" X5 z3 e* n6 U' G, ~- ^
}HRXU%BH}@FM}]]V@}Y3}09.png $ D( W$ S" T3 y: H4 J+ Y) K
$ r0 B, S4 |7 S+ I' f5 j
在Keil菜单栏点击“View”——“Call Stack Window”
  [* L' c! u* N0 d弹出“Call Stack + Locals”对话框。然后在对话框中右键选择“Show Caller Code”,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况7 V+ A- A8 H5 N, b* ~% O
6 w4 i; `3 @2 F1 @
329E25JX7BOYIY246)Z7K9G.png
/ j6 _7 {; m/ d* q- C- C" K0 ?
6 k+ k0 I2 L% w6 Z1 J/ z以下问题为J-LINK找不到芯片时的异常错误:
& T+ H* v* c4 d自锁原因:
" k1 @8 I( @; X5 J" l5 I
STM32单片机一般的连接方式是**主闪存存储器(flash)**启动模式,即BOOT0为0,这样在用JTAG或SWD写进程序的时候,如果该程序工程中芯片选型不正确或着程序中复用了JTAG或SW复用引脚导致程序执行后出现启动配置错误或者调试引脚被占用而引起的芯片锁死或Jlnk连接不上的问题,6 F* b" c* Q# @5 z: O1 p6 g

- r0 T  i7 p8 D2 C) H! _时钟问题:时钟频率设置太高,配置超出芯片主频工作范围,导致单片机自锁  ^3 c6 P; j& L" s6 }

% T% c8 \) w2 u$ L8 v; o电源问题:供电电压不稳,STM32内部存在保护检测,同样会进行芯片的自锁8 G1 H6 G3 M* g; B& `  ^& s
0 r& n; O5 ~, E; M8 M; s4 z
+ {4 G, z. J5 ?. m/ ~+ z* G
解决方法:% J: N7 H  v0 I$ n9 Z
把BOOT0和BOOT1跳成1和0,(这时候就看下Jlink应该可以找到芯片),让内部程序不运行,然后再重新下载另外的程序,再改回BOOT设置,便可以恢复正常。如果板子上JTAG和SW调试电路都有的话,在其中一种方式导致锁死的情况下可以用另一种方式擦除恢复,而不必调整BOOT设置。4 T& L' s: v* p9 ^6 t1 H

' w' o5 V' Y, c %SEZA)2A_GAYGOUWY`}1RSA.png 0 C/ V6 L8 H8 K% W
4 ~- K/ l0 \) A% w. m+ G$ r
{BCZ_CY(K67ASCHP)_~H@JA.png - E+ D! Q, u# y- q' t/ ]2 e+ \5 v5 a
) J. z1 _, N  ~; u
简单的说 : 正常的芯片自锁,就是将Flash存储进行读写保护,使得不能运行程序,而我们的做法就是将BOOT0置高,使程序从系统存储器启动,找到芯片之后,重新往Flash中下载一个正常的代码,之后再换回Flash启动,芯片即可完成解锁$ R9 b4 p+ H1 x1 }/ Q
6 ?$ B8 ~1 B' B# ~# q
如果即可以JTAG下载又可以SWD下载,假设SWD方式锁了,可以换成JTAG下载方式然后下载正常程序,同样可以解锁: z; L/ z% Y2 `9 Z8 ^3 r

) f* b- E  C/ ?
. V! A6 d0 [% P7 i
% a! [; W3 t8 ~3 y
赞 收藏 评论0 发布时间:2022-3-24 21:53

举报

0个回答

所属标签

相似技术帖

官网相关资源

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