在STM32低功耗模式下用USART空闲中断唤醒,核心是确保数据不丢失且能精准唤醒。首先,选择支持唤醒的串口(如USART1/2/3,部分型号支持),并配置为停止模式唤醒(如LPUART或USART的WUF位)。在进入低功耗前,使能USART的RXNE和IDLE中断,并设置EXTI线关联USART事件(如EXTI25/26/27/28),这样空闲帧或数据帧能触发唤醒。关键点:唤醒后,MCU从停止模式恢复,但USART时钟可能未稳定,需在中断服务程序中先重新初始化时钟(如HAL_RCC_USARTx_CLK_ENABLE),再读取SR和DR清标志,避免误触发。为防止丢数据,建议在进入低功耗前,将USART配置为1起始位+8数据位+1停止位,无校验,并启用DMA接收(如串口DMA循环模式),这样数据直接存入缓冲区,唤醒后从缓冲区读取,即使中断延迟也不丢。实操建议:使用HAL库的HAL_UART_Receive_DMA开启循环接收,进入STOP模式前禁用DMA中断,仅保留IDLE中断唤醒;唤醒后检查DMA剩余计数,计算已接收字节数。测试时,用逻辑分析仪验证唤醒时序,确保空闲中断在数据帧结束后触发,避免误唤醒。
mcuku 阿沐 · 2026-08-27