在Linux系统中,读取串口数据是嵌入式开发、工业控制、设备通信等场景中的常见需求,通过命令行工具或编程接口,用户可以高效地实现串口数据的接收与解析,以下将详细介绍Linux环境下读取串口的命令方法、配置步骤及注意事项。

串口基础概念
串口(Serial Port)是一种串行通信接口,常用于设备间的低速数据传输,在Linux中,串口设备通常被表示为字符设备文件,位于/dev/
目录下,如/dev/ttyS0
(主板串口)、/dev/ttyUSB0
(USB转串口设备)等,要正确读取串口数据,需先确保设备已连接并被系统识别,同时配置串口参数(波特率、数据位、停止位、校验位等)以匹配通信双方的要求。
查看串口设备
在操作串口前,需确认系统是否识别到串口设备,可通过以下命令列出所有串口设备:
ls /dev/ttyS* /dev/ttyUSB* /dev/ttyACM*
/dev/ttyS*
为传统串口,/dev/ttyUSB*
为USB转串口,/dev/ttyACM*
通常为调制解调器类设备,若设备未显示,可检查dmesg
日志确认内核是否识别:
dmesg | grep -i "tty"
配置串口参数
串口通信需确保双方参数一致,常用配置包括:

- 波特率(Baud Rate):如9600、19200、115200等。
- 数据位(Data Bits):通常为8位。
- 停止位(Stop Bits):通常为1位。
- 校验位(Parity):无校验(None)、奇校验(Odd)、偶校验(Even)。
- 流控(Flow Control):无流控(None)、硬件流控(RTS/CTS)、软件流控(XON/XOFF)。
Linux提供了stty
命令用于配置串口参数,配置/dev/ttyUSB0
为115200波特率、8数据位、无校验、1停止位、无流控:
stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb -crtscts
参数说明:
-F
:指定设备文件。cs8
:8位数据位。-cstopb
:1位停止位(cstopb
表示2位停止位)。-parenb
:无校验(parenb
表示启用校验,parodd
表示奇校验)。-crtscts
:无硬件流控(crtscts
表示启用硬件流控)。
读取串口数据
使用cat
命令
cat
命令可直接读取串口数据,适合简单场景:
cat /dev/ttyUSB0
缺点:无法实时处理数据,且无法直接退出(需使用Ctrl+C
强制终止)。

使用minicom
工具
minicom
是一款功能强大的串口终端工具,支持交互式操作和配置,安装方法:
sudo apt install minicom # Debian/Ubuntu sudo yum install minicom # CentOS/RHEL
配置minicom
:
sudo minicom -s
进入配置界面后,选择“Serial port setup”,设置串口设备(如/dev/ttyUSB0
)、波特率等参数,保存后退出,启动minicom
:
minicom -D /dev/ttyUSB0
优点:支持本地回环、文件传输等功能,适合调试设备交互。
使用screen
工具
screen
是轻量级的终端复用工具,也可用于串口通信,安装方法:
sudo apt install screen # Debian/Ubuntu sudo yum install screen # CentOS/RHEL
启动screen
并指定串口:
screen /dev/ttyUSB0 115200
退出时需先按Ctrl+A
,再按K
,确认后关闭会话。
使用dd
命令
dd
命令可用于高效读取串口数据并重定向到文件或管道:
dd if=/dev/ttyUSB0 of=data.txt bs=1
参数说明:
if
:输入文件(串口设备)。of
:输出文件。bs=1
:每次读取1字节(可根据需求调整)。
使用python
脚本
对于复杂场景,可通过Python的pyserial
库读取串口数据,安装pyserial
:
pip install pyserial
示例脚本:
import serial ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1) while True: if ser.in_waiting > 0: data = ser.readline().decode('utf-8').strip() print("Received:", data) ser.close()
常见问题与解决方法
-
权限问题:普通用户可能无法访问串口设备,需将用户加入
dialout
组(Ubuntu/Debian)或uucp
组(CentOS/RHEL):sudo usermod -aG dialout $USER
修改后需重新登录生效。
-
设备占用:若串口被其他进程占用,可通过
lsof
查看占用进程:lsof /dev/ttyUSB0
终止占用进程后重新操作。
相关问答FAQs
Q1: 如何查看串口当前的配置参数?
A1: 使用stty
命令查看当前串口配置,
stty -F /dev/ttyUSB0 -a
该命令会显示波特率、数据位、停止位、校验位等所有参数的当前设置。
Q2: 串口数据读取时出现乱码,如何解决?
A2: 乱码通常由串口参数不匹配或数据编码问题导致,可按以下步骤排查:
- 确认通信双方波特率、数据位、停止位、校验位等参数一致;
- 检查数据编码格式(如ASCII、HEX),必要时在脚本中进行编码转换;
- 尝试降低波特率(如从115200降至9600)排除硬件兼容性问题;
- 检查串口线缆是否接触良好或是否存在信号干扰。