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

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

[复制链接]
STMCU小助手 发布时间:2021-12-8 22:00
1.前言
# F8 R8 G3 K1 E+ U! Q最近在做一个项目,使用STM32G474芯片。
% I" t/ {, c: m; c3 K. W8 j% N5 B/ W
$ R& u9 f4 f* @+ k. F程序包含三个APP , 当运行其中1个APP时, 有时候需要软件复位跳转到其它APP。% f; L/ h/ O6 w! E/ M3 B9 P

7 B" }) F4 N8 J5 u/ m9 ]5 E% F, v发现调用NVIC_SystemReset() 程序无法启动并跳转到其它APP。
4 ?2 M" z! j* E$ b
9 h: r1 Z3 k; X! e) ]2. 原因分析) D/ V* A( T! h% k4 Y
因为同样的跳转方式,已经在其它ARM MCU上验证且已经成熟,所以先入为主认为是硬件差异。
  R1 E1 p# D: b, A8 L: D
. z8 o. l- M5 |. t; p( B) d: k相同的程序烧录到NUCLEO-G474RE可以正常复位和跳转,所以首先怀疑复位电路。: z. T/ Q9 o" a3 E
% x2 X5 d" a& j) n1 I
对比NUCLEO-G474RE 和目标产品的复位电路,目标产品加了外部上拉, 而NUCLEO-G474RE并没有加外部上拉。查阅STM32G4xx手册,发现芯片复位脚已经自带内部上拉, 而之前用其它MCU并没有加内部上拉,硬件工程师设计原理图习惯性加外部上拉了。
. ^4 C* }5 h+ Z$ M: e8 N+ x
+ h* a- B& ?7 x- ^" ?5 J
20200303210823442.png

$ M' L2 A( s9 d8 ^. f, B  @% k8 s% S
2020030321134430.jpg

0 ~, v; ^- S/ L, H: d* X* H% [* |& A/ ?- G" J/ }$ @; V
会不会是目标产品加了外部上拉导致拉过强从而无法软件复位呢,尝试加大外部上拉电阻甚至去掉上拉电阻,但是问题并没有解决,同时用示波器观察复位脚,发现软件复位后芯片复位脚已经产生复位脉冲,且电平宽度也是足够的, 那就应该不是复位问题了。- [& k* @) ~6 _2 |7 H
: D5 H* W' U( a
既然不是复位问题,而程序是一样的,猜测可能是option byte中某些设定不一样。分别读出NUCLEO-G474RE 和目标产品上STM32G4xx芯片的option byte,对比有4 byte差异,如下:  
+ m% f: S: T  W2 b' L2 u4 F& }" V  t9 `; h' o
NUCLEO-G474RE:9 @9 ?4 K' y; I. w; {/ }# Q

0 t- L0 M$ i; H
L9~)PI)[}U4QN7DBGXEQSIN.png
* m% q2 j/ x8 d& V$ @$ [) m& F1 U

- L6 F- b5 w/ H! \# @3 J, M2 ?首先先来看看USERConfig的差异,发现其第26 bit有差异,查手册得知该位为 Software BOOT0选项。对照手册,NUCLEO-G474RE是设置成了Software BOOT0, 而目标产品是硬件BOOT0 (PA8)。恍然大悟, 此前产品硬件设计PA8连接了电路,后来断开成悬空了,上电时候该PIN脚没电,启动检测为0, 所以程序正常运行。 但程序运行后,将该脚初始化为输出脚并设置成了高电平,由于没有放电回路,软复位后检测到该PIN脚是高电平, 从而进入了ISP模式。1 O. J' ]6 c2 p' z; L

) k( Y9 p& `& s3. 解决办法1 y# A$ P, W' O4 s1 @5 e
原因已经明朗了,那么分别尝试两种解决办法。2 q/ l+ a* c+ W4 A( [
: \* R+ ~2 |9 [
方法一是将目标产品的MCU的USERConfig option byte的26bit同样配置为0.5 Z7 o' Y- j, U, K

. w; y7 J- L+ x方法二是程序运行后将PA8电平置低。
0 ~$ s3 [# k, C+ U% ], }( a  v' d0 m
6 n" @, q' ~$ l& p经验证,两种方法都可解决现在的问题。更可靠的办法是下一版本硬件PA8拉地。
9 Q. `# {# ?; Y! ]# W0 m8 d( t' k8 I9 ]
4. 总结
1 |1 o) f3 o: ~; m( J4 W总的来说,这是个比较低级的问题,前期没有认真审核原理图,导致后续连串判断错误,走了弯路。
5 z4 Z( c* Y, K' Z3 }) F/ P
* _, s3 T* V+ Y  ?) A( W# G9 h2 k' X) G/ Z3 p
赞 收藏 评论0 发布时间:2021-12-8 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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