0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

应用笔记 | 看似无法唤醒的一种异常现象分析

STM32单片机 来源:未知 2023-07-24 18:45 次阅读

关键字:MPU, SubRegion

目录预览

1 引言2 问题描述3 问题重现4 小结

1. 引言

STM32 G0 系列产品具有丰富的外设和强大的处理性能以及良好的低功耗特性,被广泛用于各类工业产品中,包括一些需要低功耗需求的应用。

2.问题描述

用户使用STM32G0B1 作为汽车多媒体音响控制器控制芯片,用来作为收音机频道存贮和各种检测控制。在实验室条件下模拟汽车频繁打火的情形进行测试,连续工作72 小时实验中,进入STOP 模式后,会出现无法再继续运行的情况(屏幕没有显示输出,外部中断无反应)。

3. 问题重现

通常调查问题时采取调试监控的方式。但是用户产品是在检测外部掉电时,测外部电压(汽ACC 电源,轿车12V)下降后,立刻进入低功耗模式,然后通过RTC 和外部中断(PC13 下降沿触发即汽车打火上电)唤醒MCU 继续工作。

那么既然是已经进入低功耗模式,并且在几十个小时内才会出现故障,通常的用ST-LINK 在线调试方式显然很困难重现问题,即使幸运的遇到了故障,也很容易错过引起故障的代码部分,看到了现象却无法定位。

在此种情况下,正面分析出问题的可能性极小,况且用户代码量超过200k。这时候采用排除法不失为一种可行的办法。通过增加测试样本数量,进行并行测试提高定位效率。

图1 是为了方便说明问题,模拟用户关键程序。主要是进入STOP 前后外设的处理,来复现故障现象。

15e90e7e-2a0f-11ee-a368-dac502259ad0.png

图1 模拟ACC掉电唤醒程序

在经过一段时间的实验,并从增加和减少该段代码的排除中,最后验证并定位到下面的代码引起故障发生。

1601bdd4-2a0f-11ee-a368-dac502259ad0.png

图2 定位到引起的故障代码

反复分析我们可以看到,在进入STOP前,用户需要停止ADCDMA。但是在停止DMA时,用户程序直接停掉DMA的时钟。从函数名称上看,是从其他软件直接搬过来,并且误以为是DMA的默认初始化动作。

16112274-2a0f-11ee-a368-dac502259ad0.png

图3 DMA正确的停止方式

查询参考手册,停止循环模式的DMA应该从外设停止开始,而不是简单粗暴的停止DMA时钟。而且,在程序顺序上客户是先停止了DMA的时钟然后才去停止ADC的DMA请求。显然,当DMA开始工作时,突然停止时钟会使DMA和总线处于一个不确定阶段状态,因此才有极低概率发生唤醒故障。

到此已经找到了发生的原因,按说应该找到了前因后果。但奇怪的是无意中发现振荡器的波形比较奇怪,并不符合低功耗模式。

166c9672-2a0f-11ee-a368-dac502259ad0.png

图 4 外部振荡器HSE 波形

在发生故障状态时发现外部震荡器还在持续震荡,因此判定此时并非进入低功耗模式。利用IAR编译器以HOT PLUG的方式连接调试与观测。

通过调试界面可以看到,代码会不停的进入DMA中断。

16dcfe76-2a0f-11ee-a368-dac502259ad0.png

图5 故障模式下的调试

172f9474-2a0f-11ee-a368-dac502259ad0.png

图6 代码进入循环过程

奇怪的是每次并没有看到DMA的寄存器内容,原因是已经关闭了DMA外设的时钟。所以无法看到任何状态标志。退出中断时在C语言下就无法单步调试了。切换到汇编界面下,可以看到代码可以继续运行到系统时钟配置函数,但是在配置函数中的除法部分进入了循环,然后又发生了DMA中断,并且循环没有出来。

显然,正常的调试手段已显示出逻辑的不正常。

4.小结

至此,情况已经明了。由于软件在进入低功耗前试图关闭ADC加DMA工作,没有按照手册的规范,通过外设停止的方式关闭,而是简单粗暴的关闭DMA时钟,导致总线和运行逻辑出错,无法继续执行。

外部看起来像是进入低功耗模式后,外部中断触发没有执行,芯片没有唤醒,实际上是DMA进入了不正常的循环中断方式导致了系统卡在循环代码下。

芯片的外设功能强大,每种外设运行的方式也不相同,因此停止外设时需根据外设特点以及参考手册的建议来实施,切不可按自己想象的方式执行,这样引起隐蔽的偶发故障就很难去定位解决了。

此外ST已经建立好完整强大的生态系统,按照cube 软件库的规范编写调用驱动函数可以避免少走类似的弯路。

完整内容请点击“阅读原文”下载原文档。

175cb7b0-2a0f-11ee-a368-dac502259ad0.png

长按扫码关注公众号

更多资讯,尽在STM32

点击“阅读原文”,可下载原文档


原文标题:应用笔记 | 看似无法唤醒的一种异常现象分析

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6037

    文章

    44558

    浏览量

    635350
  • STM32
    +关注

    关注

    2270

    文章

    10900

    浏览量

    356041

