STM32 UART TX与RX正确连接方法及接收异常问题求助
STM32 UART 连接与接收异常问题解答
一、STM32 UART TX/RX 正确连接方式
- 设备交叉连接:设备A的TX引脚接设备B的RX引脚,设备A的RX引脚接设备B的TX引脚
- 强制共地:两块设备的GND引脚必须连接,否则信号电平无参考基准,必然出现通信异常
- 硬件流控(可选):若启用CTS/RTS,需交叉连接A的CTS→B的RTS、A的RTS→B的CTS;无需求时可将对应引脚配置为普通IO或悬空
二、单次接收正常后续全为0的排查与解决建议
1. 修正RXNE标志位处理逻辑
RXNE(接收寄存器非空)是只读硬件标志位,不能通过直接修改CR1寄存器清除,必须通过读取USARTx->DR寄存器来复位该标志。如果未正确读取DR,RXNE会一直置位,阻塞后续接收流程。
2. 检查中断与NVIC配置(若用中断接收)
- 中断服务函数中必须完整读取DR寄存器,否则中断会持续触发或被内核屏蔽
- 确认NVIC中UART接收中断的优先级设置合理,避免被高优先级中断抢占导致接收处理不及时
3. 规范接收模式调用逻辑
- 若使用HAL库的
HAL_UART_Receive()或HAL_UART_Receive_IT(),单次接收完成后必须重新启动接收流程,否则UART外设不会主动监听新数据 - 检查UART句柄的
RxState状态,若处于HAL_UART_STATE_BUSY_RX以外的状态,需重新初始化或调用HAL_UART_Receive_IT()恢复接收
4. 硬件与电平验证
- 用示波器测量接收端RX引脚波形,确认发送端是否持续输出有效数据(而非固定0电平)
- 复查引脚配置:确保RX/TX引脚已正确配置为UART复用功能,未被误设为普通IO或其他外设引脚
- 检查电源稳定性:供电波动会导致UART外设工作异常,出现接收数据全0或丢失
5. 寄存器配置复查
你提到的CR1值0x1101(二进制1000100000001),对应STM32L476的USART_CR1:
- 确认RE位(位2)是否为1:RE=1才会使能接收功能,若RE=0直接导致无法接收
- 检查CR2的停止位配置,确保收发两端停止位数量一致(如均为1位)
- 确认OVER8位(位15)配置与发送端一致,过采样模式不匹配会导致数据解析错误
6. 软件逻辑排查
- 排查是否有其他代码意外修改UART寄存器(如误写
USARTx->CR1、USARTx->CR2) - 若用DMA接收,检查DMA是否开启循环模式,是否存在DMA传输完成中断未处理导致接收停止
内容的提问来源于stack exchange,提问作者kostas
相关产品推荐
相关产品推荐

