通过USB串口实现PC与Raspberry Pi Pico的数据收发故障排查
问题分析与解决方案
你遇到的核心问题是混淆了Raspberry Pi Pico的USB虚拟串口和硬件UART0:PC通过USB连接Pico时,使用的是USB CDC虚拟串口,而你的Pico代码却在监听硬件UART0(对应GP0/GP1引脚),两者不属于同一通信通道,因此无法收到数据。
修正方案:改用USB虚拟串口接收数据
修改Pico端的main.py,读取USB虚拟串口的数据,而非硬件UART0。以下是两种可行实现方式:
方式1:使用sys.stdin读取(简单直接)
import machine from machine import Pin import time import sys led = Pin(25, Pin.OUT) while True: try: # 从USB虚拟串口读取一行数据 data = sys.stdin.readline() if data: print(data, end='') # 回显数据到串口 led.toggle() # 收到数据时翻转LED except KeyboardInterrupt: sys.exit() except Exception as e: print(f"Error: {e}") time.sleep(0.1)
方式2:使用usb_cdc模块(更灵活)
import usb_cdc from machine import Pin import time led = Pin(25, Pin.OUT) # 获取USB数据串口对象 uart = usb_cdc.data while True: # 检查是否有等待读取的数据 if uart.in_waiting > 0: data = uart.readline() if data: print(data.decode('utf-8'), end='') led.toggle() time.sleep(0.1)
其他排查要点
- 确认串口参数一致:PC端设置的波特率(9600)需与Pico端保持相同,尽管USB虚拟串口的波特率为虚拟参数,但统一设置可避免兼容性问题。
- Pico自动运行验证:确保
main.py已正确上传到Pico,且Pico重启后能自动执行该脚本。 - 硬件UART替代方案:若坚持使用硬件UART0,需额外连接USB转串口模块:PC端USB转串口的TX接Pico的GP0(UART0 RX),RX接GP1(UART0 TX),GND接GND,同时PC端要选择该USB转串口对应的COM口,而非Pico的USB虚拟串口。
内容的提问来源于stack exchange,提问作者Çağan Çelik
相关产品推荐
相关产品推荐

