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

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

[复制链接]
STMCU小助手 发布时间:2021-12-8 22:00
1.前言) g7 L5 r. _3 _4 |, K  ]
最近在做一个项目,使用STM32G474芯片。
) ~2 q) O& z, @  w% D6 V3 D. e$ p! z' b' N% ^& u# c
程序包含三个APP , 当运行其中1个APP时, 有时候需要软件复位跳转到其它APP。
) m: N0 T) h0 l5 V: G) r6 f
( l% C* e* m7 ]# \& z* K发现调用NVIC_SystemReset() 程序无法启动并跳转到其它APP。
4 C$ k7 _% y4 @9 j( ~! Q- C$ z
0 d( |  p3 S7 m4 M0 S; Y9 C2. 原因分析( U; R0 A1 `5 u2 G7 i
因为同样的跳转方式,已经在其它ARM MCU上验证且已经成熟,所以先入为主认为是硬件差异。" j4 C8 g! g7 I* v
. c6 W" \. Q; l7 H
相同的程序烧录到NUCLEO-G474RE可以正常复位和跳转,所以首先怀疑复位电路。: ^) }7 ?4 k& Z' \7 [$ Z7 j! g) z& G; G

  Z1 r6 J. a: u8 Y/ e; Z* z对比NUCLEO-G474RE 和目标产品的复位电路,目标产品加了外部上拉, 而NUCLEO-G474RE并没有加外部上拉。查阅STM32G4xx手册,发现芯片复位脚已经自带内部上拉, 而之前用其它MCU并没有加内部上拉,硬件工程师设计原理图习惯性加外部上拉了。& M2 X) {) x. T/ Y6 ?' U- p

' G( }0 K0 F+ T2 ^
20200303210823442.png
3 G- c! {- A- \2 X, Z! O

$ R* ~+ S# Q2 q3 L5 ^' E
2020030321134430.jpg
1 ~) [) F7 s( W" }) c# R1 S

7 f  p( w/ J9 z$ A/ A会不会是目标产品加了外部上拉导致拉过强从而无法软件复位呢,尝试加大外部上拉电阻甚至去掉上拉电阻,但是问题并没有解决,同时用示波器观察复位脚,发现软件复位后芯片复位脚已经产生复位脉冲,且电平宽度也是足够的, 那就应该不是复位问题了。+ M' N' {" O- G0 d% |
8 @6 O( y  b1 {" x% Q  e
既然不是复位问题,而程序是一样的,猜测可能是option byte中某些设定不一样。分别读出NUCLEO-G474RE 和目标产品上STM32G4xx芯片的option byte,对比有4 byte差异,如下:  9 P2 \$ {+ j3 F% M; x  u9 m

* D) V9 ?; p7 A6 ^9 w* INUCLEO-G474RE:9 Y, T! L: ]/ c# J- S4 a; Y5 _

+ a3 F. {4 c3 m$ Z1 {
L9~)PI)[}U4QN7DBGXEQSIN.png

- J4 V" Z3 ^* a+ ^2 ^/ \
8 f- h4 |2 s! U6 c. T* y, u首先先来看看USERConfig的差异,发现其第26 bit有差异,查手册得知该位为 Software BOOT0选项。对照手册,NUCLEO-G474RE是设置成了Software BOOT0, 而目标产品是硬件BOOT0 (PA8)。恍然大悟, 此前产品硬件设计PA8连接了电路,后来断开成悬空了,上电时候该PIN脚没电,启动检测为0, 所以程序正常运行。 但程序运行后,将该脚初始化为输出脚并设置成了高电平,由于没有放电回路,软复位后检测到该PIN脚是高电平, 从而进入了ISP模式。) R+ G/ _9 v* K2 U' b: E  z

7 p8 c6 e3 @" J  f: K2 [0 q* Q3. 解决办法% K. n  I) c* y  e: i  j
原因已经明朗了,那么分别尝试两种解决办法。; O% V$ L7 n; I$ u) k$ w5 z9 S3 \
- O, R! b, {- j# R* M0 {# [
方法一是将目标产品的MCU的USERConfig option byte的26bit同样配置为0.
" p! b. [. V6 l! S; {4 _. n' G* E4 k3 F4 }& S/ L
方法二是程序运行后将PA8电平置低。0 e- }/ I  X' T& s3 T7 f0 a) o( k* Y! I

+ s* a* Y5 h7 ]经验证,两种方法都可解决现在的问题。更可靠的办法是下一版本硬件PA8拉地。
- w& l- d! M" ^) v4 @; q
1 C" o4 r4 Q7 o; q& W4. 总结' y  o/ w  _' v0 V
总的来说,这是个比较低级的问题,前期没有认真审核原理图,导致后续连串判断错误,走了弯路。. y. I9 W, m5 V9 E$ Q
5 Z% H2 v6 O. R. M/ n8 ~5 p. B  F

" U7 c. m4 i5 [* j* H
收藏 评论0 发布时间:2021-12-8 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

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