原文标题:应用笔记 | 看似无法唤醒的一种异常现象分析

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    adc12d1800两个通道采样,Q路正常,I路异常,为什么?

    的,使用段时间后出现这个现象。 图1是正常现象: 图2是异常现象(红色-DQ和DQD;蓝色-DI;绿色-DID): 这是什么原因造成的?谢谢您的帮助!
    发表于 12-26 06:01

    使用DAC38RF84过程中出现复位脚异常现象,怎么解决?

    在使用DAC38RF84过程中出现复位脚异常现象。该复位脚外接1只阻值为1K的上拉电阻,上拉电阻另端与1.8V电压相接。具体异常现象为:在DA芯片上电后用万用表测量复位脚电压,电压值为0.3V
    发表于 12-16 08:41

    使用FPGA对ads6442进行控制采样遇到的异常现象求解答

    个50KHZ,幅度为2V的正玄波进行采样,但是采样出现了异常现象,采集回来的波形如下图,请问这个问题是什么导致的?是采样模式设置问题,还是硬件电路问题? 期待您的解答。
    发表于 12-06 08:00

    ADS7853通道B读到的电压值偏大,确认到通道B的参考电压VREF异常了,为什么?

    ADS7853: 通道B内部参考电压异常,通道A正常,请帮忙分析 Part Number: ADS7853 异常现象 1.1、通道B读到的电压值偏大,确认到通道B的参考电压VRE
    发表于 09-26 07:42

    使用THS4531驱动ADC时,THS4531电路无法对信号进行放大的原因?

    和实际工作都能正常,但有时该THS4531 电路无法对信号进行放大,多次上电重启都无法恢复。使用烙铁对C4和C5加热后,或者说用烙铁焊下周围的电路,信号就好了,但可以肯定的是外围电路不存在虚焊等问题,该
    发表于 09-05 06:07

    SD NAND异常问题案例——文件系统篇

    近期,有用户在使用SD NAND中出现芯片出现读写异常现象,我们工程师对出现异常的3片芯片进行分析,发现3片均能正常读卡,里面的文件大多数可以正常读取,个别显示文件损坏,无法正常读取,
    的头像 发表于 06-14 09:48 525次阅读
    SD NAND<b class='flag-5'>异常</b>问题案例——文件系统篇

    芯海CS32F0XXADC外设模块应用笔记

    本应用笔记旨在展示使用CS32FOxx微控器,提高A/D转化精度的应用。帮助ADC模块用户了解 CS32微控器提供的些高级应用并加快开发周期。所介绍的每种模式都提供个应用示例,以方便用户快速移植
    发表于 05-16 14:58

    芯海应用笔记:CSU3AF10移动电源方案C-C和C-L带载休眠唤醒功能设计指南_V1.0

    ,从而延长移动电源的使用时间和寿命。*附件:应用笔记:CSU3AF10移动电源方案C-C和C-L带载休眠唤醒功能设计指南_V1.0.pdf
    发表于 05-16 14:27

    芯海通用 MCU应用笔记 :在 IAR 及 MDK 开发环境下使用 printf 函数重定向移植差异指南

    本应用笔记,旨在帮助客户在使用不同 IDE(MDK Keil 或 IAR)时,对使用 printf 函数来打印输出UART 串口信息时遇到的无法打印、打印乱码等移植问题作出梳理,理清不同 IDE
    发表于 05-16 11:56

    芯海应用笔记:通用 MCU IAR 开发指南

    本应用笔记旨在帮助指导用户针对芯海通用 MCU 基于 IAR 环境的快速开发,帮助用户快速建立应用工程。芯海科技通用 MCU 提供的 pack 开发包都是仅支持芯海 CSU、MDK 或 IAR 通用
    发表于 05-16 11:50

    芯海通用 MCU 应用笔记 :CS32F103 系列 MCU IAP 升级指南

    本应用笔记旨在帮助指导用户针对芯海 CORTEX-M3 MCU CS32F103 系列单片机 IAP 应用的快速开发。本应用笔记实现了 CAN 和 USART 两接口方式来开发 IAP 应用,协议
    发表于 05-16 11:40

    芯海CSU18P88应用笔记

    本应用笔记旨在为用户提供关于CSU18P88的详细信息和使用指南,帮助用户快速开发基于CSU18P88的应用。*附件:CSU18P88应用笔记V1.5.pdf
    发表于 05-16 10:24

    CSU18MX86应用笔记

    本应用笔记旨在为用户提供关于CSU18MX86的详细信息和使用指南,帮助用户快速开发基于CSU18MX86的应用。*附件:CSU18MX86应用笔记_V1.0.pdf
    发表于 05-16 10:21

    Motor Profiler分析失败,显示speed feedback异常的原因?

    我现在用的是G431+ IHM16套件,手上有两电机,一种是现在需要用的空心杯无刷电机,一种是以前的航模电机,用这个分析软件去跑,航模电机都能正常生成模型,但空心杯无刷电机就不行。
    发表于 03-19 08:30

    变压器运行中常见的异常现象应如何处理呢?

    变压器运行中常见的异常现象应如何处理?
    的头像 发表于 03-08 09:19 618次阅读
    变压器运行中常见的<b class='flag-5'>异常现象</b>应如何处理呢?