Windows 与 Linux 串口使用完全指南
串口(Serial Port)是电脑与外部设备通信最基础的接口之一,工业控制、嵌入式开发、单片机调试、路由器配置、传感器数据采集里到处都能见到它。Windows 和 Linux 对串口的管理方式差异很大,很多人从 Windows 转到 Linux 后,第一时间就会被 /dev/ttyUSB0、权限、波特率这些概念卡住。下面把两端的用法、工具和常见坑一次讲清楚。
串口基础概念先理清
串口通信本质是按位串行传输数据,最常见的参数是:
- 波特率(Baud Rate):9600、115200 最常用
- 数据位:通常 8
- 停止位:1
- 校验位:无(None)
- 流控:无(None)或硬件流控(RTS/CTS)
物理接口现在几乎全是 USB 转串口芯片(CH340、CP2102、FT232、PL2303 等),真正的原生 COM 口在新电脑上已经很少见。
Windows 下如何使用串口
-
查看串口号
设备管理器 → 端口(COM 和 LPT)。插上 USB 转串口后会出现COMx(x 是数字)。如果显示黄色感叹号,多半是驱动没装好,去芯片官网下对应驱动即可。 -
常用调试工具
- PuTTY:免费,连接时选 Serial,填入 COM 口号和波特率即可。
- SecureCRT、XShell:功能更全,支持日志记录和脚本。
- 串口助手(各种开源版本):发送十六进制、自动换行比较方便。
- PowerShell / 命令行:
mode COM3: BAUD=115200 PARITY=N DATA=8 STOP=1也可以用 .NET 的
System.IO.Ports.SerialPort写简单脚本。
-
常见问题
- 端口被占用:关掉其他串口软件,或在设备管理器里禁用再启用。
- 乱码:波特率、校验位不一致是最常见原因。
- USB 转串口识别成未知设备:换 USB 口、换驱动,或换一根线(假芯片很多)。
Linux 下如何使用串口
Linux 把串口当成设备文件,路径通常是:
- USB 转串口:
/dev/ttyUSB0、/dev/ttyUSB1… - 板载串口或某些芯片:
/dev/ttyS0、/dev/ttyACM0(CDC ACM 设备)
-
查看设备
ls /dev/ttyUSB* /dev/ttyACM* /dev/ttyS* dmesg | grep tty插拔设备后看
dmesg输出,能立刻确认内核识别到了哪一个节点。 -
权限问题(新手最容易踩坑)
普通用户默认没有权限读写串口,会报Permission denied。
临时解决:sudo chmod 666 /dev/ttyUSB0永久解决:把用户加入
dialout组(Ubuntu/Debian)或uucp组(部分发行版):sudo usermod -aG dialout $USER然后注销重新登录生效。
-
常用工具
- minicom(经典):
sudo apt install minicom sudo minicom -s # 进入配置,选串口设备、波特率 minicom -D /dev/ttyUSB0 -b 115200 - screen(最轻量):
screen /dev/ttyUSB0 115200退出:
Ctrl+A再按K,然后确认。 - picocom(现代替代):
picocom -b 115200 /dev/ttyUSB0 - Python:
pyserial库几乎是标配,跨平台写脚本非常方便。
- minicom(经典):
-
设置串口参数
用stty可以临时改:stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb
Windows 与 Linux 之间通过串口通信
两边参数必须完全一致(波特率、数据位、停止位、校验)。最常见的场景是:
- Windows 上跑上位机软件,Linux 板子(树莓派、工控机)作为下位机。
- 或者反过来,Linux 主机调试 Windows 虚拟机里的串口设备。
实践建议:
- 先用同一台机器自测:Windows 开两个虚拟串口(用 com0com 或 Virtual Serial Port Driver),确认收发正常。
- 再接到真实设备,用最短的 USB 转串口线,避免长距离干扰。
- 如果两边系统都在同一台物理机上(双系统或虚拟机),可以用虚拟串口对(null-modem)直接打通。
跨平台开发时的注意点
- 驱动差异:CH340 在 Linux 内核里已经内置,Windows 需要额外驱动;FT232 两边都比较稳。
- 流控:很多工业设备默认开了硬件流控,Windows 工具里要勾选 RTS/CTS,Linux 里用
stty加crtscts。 - 延迟和缓冲:Linux 默认串口缓冲策略和 Windows 不同,实时性要求高的场合建议把
VTIME、VMIN调小,或者直接用原始模式。 - 热插拔:Linux 下设备号可能变化(ttyUSB0 变成 ttyUSB1),写脚本时最好用
udev规则绑定固定名称。
实用排查清单
- 设备有没有被系统识别?(设备管理器 / dmesg)
- 权限够不够?(Windows 管理员运行,Linux dialout 组)
- 波特率和帧格式是否一致?
- 线有没有接反?(TX-RX 交叉,GND 必须共地)
- 是否被其他程序占用?
- USB 供电是否稳定?(部分芯片对供电要求高,建议用带供电的 USB Hub)
掌握以上内容后,无论是日常调试单片机、配置交换机,还是做工业数据采集,串口基本不会再成为障碍。Windows 侧重图形工具和驱动安装,Linux 侧重设备文件和权限管理,两边思路不同,但底层通信协议完全一样。把参数对齐、权限解决,剩下的就是耐心看日志了。

还没有评论,来说两句吧...