You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RS232接收十六进制值异常求助:PC与STM32通信收值不符

问题分析与解决方法

核心原因

你遇到的问题是PC串口工具的控制字符转义功能导致的:0x01(ASCII SOH控制字符)、0x03(ASCII ETX控制字符)这类不可见的控制字符,被串口工具自动替换成了0x7F、0x7E这类可见ASCII字符发送,而STM32是直接接收原始字节,所以出现接收值错误。两台PC通信正常是因为双方工具都做了相同转义,所以能匹配。

易懂的解决步骤

1. 关闭串口工具的控制字符转义功能

打开你使用的PC串口工具(比如串口助手、Putty、SecureCRT等),找到以下类似选项并关闭:

  • “控制字符转义”
  • “ASCII控制字符替换”
  • “不可见字符转换”
  • 部分工具会标注“Send raw bytes”(发送原始字节),请勾选该选项

2. 切换到十六进制发送模式

确保发送时直接发送原始十六进制值,而非ASCII字符:

  • 在串口工具中选择“十六进制发送”模式
  • 输入01对应0x01、03对应0x03,不要输入字符'1'或'3'

3. 调整STM32的接收参数

使用HAL_UART_Receive时,注意接收字节数要和发送的字节数匹配:
如果只发送1个字节比如0x01,应将第三个参数设为1,避免等待超时引发异常:

HAL_UART_Receive(&huart3, receiveData, 1, 100);

4. 验证通信正确性

  • PC端发送十六进制01,在STM32端打印receiveData[0],确认是否为0x01
  • 发送03,确认接收值为0x03

内容的提问来源于stack exchange,提问作者Wee How Woon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:54:54