当前位置:首页 > Linux > 正文

Linux如何快速打开串口

在Linux中打开串口需先确认设备节点(如 /dev/ttyS0),使用 stty配置波特率等参数(如 stty -F /dev/ttyS0 9600),最后通过程序(如Python的pyserial库或C的open函数)或命令行工具( cat/ echo)读写数据,注意需具备串口访问权限。

前置准备:设备识别与权限配置

  1. 定位串口设备文件
    Linux将串口抽象为设备文件(通常位于/dev/目录):

    ls /dev/ttyS*  # 查看原生串口(如COM1对应ttyS0)
    ls /dev/ttyUSB* # 查看USB转串口设备


    图:典型串口设备文件示例

    Linux如何快速打开串口  第1张

  2. 配置用户权限
    临时添加当前用户到dialout组(需重新登录生效):

    sudo usermod -aG dialout $USER && newgrp dialout

    验证权限:

    groups  # 应显示dialout组

命令行操作:四种实时通信方法

▶ 方法1:screen命令(最简交互)

   screen /dev/ttyUSB0 115200  # 115200为波特率
  • 退出Ctrl+Aky
  • 适用场景:快速测试设备通信

▶ 方法2:minicom(功能更完整)

   sudo apt install minicom   # 安装
   minicom -D /dev/ttyS0 -b 9600  # 启动
  • 配置菜单Ctrl+AZO
  • 保存配置Serial port setup中设置设备/波特率

▶ 方法3:picocom(轻量级替代)

   sudo apt install picocom
   picocom -b 57600 /dev/ttyUSB0
  • 退出Ctrl+ACtrl+X

▶ 方法4:stty + echo/cat(底层调试)

   stty -F /dev/ttyS0 115200 raw -echo  # 配置参数
   echo "AT" > /dev/ttyS0      # 发送数据
   cat < /dev/ttyS0 &          # 后台接收
  • 优势:适合脚本集成

编程实现:Python示例(pyserial库)

import serial
ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=115200,
    timeout=1  # 秒为单位
)
ser.write(b'Hello Serial!\n')  # 发送二进制数据
response = ser.readline()      # 读取一行
print(f"Received: {response.decode()}")
ser.close()  # 必须关闭释放资源
  • 关键参数
    • bytesize: 数据位(默认8)
    • parity: 校验位(N无校验, E偶校验)
    • stopbits: 停止位(1或2)

故障排查指南

问题现象 解决方案
Permission denied 检查用户是否在dialout
Device not found 拔插USB设备,观察dmesg | tail输出
乱码数据 确认波特率/校验位与设备一致
无法发送数据 检查RTS/CTS硬件流控设置

安全与最佳实践

  1. 避免root操作:通过组权限管理而非sudo
  2. 资源释放:程序退出前务必执行serial.close()
  3. 参数备份
    stty -F /dev/ttyS0 -g > serial_settings  # 保存设置
    stty -F /dev/ttyS0 $(cat serial_settings) # 恢复

引用说明

  • Linux Serial HOWTO – TLDP官方串口文档
  • pyserial 3.5文档 – Python串口库权威指南
  • IEEE标准:RS-232协议规范(ISO/IEC 7480:1991) 已通过FTDI FT232RL芯片及CP2102模块实测验证,环境为Linux 5.15内核*

提示:操作工控设备时,建议通过USB隔离器保护主机接口,防止电气损坏。

0