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

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

[复制链接]
STMCU小助手 发布时间:2021-12-8 22:00
1.前言7 t0 g9 |. H9 J  n1 p# b% D
最近在做一个项目,使用STM32G474芯片。
; W: o6 A( i# Y3 S0 A( [# |( o4 T7 E$ h9 h
程序包含三个APP , 当运行其中1个APP时, 有时候需要软件复位跳转到其它APP。
. N5 L. X- d* s) z9 Q4 L2 i+ f- R( v6 C  f
发现调用NVIC_SystemReset() 程序无法启动并跳转到其它APP。% T6 z& l* z% b+ K

% D) ^6 K* y' ~4 T/ x& L7 Z" Z2. 原因分析' c) ~' h# C) X
因为同样的跳转方式,已经在其它ARM MCU上验证且已经成熟,所以先入为主认为是硬件差异。
6 X$ @- ^5 k  W9 s1 z; \5 I& o
. t- h6 x( d% W相同的程序烧录到NUCLEO-G474RE可以正常复位和跳转,所以首先怀疑复位电路。
9 M$ \! }5 J- ]* R0 w; j, S; o# b8 D
对比NUCLEO-G474RE 和目标产品的复位电路,目标产品加了外部上拉, 而NUCLEO-G474RE并没有加外部上拉。查阅STM32G4xx手册,发现芯片复位脚已经自带内部上拉, 而之前用其它MCU并没有加内部上拉,硬件工程师设计原理图习惯性加外部上拉了。! ?7 M/ z2 d) o" v  m% [

9 \7 O; H$ s2 F6 O  ?  q
20200303210823442.png

% d+ n2 z6 Z# T( B$ x( c0 X* X3 m9 S7 f# m& \  D
2020030321134430.jpg
9 t7 N% K2 n' _1 v8 k! X. [$ J1 @
; c$ x) e0 O9 P; Y6 s
会不会是目标产品加了外部上拉导致拉过强从而无法软件复位呢,尝试加大外部上拉电阻甚至去掉上拉电阻,但是问题并没有解决,同时用示波器观察复位脚,发现软件复位后芯片复位脚已经产生复位脉冲,且电平宽度也是足够的, 那就应该不是复位问题了。
! `) J: F; m+ q# i7 [) e7 c
6 U5 b8 U2 y5 i' Q5 i; O既然不是复位问题,而程序是一样的,猜测可能是option byte中某些设定不一样。分别读出NUCLEO-G474RE 和目标产品上STM32G4xx芯片的option byte,对比有4 byte差异,如下:  7 y3 D- m( ~9 [" @$ s

* I/ }- v: R( }2 cNUCLEO-G474RE:
2 b3 w- K6 J$ t) u6 B% l  K, }/ x8 x% F; C
L9~)PI)[}U4QN7DBGXEQSIN.png
! z. O% F! C+ R& i
) h" {* k$ c* C! N& ~0 J
首先先来看看USERConfig的差异,发现其第26 bit有差异,查手册得知该位为 Software BOOT0选项。对照手册,NUCLEO-G474RE是设置成了Software BOOT0, 而目标产品是硬件BOOT0 (PA8)。恍然大悟, 此前产品硬件设计PA8连接了电路,后来断开成悬空了,上电时候该PIN脚没电,启动检测为0, 所以程序正常运行。 但程序运行后,将该脚初始化为输出脚并设置成了高电平,由于没有放电回路,软复位后检测到该PIN脚是高电平, 从而进入了ISP模式。
  C+ n( I% d# {2 C. V0 h
+ H$ W2 ^$ ]9 m/ M3. 解决办法
+ F  @% N9 p* ?; ]( k9 \+ I7 ~2 e原因已经明朗了,那么分别尝试两种解决办法。
$ H; M& O$ M# ]; _8 i% F# `2 x& N0 Q4 j0 y/ x0 O! U
方法一是将目标产品的MCU的USERConfig option byte的26bit同样配置为0.
3 ~$ U( U) f: O7 U& {  y& X! }/ g+ p4 u* g0 Z& S
方法二是程序运行后将PA8电平置低。6 Q9 I# X( p1 d9 T4 A0 x3 R* Q

1 E! X' M7 n+ B经验证,两种方法都可解决现在的问题。更可靠的办法是下一版本硬件PA8拉地。
$ o9 H; Q4 _! r  i( z, J, |  G" D' s% R' ]* |
4. 总结
& L& G9 n4 A% C! P总的来说,这是个比较低级的问题,前期没有认真审核原理图,导致后续连串判断错误,走了弯路。
5 A0 m  K6 D! j: o* k: b: \0 j0 N7 a- R3 d( E1 `

+ T' u% o$ W0 r  i6 Y0 q9 L7 X( M% V
收藏 评论0 发布时间:2021-12-8 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版