STMCU小助手
发布时间:2021-12-8 22:00
|
1.前言% N; ^' l, j* f+ m/ C! ` 最近在做一个项目,使用STM32G474芯片。 6 h/ `1 I. m }; c 程序包含三个APP , 当运行其中1个APP时, 有时候需要软件复位跳转到其它APP。 发现调用NVIC_SystemReset() 程序无法启动并跳转到其它APP。/ T I8 {# l' f! s+ v2 z3 n' F% p- @ 2. 原因分析 因为同样的跳转方式,已经在其它ARM MCU上验证且已经成熟,所以先入为主认为是硬件差异。 相同的程序烧录到NUCLEO-G474RE可以正常复位和跳转,所以首先怀疑复位电路。 + |% I, f% x1 @1 C- ~4 i7 n 对比NUCLEO-G474RE 和目标产品的复位电路,目标产品加了外部上拉, 而NUCLEO-G474RE并没有加外部上拉。查阅STM32G4xx手册,发现芯片复位脚已经自带内部上拉, 而之前用其它MCU并没有加内部上拉,硬件工程师设计原理图习惯性加外部上拉了。# k+ v) f3 A9 P7 I/ H. K ; v( K! ]# @: v
) F! W" `9 h) c4 b$ T9 t+ f! ~2 K
6 D' P9 ^3 g; z 会不会是目标产品加了外部上拉导致拉过强从而无法软件复位呢,尝试加大外部上拉电阻甚至去掉上拉电阻,但是问题并没有解决,同时用示波器观察复位脚,发现软件复位后芯片复位脚已经产生复位脉冲,且电平宽度也是足够的, 那就应该不是复位问题了。 既然不是复位问题,而程序是一样的,猜测可能是option byte中某些设定不一样。分别读出NUCLEO-G474RE 和目标产品上STM32G4xx芯片的option byte,对比有4 byte差异,如下: 1 m) P! a9 y( g' {! m NUCLEO-G474RE: R$ d$ x6 C! Z) K
首先先来看看USERConfig的差异,发现其第26 bit有差异,查手册得知该位为 Software BOOT0选项。对照手册,NUCLEO-G474RE是设置成了Software BOOT0, 而目标产品是硬件BOOT0 (PA8)。恍然大悟, 此前产品硬件设计PA8连接了电路,后来断开成悬空了,上电时候该PIN脚没电,启动检测为0, 所以程序正常运行。 但程序运行后,将该脚初始化为输出脚并设置成了高电平,由于没有放电回路,软复位后检测到该PIN脚是高电平, 从而进入了ISP模式。 3. 解决办法2 c1 h2 X) r2 O: \7 D 原因已经明朗了,那么分别尝试两种解决办法。! y) a% d5 X/ V, D; c3 X. h 方法一是将目标产品的MCU的USERConfig option byte的26bit同样配置为0.0 R- E9 r* p( M' i" P* x4 l* s 方法二是程序运行后将PA8电平置低。 经验证,两种方法都可解决现在的问题。更可靠的办法是下一版本硬件PA8拉地。" u$ u3 a0 L6 Y0 V* \4 W) } 4. 总结 总的来说,这是个比较低级的问题,前期没有认真审核原理图,导致后续连串判断错误,走了弯路。+ \/ e* d' P4 h. ]) z/ B0 _# ]/ | # ~2 g$ p# y& B6 H |
经验分享 | 基于STM32G4芯片TIM+SPI+DMA应用示例
STM32G47x 双 Bank 模式下在线升级
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【经验分享】STM32G4之基本定时器
NUCLEO-G474RE 扩展 LSM6DSO 传感器数据融合实操演示全解析
经验分享 | STM32G474 高精度定时器同步功能全解析 从内部互联到多芯片协同的实现方案
经验分享 | STM32G4双BANK启动应用演示
STM32G4 LPTIM+DMAMUX 实现并行输出应用示例
实战经验 | LAT1578 SAU对NSC分区的影响
经验分享 | STM32G474 HRTIM Triggered-half模式实现两相交错电源180°相位同步方案
微信公众号
手机版