STM32 NUCLEO-L053通过UART以二进制形式发送数字失败排查
STM32 NUCLEO-L053 UART二进制发送问题排查方案
硬件与基础配置核查
- 确认UART引脚连接:NUCLEO-L053的UART2默认TX为PA2、RX为PA3,需确保TX引脚接接收设备的RX引脚,且双方共地。若使用引脚重映射,需核对实际复用引脚。
- 匹配UART参数:发送端与接收端的波特率、数据位(需设为8位,对应
uint8_t)、停止位、奇偶校验必须完全一致。检查huart2初始化结构体Init中的参数是否符合预期,比如:huart2.Init.BaudRate = 9600; // 示例波特率,需与接收端一致 huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; - 验证UART初始化状态:调用
HAL_UART_Transmit前,确保HAL_UART_Init(&huart2)返回HAL_OK,可添加校验逻辑:if (HAL_UART_Init(&huart2) != HAL_OK) { Error_Handler(); // 自定义初始化失败处理 }
代码逻辑调试
- 检查数组完整性:用调试器查看
nums数组的内存值,确认未被其他代码篡改,确保数据是预期的{0,1,2,3,4,5,6,7}。 - 捕获发送函数返回值:不要忽略
HAL_UART_Transmit的返回状态,根据返回值定位问题:HAL_StatusTypeDef tx_status = HAL_UART_Transmit(&huart2, nums, sizeof(nums), HAL_MAX_DELAY); if (tx_status != HAL_OK) { // 针对性排查:HAL_BUSY表示外设忙,HAL_ERROR表示参数/硬件异常 } - 规避中断冲突:若项目中开启了UART相关中断(如TXE、TC中断),阻塞式的
HAL_UART_Transmit可能受干扰。可临时关闭中断测试:__HAL_UART_DISABLE_IT(&huart2, UART_IT_TXE | UART_IT_TC); HAL_UART_DMAStop(&huart2); // 若启用了DMA发送
接收端验证
- 切换接收模式:多数串口助手默认是ASCII模式,会把二进制数据转成字符显示,导致视觉上“乱码”。需切换到二进制/十六进制接收模式,查看接收到的数值是否为
0x00至0x07。 - 校验接收端配置:确保接收设备的UART参数与发送端完全一致,波特率、数据位等参数不匹配会直接导致接收失败。
- 硬件波形检测:用示波器或逻辑分析仪抓取开发板TX引脚的波形,确认是否有符合波特率的信号输出。若无波形,说明硬件或初始化存在问题;有波形但接收端无数据,重点排查接收端。
其他排查点
- 共地与电源:确保开发板与接收设备共地,避免信号干扰导致数据失真。
- 引脚复用冲突:检查PA2/PA3是否被其他外设(如SPI、I2C)占用,通过STM32CubeMX确认引脚复用配置正确。
内容的提问来源于stack exchange,提问作者user21587406
相关产品推荐
相关产品推荐

