插件窝 干货文章 linux的串口是什么

linux的串口是什么

串口 options 设备 波特率 805    来源:    2025-04-18

在Linux系统中,串口(Serial Port)是一种用于串行通信的硬件接口,常用于设备间的数据传输(如嵌入式设备、工业控制、路由器调试等)。以下是关于Linux串口的详细说明:


1. 串口设备文件

Linux将串口设备抽象为文件,通常位于 /dev 目录下,命名规则为: - 传统串口(物理/虚拟)ttyS*(如 /dev/ttyS0 是第一个物理串口)、ttyUSB*(USB转串口设备)、ttyAMA*(ARM平台的串口)。 - 终端模拟tty 开头的设备可能关联到终端或伪终端(如 /dev/tty1)。

查看可用串口:

ls /dev/ttyS* /dev/ttyUSB* /dev/ttyAMA*

2. 串口通信参数

配置串口需指定以下参数(通过 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)或无。


3. 常用工具

(1)命令行工具

  • 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

(2)编程接口

  • C语言:使用 termios.h 库(示例代码见下文)。
  • Pythonpyserial 库: python import serial ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1) ser.write(b'Hello') print(ser.readline())

4. 权限问题

普通用户可能需要权限才能访问串口设备:

sudo chmod 666 /dev/ttyS0    # 临时方案
# 或添加用户到 dialout 组:
sudo usermod -aG dialout $USER

5. 调试技巧

  • 检查串口是否识别bash dmesg | grep tty
  • 测试回环(Loopback Test):短接串口的 TX 和 RX 引脚,发送数据应能接收相同内容。

6. 示例代码(C语言)

#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;
}

常见问题

  • 无法打开串口:检查设备是否存在、权限是否正确。
  • 乱码:确认波特率、数据位等参数与设备一致。
  • USB串口不稳定:尝试更换USB端口或检查驱动(lsmod | grep usbserial)。

通过以上内容,您可以快速掌握Linux串口的基本操作和调试方法。