linux串口是linux操作系统下用于实现串行通信的硬件接口对应的软件抽象,它是linux系统与外部串行设备之间进行数据交互的重要通道,遵循串行通信的基本协议,以逐位传输的方式完成数据发送与接收。

linux串口的基本概念
串行通信是指数据按位依次传输的通信方式,与并行通信相比,它的传输线更少,成本更低,适合长距离或者低速设备的数据交互。linux系统将硬件串口映射为系统中的设备文件,用户不需要直接操作硬件寄存器,只需要通过文件读写的方式就可以完成串口数据的收发。
在linux中,串口设备通常被归类为tty设备,tty是teletype的缩写,最初用于电传打字机设备,现在泛指所有终端类设备。串口作为tty设备的一个子类,拥有独立的驱动框架和操作逻辑。
linux串口的设备命名规则
不同场景下的linux串口设备文件命名有一定规律,常见的命名方式如下:
- 物理串口:通常命名为
/dev/ttyS0、/dev/ttyS1等,序号对应主板上物理串口的编号,ttyS0一般是第一个物理串口。 - USB转串口设备:插入USB转串口模块后,系统会生成
/dev/ttyUSB0、/dev/ttyUSB1这类设备文件,序号按照设备插入顺序递增。 - 虚拟串口:部分场景下会生成
/dev/ttyACM0这类设备文件,常见于Arduino等开发板的虚拟串口连接。
linux串口的基础操作示例
我们可以通过系统自带的工具或者编写代码来操作linux串口,以下是两个常见的示例。
使用stty工具配置串口参数
stty是linux下用于配置终端设备的工具,也可以用来设置串口的波特率、数据位、停止位等参数,示例命令如下:
# 设置/dev/ttyUSB0串口波特率为115200,8位数据位,1位停止位,无校验 stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb
使用C语言实现串口数据读取
通过C语言调用系统接口操作串口设备文件,实现读取串口数据的功能,示例代码如下:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <string.h>
int main() {
int fd;
char buf[1024];
int nread;
struct termios options;
// 打开串口设备文件
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
perror("打开串口失败");
return -1;
}
// 获取当前串口参数
tcgetattr(fd, &options);
// 设置波特率为115200
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
// 8位数据位
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
// 1位停止位
options.c_cflag &= ~CSTOPB;
// 无校验位
options.c_cflag &= ~PARENB;
// 启用接收
options.c_cflag |= CREAD | CLOCAL;
// 设置参数生效
tcsetattr(fd, TCSANOW, &options);
// 读取串口数据
while (1) {
nread = read(fd, buf, sizeof(buf) - 1);
if (nread > 0) {
buf[nread] = ' ';
printf("收到串口数据: %sn", buf);
}
usleep(100000);
}
close(fd);
return 0;
}
linux串口的常见应用场景
linux串口在日常开发和工业场景中有着广泛的应用:
- 嵌入式开发:用于嵌入式设备的调试输出,获取设备运行日志。
- 工业控制:连接传感器、PLC等设备,完成工业数据的采集与控制指令下发。
- 硬件调试:在没有网络或者显示输出的情况下,通过串口登录linux系统进行操作。
- 外设对接:连接条码扫描器、串口打印机等外设,实现数据交互。
linuxserial_porttty串口通信修改时间:2026-07-18 18:27:10