STM32G0B1低功耗异常:STOP模式无法唤醒问题分析

需积分: 5 1 下载量 75 浏览量 更新于2024-08-03 收藏 899KB PDF 举报
"本文主要分析了一种在使用STM32G0B1微控制器时遇到的异常现象,即在STOP模式下无法正常唤醒的问题。在实验室环境中模拟汽车频繁启动的场景,MCU在长时间工作后进入STOP模式后,无法响应外部中断或显示输出。文章通过问题重现和排除法,最终定位到了导致故障的代码段,指出在STOP模式前错误地停止DMA时钟是问题的根源。正确的做法应该是先从外设停止DMA,而非直接关闭其时钟。" STM32G0B1是意法半导体(STM)推出的一款基于ARM Cortex-M0+内核的微控制器,它以其低功耗特性、丰富的外设和高性能而在工业产品中广泛应用。在本文提到的汽车多媒体音响控制系统中,STM32G0B1用于存储收音机频道和执行各种检测控制功能。 问题的关键在于,当系统检测到外部电源(如汽车ACC电源)下降时,MCU会进入STOP模式以节省电力。当电源恢复,即汽车重新启动时,期望通过RTC(实时时钟)和外部中断(如PC13引脚的下降沿)唤醒MCU。然而,用户在实验中发现,经过72小时连续工作后,MCU有时无法从STOP模式唤醒,表现为屏幕无显示且外部中断失效。 为重现和解决这一问题,开发者首先尝试了传统的调试方法,但由于问题出现的时间不确定,使得在线调试变得困难。因此,他们采用了排除法,通过增加测试样本和调整唤醒频率来加速问题的定位。在模拟用户程序的关键部分后,他们发现在进入STOP模式前,用户代码错误地直接停止了DMA(直接内存访问)的时钟,而未按照正确流程从外设开始停止DMA。 正确的方法应当是首先停止外设的DMA传输,然后再停止DMA时钟。这是因为直接关闭DMA时钟可能会导致数据传输中断,从而影响系统的正常运行。在STOP模式下,这种中断可能造成MCU无法正确响应唤醒事件,进而出现无法唤醒的现象。 总结来说,此应用笔记提醒开发者在处理低功耗模式和DMA操作时必须谨慎,遵循正确的硬件交互步骤,避免因不恰当的软件处理导致类似的问题。对于使用STM32G0B1或其他类似微控制器的项目,确保在进入低功耗模式前正确关闭所有相关外设和传输机制是至关重要的,这有助于保证系统的稳定性和可靠性。