Nucleo-64无法向自定义STM32WL55 PCB发送UART数据求助
STM32WL55 UART通信问题排查与解决
问题概述
自定义PCB与Nucleo开发板(均搭载STM32WL55)通过UART通信时,PCB可向Nucleo正常发送数据,但Nucleo向PCB发送时,PCB仅能收到单个乱码字符。已尝试USART1/USART2,波特率与时钟配置匹配,交换两端代码后问题依旧。PCB接收缓冲区状态为:首个字节为异常值,其余字节未被填充。
核心代码
Nucleo端发送代码
uint8_t tx_buff[]={0,1,2,3,4,5,6,7,8,9}; HAL_UART_Transmit(&huart1, tx_buff, 10, 1000); HAL_Delay(5000);
PCB端接收代码
uint8_t rx_buff[10]; // 需全局定义 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { HAL_UART_Receive_IT(&huart1, rx_buff, 10); } // 初始化时需调用一次开启接收中断 HAL_UART_Receive_IT(&huart1, rx_buff, 10);
排查与解决方案
1. 硬件层面排查
- 引脚兼容性与接线检查:
- 确认Nucleo的TX引脚与PCB的RX引脚接线正确(交叉连接:Nucleo TX → PCB RX),用万用表测量Nucleo TX引脚发送时的电平变化(TTL标准:高电平3.3V,低电平0V),若电平无变化,说明引脚未正确配置或被占用。
- 规避ST-Link复用引脚:部分Nucleo板的USART1(如PA9/PA10)默认作为ST-Link虚拟调试串口,会干扰用户UART通信,建议换用USART2(PA2/PA3)等非复用引脚测试。
- 检查PCB RX引脚电路:确认无异常上拉/下拉电阻,电源噪声是否过大,可尝试添加滤波电容优化信号质量。
2. 软件层面修复
统一UART配置参数:
确保两端UART的**数据位(8位)、停止位(1位)、奇偶校验(无)、流控制(无)**完全一致,任何参数不匹配都会导致乱码或接收失败。Nucleo端发送有效性验证:
添加发送状态检查,确认UART发送正常:uint8_t tx_buff[]={0,1,2,3,4,5,6,7,8,9}; HAL_StatusTypeDef tx_status = HAL_UART_Transmit(&huart1, tx_buff, 10, 1000); if(tx_status != HAL_OK) { // 发送失败,可通过LED闪烁等方式标记故障 while(1); } HAL_Delay(5000);若返回非
HAL_OK,说明Nucleo端UART存在配置错误、引脚占用或时钟问题。PCB端接收代码优化:
- 确保
rx_buff为全局变量,避免局部变量被栈覆盖导致数据异常。 - 在回调函数中增加句柄校验,防止其他UART中断误触发:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1) { // 此处可添加数据处理逻辑(如打印、存储) HAL_UART_Receive_IT(&huart1, rx_buff, 10); } } - 必须在main函数初始化阶段调用一次
HAL_UART_Receive_IT(&huart1, rx_buff, 10);,开启首次接收中断。
- 确保
错误中断排查:
开启UART错误中断,定位信号异常原因:void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1) { // 根据ErrorCode判断故障类型:帧错误(HAL_UART_ERROR_FE)、溢出错误(HAL_UART_ERROR_ORE)等 __HAL_UART_CLEAR_ERRORFLAG(&huart1); HAL_UART_Receive_IT(&huart1, rx_buff, 10); } }若频繁触发错误中断,优先排查硬件信号完整性。
单字节测试验证:
先测试单字节发送:HAL_UART_Transmit(&huart1, (uint8_t*)"A", 1, 1000);,若单字节仍为乱码,说明硬件或基础配置存在问题;若单字节正常,再排查多字节接收的中断逻辑。
3. 时钟配置确认
使用CubeMX重新生成时钟配置,确保UART时钟源(如USART1对应PCLK2、USART2对应PCLK1)配置正确,波特率计算误差在允许范围内。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

