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

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

3天内不再提示

STM32G0B1看似无法唤醒的一种异常现象分析

jf_pJlTbmA9 来源:STM32单片机 作者:STM32单片机 2023-10-25 17:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. 引言

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

2.问题描述

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

3. 问题重现

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

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

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

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

wKgaomUDwhGATobsAAA66HPolD4760.png

图1 模拟ACC掉电唤醒程序

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

wKgZomUDwhKACQVtAAAg1cYhrL4518.png

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

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

wKgZomUDwhSAU60FAAJMwFNTc4o239.png

图3 DMA正确的停止方式

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

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

wKgaomUDwhWADZr6AARY114ga8k295.png

图 4 外部振荡器HSE 波形

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

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

wKgZomUDwheAaoKNABbR_LM_OmI635.png

图5 故障模式下的调试

wKgaomUDwhqAMWNYAA6icbL5qbw524.png

图6 代码进入循环过程

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

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

4.小结

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

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

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

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

来源:STM32单片机

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

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

    关注

    2313

    文章

    11195

    浏览量

    374666
  • dma
    dma
    +关注

    关注

    3

    文章

    582

    浏览量

    106277
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    一种可跨不同领域的异常检测通用模型UniOD介绍

    本研究提出了一种可跨不同领域、适用于特征维度各异且特征空间异构的数据集的异常检测通用模型。
    的头像 发表于 03-18 09:09 547次阅读
    <b class='flag-5'>一种</b>可跨不同领域的<b class='flag-5'>异常</b>检测通用模型UniOD介绍

    中石化物探无线传输方案:低功耗终端与4G网关的远程监控实践

    1.背景概述场地现场井口分布分散,数量众多,出现异常现象需及时处理。人工巡视耗时长、时效性差;有线传输布线繁琐、成本高,且线路本身易出现故障;现场无移动网络覆盖,无法采用4G联网上报。
    的头像 发表于 01-22 19:34 324次阅读
    中石化物探无线传输方案:低功耗终端与4<b class='flag-5'>G</b>网关的远程监控实践

    LAT1171+STM32F745 USART1 Bootloader 失败原因分析与解决

    使用 STM32F745 进行产品开发的时候,出现了使用 STM32CubeProgramer 无法通过 USART1 Bootloader 进行程序升级的问题。为了解决客户的问题,我
    发表于 01-11 17:33 0次下载

    LAT1185+个地址未对齐引起的 HardFault 异常应用笔记

    客户在使用 STM32G070 的时候,KEIL MDK 为编译工具,当编译优化选项设置为Level0 的时候,程序会出现 Hard Fault 异常,而当编译优化选项设置为 Level1
    发表于 01-11 17:28 0次下载

    一种无OS的MCU实用软件框架

    可以进入休眠,但需要定时唤醒起来轮询按键任务。 对于第一种情况,将按键配置为边沿中断唤醒即可,以STM32F4为例(参考key_task.c),它支持外部中断
    发表于 01-08 06:58

    STM32G474 HRTIME PWM 丢波问题分析与解决

    STM32G474 中包含了针对数字电源应用的高精度定时器(HRTIMER),客户在应用该定时器产生 PWM 时,发现 PWM 的输出出现了“丢波”现象,本文对该问题进行分析并给出解决方案。2.
    发表于 01-04 13:47 0次下载

    信道活跃检测(CAD)是一种无线唤醒技术,这个功能般是定时检测么?还是直检测?

    信道活跃检测(CAD)是一种无线唤醒技术,这个功能般是定时检测么?还是直检测?
    发表于 12-10 06:53

    UPS电源市电供电异常全解析:从现象到解决方案的实用指南

    在数字化时代,UPS(不间断电源)已成为保障关键设备稳定运行的核心装备。然而,当市电供电出现异常时,UPS可能发出告警或无法正常工作,给用户带来困扰。本文将系统梳理UPS在市电供电时的常见异常现象
    的头像 发表于 10-14 14:09 1986次阅读
    UPS电源市电供电<b class='flag-5'>异常</b>全解析:从<b class='flag-5'>现象</b>到解决方案的实用指南

    n32g031单片机进入睡眠模式无法唤醒怎么解决?

    求问大家:第次使用单片机的睡眠模式遇到的问题: 1.如果把PWR_EnterSLEEPMode()函数放在while(1)外边进入睡眠模式后,外部按键中断无法触发,单片机
    发表于 10-10 07:11

    光模块安装使用异常全解析:从现象到解决方案的完整指南

    光模块作为光通信系统的核心组件,其安装与使用的规范性直接影响网络稳定性。本文系统梳理了光模块安装过程中的常见异常现象,结合硬件原理与实操经验,提供分步骤解决方案,并附 关键注意事项,助力工程师高效排查故障。
    的头像 发表于 08-28 15:39 1358次阅读
    光模块安装使用<b class='flag-5'>异常</b>全解析:从<b class='flag-5'>现象</b>到解决方案的完整指南

    判断伺服行星减速机出现噪音的异常

    伺服行星减速机出现噪音通常被视为一种异常现象,这种噪音可能会影响设备的正常运行,甚至对工作环境和操作人员的健康造成不良影响。以下是对伺服行星减速机出现噪音异常的判断及可能原因的分析
    的头像 发表于 07-31 18:16 1185次阅读
    判断伺服行星减速机出现噪音的<b class='flag-5'>异常</b>

    CAN总线传播延迟过大导致通信异常现象解析

    本文导读在CAN总线系统中,传播延迟过大是引发通信故障的关键诱因之,可能会导致仲裁异常,使优先级高的信号无法正常优先传输,破坏通信秩序;可能会造成应答错误,使发送节点难以在应答隙内接收到有效
    的头像 发表于 07-15 11:47 1188次阅读
    CAN总线传播延迟过大导致通信<b class='flag-5'>异常现象</b>解析

    某车联网终端有时无法短信唤醒的故障分析

    某车企反馈车载物联网终端4G下有时无法接收短信,导致车辆无法唤醒。查询短信中心记录,下发失败原因有时是“用户不在服务区”,有时是“用户关机”。实际终端
    的头像 发表于 07-14 10:39 903次阅读
    某车联网终端有时<b class='flag-5'>无法</b>短信<b class='flag-5'>唤醒</b>的故障<b class='flag-5'>分析</b>

    求助,关于TLE9893 从stop模式唤醒问题求解

    。 另一种是用MON1(5v/3.3v --> 0v)下降沿,能唤醒,但会复位,导致这期间外部发来的UART数据无法接收。通过查看寄存
    发表于 07-14 07:39

    STM32U5 IWDG的提前唤醒中断无法在STOP模式下触发怎么解决?

    我使用的是STM32U585系列芯片,开启了IWDG,并在运行模式下测试提前唤醒中断正常触发,但在进入STOP2模式后,提前唤醒中断无法触发导致无法
    发表于 04-27 08:05