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

【经验分享】STM32G4 软件复位后程序无法运行的原因分析和解决

[复制链接]
STMCU小助手 发布时间:2021-12-8 22:00
1.前言: y* h. s0 z; c4 c" U2 ]
最近在做一个项目,使用STM32G474芯片。' ~  H& G) \3 O* {

3 C0 e2 ]2 s4 n8 C程序包含三个APP , 当运行其中1个APP时, 有时候需要软件复位跳转到其它APP。8 D, G9 }; R: m) F/ F  y' Y
1 c2 _, f1 C7 Z. o4 g
发现调用NVIC_SystemReset() 程序无法启动并跳转到其它APP。
# }+ ]( K' n- O1 K+ J6 u4 b2 w6 P( v' G  [( b* e1 I1 J+ J
2. 原因分析( U3 \  L6 Z& E6 t8 [& k0 F
因为同样的跳转方式,已经在其它ARM MCU上验证且已经成熟,所以先入为主认为是硬件差异。
- O/ x0 Z8 `9 O& n* `* f6 a0 u! a
相同的程序烧录到NUCLEO-G474RE可以正常复位和跳转,所以首先怀疑复位电路。
. l- Q) L0 F) L  U2 J2 {7 ?0 |
6 Y: E& J7 p: {% m) }+ F对比NUCLEO-G474RE 和目标产品的复位电路,目标产品加了外部上拉, 而NUCLEO-G474RE并没有加外部上拉。查阅STM32G4xx手册,发现芯片复位脚已经自带内部上拉, 而之前用其它MCU并没有加内部上拉,硬件工程师设计原理图习惯性加外部上拉了。
: L5 Z8 v* l: d, C
) U! i  X% O! n6 i; k" ~
20200303210823442.png
3 Q# q5 e# F& k: _
5 ~2 \! }; Z" s6 Y) [: @* \
2020030321134430.jpg
; m% O) E- k) c7 `2 f5 H4 V

& k$ z/ y: W# Q5 ?6 Y会不会是目标产品加了外部上拉导致拉过强从而无法软件复位呢,尝试加大外部上拉电阻甚至去掉上拉电阻,但是问题并没有解决,同时用示波器观察复位脚,发现软件复位后芯片复位脚已经产生复位脉冲,且电平宽度也是足够的, 那就应该不是复位问题了。
: e' S4 F7 G4 T6 }+ o$ h! d& ?% N
既然不是复位问题,而程序是一样的,猜测可能是option byte中某些设定不一样。分别读出NUCLEO-G474RE 和目标产品上STM32G4xx芯片的option byte,对比有4 byte差异,如下:  * R0 M4 g- o# W
( `$ |8 {& n" p& w
NUCLEO-G474RE:
; X7 z8 a5 ~( h- Q8 w
  Q" B: {: k& \$ N% ~; E/ Z5 F* ?
L9~)PI)[}U4QN7DBGXEQSIN.png

4 t- z7 I) n% k. ^, Q
/ d/ V1 L; ]! w' W首先先来看看USERConfig的差异,发现其第26 bit有差异,查手册得知该位为 Software BOOT0选项。对照手册,NUCLEO-G474RE是设置成了Software BOOT0, 而目标产品是硬件BOOT0 (PA8)。恍然大悟, 此前产品硬件设计PA8连接了电路,后来断开成悬空了,上电时候该PIN脚没电,启动检测为0, 所以程序正常运行。 但程序运行后,将该脚初始化为输出脚并设置成了高电平,由于没有放电回路,软复位后检测到该PIN脚是高电平, 从而进入了ISP模式。- s9 I! x  K/ ]( k# R9 o

/ m% l: ~7 m1 @$ f# t6 g  @3. 解决办法
& L6 X7 B; \1 c, A原因已经明朗了,那么分别尝试两种解决办法。
8 q" V. a' t7 A7 b1 i" ~  z+ A  H, b
方法一是将目标产品的MCU的USERConfig option byte的26bit同样配置为0.: [. M# v) a4 _% R0 ?& {" a( B0 d
9 T; [" L& X1 y4 V: P
方法二是程序运行后将PA8电平置低。
: D. W& I  W6 x  M3 I' S# P  M0 Y0 Q- o/ N) r  X
经验证,两种方法都可解决现在的问题。更可靠的办法是下一版本硬件PA8拉地。9 X3 ~; N4 Z" P; _& f2 D. W0 ~$ v
1 k# e3 x/ C2 C7 Y. e
4. 总结
, Y. `5 Q8 b3 N! I1 L. h1 A# V总的来说,这是个比较低级的问题,前期没有认真审核原理图,导致后续连串判断错误,走了弯路。
, ~$ R/ n1 X: J& {6 ^) L- B, t
$ b/ ?- T9 A1 w$ b3 c, q: w
0 y  M0 V+ j6 l
收藏 评论0 发布时间:2021-12-8 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版