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

树莓派3B通过CP2102转UART与PC通信时接收乱码求助

解决树莓派3B UART乱码及发送失效问题

我来帮你一步步排查这个UART通信的问题,咱们从硬件到软件逐个确认:

1. 先检查硬件连接(最容易忽略的点)

  • 确保CP2102的TX引脚接树莓派的RX引脚(GPIO15),CP2102的RX引脚接树莓派的TX引脚(GPIO14)——交叉连接是UART通信的基本要求,接反了肯定收不到或者乱码。
  • 一定要把树莓派和CP2102的GND引脚连在一起,共地是串口通信稳定的关键,很多乱码问题都是因为没共地导致的信号干扰。

2. 换用树莓派的主UART(避免mini UART的波特率不稳定)

树莓派3B的ttyS0是mini UART,它的波特率会随CPU频率动态变化,很容易出现波特率不匹配导致的乱码。而ttyAMA0是性能更稳定的主UART,默认被蓝牙占用了,咱们把它切换到GPIO引脚:

  1. 编辑/boot/config.txt文件:
    sudo nano /boot/config.txt
    
  2. 添加或修改以下两行:
    enable_uart=1
    dtoverlay=pi3-disable-bt
    
  3. 保存退出后重启树莓派:
    sudo reboot
    

之后GPIO14/15就对应ttyAMA0了,后续操作都用这个串口设备。

3. 统一两边的串口参数

串口通信的波特率、数据位、停止位、校验位必须完全一致,任何一项不匹配都会乱码:

  • 在树莓派上重新设置串口参数(以115200为例):
    sudo stty -F /dev/ttyAMA0 115200 cs8 -cstopb -parenb
    
    这个命令指定了115200波特率、8位数据位、1位停止位、无校验。
  • 在Windows端,打开设备管理器找到CP2102对应的串口,右键进入「属性」→「端口设置」,把参数改成和树莓派完全一样的配置。

4. 修复sudo echo发送失效的问题

直接用sudo echo "ala 11 33" > /dev/ttyS0是无效的,因为重定向>是由当前shell处理的,而shell没有root权限。正确的写法是用tee命令:

echo "ala 11 33" | sudo tee /dev/ttyAMA0 > /dev/null

这样tee会以root权限把内容写入串口,> /dev/null是避免在终端重复输出内容。

5. 检查Python发送代码的问题

如果用Python发送,要注意以下几点:

  • 确保安装了pyserial库:sudo pip install pyserial
  • 代码里要使用正确的串口设备、参数,并且发送字节串(不是字符串):
    import serial
    
    # 初始化串口,参数和两边保持一致
    ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=1)
    # 发送字节串,注意加b前缀
    ser.write(b'ala 11 33\n')
    ser.close()
    
  • 有些串口助手需要收到换行符才会显示内容,所以末尾加\n会更稳妥。

测试验证

  • 在树莓派上执行cat /dev/ttyAMA0,然后在Windows端用串口助手发送数据,看树莓派终端能不能正常显示。
  • 用上面的tee命令或Python代码发送数据,看Windows端是否收到正确内容。

内容的提问来源于stack exchange,提问作者Jakub Mrugał

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:12:58