在Linux系统中,串口(Serial Port)是一种用于串行通信的硬件接口,常用于设备间的数据传输(如嵌入式设备、工业控制、路由器调试等)。以下是关于Linux串口的详细说明:
Linux将串口设备抽象为文件,通常位于 /dev
目录下,命名规则为:
- 传统串口(物理/虚拟):ttyS*
(如 /dev/ttyS0
是第一个物理串口)、ttyUSB*
(USB转串口设备)、ttyAMA*
(ARM平台的串口)。
- 终端模拟:tty
开头的设备可能关联到终端或伪终端(如 /dev/tty1
)。
查看可用串口:
ls /dev/ttyS* /dev/ttyUSB* /dev/ttyAMA*
配置串口需指定以下参数(通过 termios
结构体):
- 波特率(Baud Rate):如 9600、115200。
- 数据位(Data Bits):通常 5、6、7、8。
- 停止位(Stop Bits):1、1.5、2。
- 校验位(Parity):无(None)、奇(Odd)、偶(Even)。
- 流控(Flow Control):硬件(RTS/CTS)、软件(XON/XOFF)或无。
screen
:快速连接串口(退出按 Ctrl+A
+ \
):
bash
screen /dev/ttyS0 115200
minicom
:功能更全的串口终端:
bash
sudo apt install minicom # Debian/Ubuntu
minicom -D /dev/ttyUSB0 -b 115200
stty
:配置串口参数:
bash
stty -F /dev/ttyS0 115200 cs8 -parenb -cstopb
termios.h
库(示例代码见下文)。pyserial
库:
python
import serial
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
ser.write(b'Hello')
print(ser.readline())
普通用户可能需要权限才能访问串口设备:
sudo chmod 666 /dev/ttyS0 # 临时方案
# 或添加用户到 dialout 组:
sudo usermod -aG dialout $USER
bash
dmesg | grep tty
#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
int main() {
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B115200); // 输入波特率
cfsetospeed(&options, B115200); // 输出波特率
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB; // 无校验
options.c_cflag &= ~CSTOPB; // 1位停止位
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8; // 8位数据
tcsetattr(fd, TCSANOW, &options);
write(fd, "Hello", 5);
char buf[100];
read(fd, buf, sizeof(buf));
close(fd);
return 0;
}
lsmod | grep usbserial
)。通过以上内容,您可以快速掌握Linux串口的基本操作和调试方法。