STM32L系列芯片 Stop状态唤醒的坑

在STM32L071C8Tx低功耗项目中,通过串口唤醒Stop状态遇到问题。启用HAL_UARTEx_EnableStopMode()和HAL_UART_Receive_IT()后,MCU偶尔唤醒。研究发现,HSI时钟在唤醒过程中可能出现配置错误,导致重新进入Stop状态。解决方案是在USART1中断处理程序中先重新配置时钟,确保时钟为预期状态,从而稳定唤醒。STM32低功耗模式下时钟配置至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在使用STM32L071C8Tx芯片做低功耗项目时,遇到了一个奇怪的Bug:
USART1 115200波特率 HSI时钟源(HSI RC Div 4分频 输出频率4M)
按照官方手册及HAL库提供的函数,使用 HAL_UARTEx_EnableStopMode()

允许串口Rx数据包将MCU从Stop状态唤醒,并使用HAL_UART_Receive_IT()

使能串口中断方式接收后进入Stop状态,上位机发送1字节数据极小概率能唤醒MCU。检测发现数据发送后MCU有将HSI时钟重新上电,并USART1中断有进入,但很快又关闭了HSI时钟,重新进入Stop状态。
由于STOP模式无法使用Debug,因此未找到具体中断源。
怀疑中断后未正确清空各中断Flag和置位各中断Enable位,但排查后并未找到原因。
官方手册描述了一种可能的情况会导致重新进入Stop状态:
在这里插入图片描述并且提醒了使用串口唤醒Stop状态有波特率限制:
在这里插入图片描述考虑可能问题出在MCU检测到Rx数据包时序不正确,所以并未生成唤醒事件,导致MCU并未从Stop状态唤醒。计算后发现串口波特率在容许的波特率范围内,问题并未出在外部唤醒信号上。
手册接下来描述了各低功耗模式下串口的工作状况,其中有一个细节:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值