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

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

[复制链接]
STMCU小助手 发布时间:2021-12-8 22:00
1.前言
* y# k. v) g: {最近在做一个项目,使用STM32G474芯片。3 Z/ P" |: \/ y8 \  r. p6 `8 M
2 L! N7 y0 C6 b  `
程序包含三个APP , 当运行其中1个APP时, 有时候需要软件复位跳转到其它APP。* _+ D8 H3 p  z

7 W/ ]( k0 \) X3 b6 ^. b' m* a发现调用NVIC_SystemReset() 程序无法启动并跳转到其它APP。+ Y8 ?- _3 w/ q+ g7 W' y. E4 K
& ~  }' v$ K& {! v. M/ X
2. 原因分析
# z7 q8 r! {- D2 |因为同样的跳转方式,已经在其它ARM MCU上验证且已经成熟,所以先入为主认为是硬件差异。; g  C5 C# }' \3 \9 e. x" n( c& A

- Z2 D& M3 z: ]8 Z2 G6 S, t相同的程序烧录到NUCLEO-G474RE可以正常复位和跳转,所以首先怀疑复位电路。. A# K, t2 |' e. x5 Y. r
0 E) k' q8 R5 S; e  u
对比NUCLEO-G474RE 和目标产品的复位电路,目标产品加了外部上拉, 而NUCLEO-G474RE并没有加外部上拉。查阅STM32G4xx手册,发现芯片复位脚已经自带内部上拉, 而之前用其它MCU并没有加内部上拉,硬件工程师设计原理图习惯性加外部上拉了。6 L: x# O$ v9 F2 h7 E

' V( @. Q( O' h& p& c
20200303210823442.png

+ L1 ^& k: Y+ D# X( _; o* F# E# U- h
2020030321134430.jpg

$ k" x9 G6 t3 X: d! p. @4 L
9 }& S- q. e6 m会不会是目标产品加了外部上拉导致拉过强从而无法软件复位呢,尝试加大外部上拉电阻甚至去掉上拉电阻,但是问题并没有解决,同时用示波器观察复位脚,发现软件复位后芯片复位脚已经产生复位脉冲,且电平宽度也是足够的, 那就应该不是复位问题了。/ b3 e1 g$ o, y% A6 ]4 T; a
$ h2 |% d2 N& M- u7 m0 v
既然不是复位问题,而程序是一样的,猜测可能是option byte中某些设定不一样。分别读出NUCLEO-G474RE 和目标产品上STM32G4xx芯片的option byte,对比有4 byte差异,如下:  / o# M7 n% v$ Q, W

/ G- a; y! P* _2 k7 ^8 T0 pNUCLEO-G474RE:% Y9 _  c" G3 L: y; p& O

5 \4 ^, V- G1 P
L9~)PI)[}U4QN7DBGXEQSIN.png
, V2 d8 y) d, |0 |' c# v
6 _; U* K2 u% @+ V
首先先来看看USERConfig的差异,发现其第26 bit有差异,查手册得知该位为 Software BOOT0选项。对照手册,NUCLEO-G474RE是设置成了Software BOOT0, 而目标产品是硬件BOOT0 (PA8)。恍然大悟, 此前产品硬件设计PA8连接了电路,后来断开成悬空了,上电时候该PIN脚没电,启动检测为0, 所以程序正常运行。 但程序运行后,将该脚初始化为输出脚并设置成了高电平,由于没有放电回路,软复位后检测到该PIN脚是高电平, 从而进入了ISP模式。  T9 z5 ~  J$ S0 \8 x% e

% u* |% g9 g- B# J% P1 g3. 解决办法
: o8 s; C  F5 C0 i: U) C原因已经明朗了,那么分别尝试两种解决办法。
" P; ]& s+ n* C0 U- n
) g  B" t1 a* u! u0 {; p7 u) R' A方法一是将目标产品的MCU的USERConfig option byte的26bit同样配置为0.
5 ?$ w0 T9 p5 h: s2 z9 J
/ ~. z* M9 g  X方法二是程序运行后将PA8电平置低。6 v' m8 n: I' b5 u$ K

! {, T# U3 l9 y" {5 T6 \经验证,两种方法都可解决现在的问题。更可靠的办法是下一版本硬件PA8拉地。3 `; G) p( E5 O; r. U, u. E
5 S8 o8 l2 V5 h. w% B9 N
4. 总结
6 z0 N) |1 _( T# I2 x总的来说,这是个比较低级的问题,前期没有认真审核原理图,导致后续连串判断错误,走了弯路。
# S$ O: _( i. Z
+ Q# k( O7 S& S" X/ C4 j! I& @6 Y% _3 c8 y7 b. r. i" e
收藏 评论0 发布时间:2021-12-8 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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