Linux下如何配置串口通信的详细步骤?

在Linux系统中,串口通信是一种常见的设备间数据交互方式,广泛应用于嵌入式开发、工业控制、传感器数据采集等领域,配置串口通信涉及硬件连接、驱动加载、参数设置、权限管理及软件测试等多个环节,以下将详细说明具体步骤和注意事项。

linux下如何配置串口通信

硬件连接与驱动检查

硬件连接

首先需要确保物理连接正确,Linux下的串口设备分为内置串口(通常为/dev/ttyS0~/dev/ttyS3,对应主板上的DB9接口)和USB转串口(通常为/dev/ttyUSB0~/dev/ttyUSBX,通过USB转串口芯片如PL2303、CH340等连接),连接时需注意:

  • RS232串口:使用交叉连接(TX发送脚接RX接收脚,RX接收脚接TX发送脚),共地(GND脚相连)。
  • RS485串口:需采用半双工通信模式,连接时注意A/B线对应,并在总线两端加终端电阻。
  • USB转串口:直接插入USB接口,Linux通常会自动识别为串口设备。

驱动检查

硬件连接后,需确认驱动是否正常加载。

  • 查看串口设备:使用ls /dev/tty*命令,若出现/dev/ttyS0(内置)或/dev/ttyUSB0(USB转串口),则表示设备已被识别。
  • 检查驱动加载状态:通过dmesg | grep tty查看内核日志,若包含”ttyS0″或”ttyUSB0″相关信息,说明驱动已加载。
  • USB转串口驱动问题:若未识别,可能是驱动缺失,以CH340芯片为例,可安装linux-headers-$(uname -r)(内核头文件)后,手动编译安装驱动(从官方下载驱动源码,执行makesudo make install)。

串口参数配置

串口通信的核心是参数匹配,包括波特率、数据位、停止位、校验位和流控,这些参数需在收发两端保持一致,Linux下主要通过stty命令配置。

核心参数说明

参数类型 可选值及说明 示例(stty命令参数)
波特率 300、600、1200、2400、4800、9600、19200、38400、57600、115200等 9600(设置波特率为9600)
数据位 5、6、7、8(默认8位,即1字节) cs8(8位数据位)
停止位 1、2(默认1位) -cstopb(1位停止位)
校验位 无校验(-parenb)、偶校验(parenb parodd)、奇校验(parenb -parodd -parenb(无校验)
流控 无流控(-ixon)、硬件流控(rtscts)、软件流控(ixon -ixoff -ixon(无软件流控)

配置命令示例

假设配置/dev/ttyS0,参数为:波特率115200、8位数据位、1位停止位、无校验、无流控,执行:

sudo stty -F /dev/ttyS0 115200 cs8 -cstopb -parenb -ixon
  • -F:指定设备文件路径;
  • 配置后可通过stty -F /dev/ttyS0查看当前参数,确认是否生效。

权限管理

Linux中,串口设备默认只有root用户或dialout组成员可读写,普通用户使用时需将其加入dialout组:

linux下如何配置串口通信

sudo usermod -a -G dialout $USER  # 将当前用户加入dialout组

执行后需重新登录使权限生效,若临时使用,也可通过sudo chmod 666 /dev/ttyS0开放所有用户权限(不推荐,存在安全风险)。

软件通信测试

配置完成后,需通过软件测试收发功能。

发送测试

使用echoprintf向串口发送数据:

echo "hello" > /dev/ttyS0          # 发送字符串(默认无换行符)
printf "hellon" > /dev/ttyS0     # 发送字符串并带换行符

若另一端设备能正常接收,说明发送正常。

接收测试

使用cat或重定向方式读取串口数据:

linux下如何配置串口通信

cat /dev/ttyS0                    # 实时读取串口数据(阻塞式,按Ctrl+C退出)
cat /dev/ttyS0 > log.txt &        # 后台读取并保存到文件(&表示后台运行)

若另一端发送数据后,本地能正常接收并显示,说明接收正常。

专业工具测试

  • minicom:一款常用的串口调试工具,安装:sudo apt install minicom
    配置:minicom -s → 选择”Serial port setup” → 设置串口设备(/dev/ttyS0)、波特率等参数 → 保存退出(Save setup as dfl)。
    使用:启动minicom,输入数据后按回车发送,接收数据会直接显示;退出按Ctrl+A,再按Q
  • screen:轻量级终端工具,安装:sudo apt install screen
    使用:screen /dev/ttyS0 115200,操作与终端一致;退出按Ctrl+A,再按K

调试技巧

若通信异常,可按以下步骤排查:

  1. 参数匹配:确认收发两端波特率、数据位、停止位、校验位一致。
  2. 设备占用:使用lsof /dev/ttyS0检查是否有其他程序占用串口,若有需先关闭占用程序。
  3. 驱动状态:通过dmesg | grep tty查看驱动加载错误,或setserial -g /dev/ttyS0检查串口资源(如IRQ、I/O地址)。
  4. 线缆及硬件:检查串口线是否损坏、接触不良,或更换USB转串口芯片测试。

相关问答FAQs

问题1:串口通信时接收到的数据乱码,如何排查?
解答:首先检查收发两端串口参数(波特率、数据位、停止位、校验位)是否完全一致,这是最常见的乱码原因;其次确认线缆连接是否正确(TX-RX交叉,共地);然后检查串口是否被其他程序占用(lsof /dev/ttyS0);最后查看驱动是否正常(dmesg | grep tty),若驱动报错需重新安装驱动。

问题2:如何让串口通信在后台持续运行,避免终端关闭后程序终止?
解答:可通过以下方式实现后台持续运行:

  1. 使用nohupnohup cat /dev/ttyS0 > serial_log.txt &,即使终端关闭,数据仍会持续写入serial_log.txt&表示后台运行。
  2. 使用screen:启动screen /dev/ttyS0 9600后,按Ctrl+A+D分离会话,终端关闭后程序仍运行;需恢复时执行screen -r
  3. 编写脚本:使用while循环持续读取串口,while true; do read -r line < /dev/ttyS0; echo "$line" >> log.txt; done &,后台运行并保存数据。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/38152.html

(0)
酷番叔酷番叔
上一篇 2025年10月8日 06:04
下一篇 2025年10月8日 06:23

相关推荐

  • 快速查看SELinux状态

    方法 1:使用 sestatus 命令(推荐)sestatus 提供最全面的 SELinux 信息,包括运行模式、策略类型等,操作步骤:打开终端,输入命令: sestatus查看输出结果: SELinux status: enabled # SELinux 是否启用SELinuxfs mount: /sys/f……

    2025年7月6日
    5100
  • 新手如何用图形界面进入终端?

    图形界面终端是操作系统桌面环境自带的命令行工具,可通过开始菜单或快捷键打开,无需输入命令,适合初学者使用。

    2025年7月9日
    4700
  • 如何在Linux系统下使用命令快速查找文本中的空行?

    在Linux系统中,空行通常指完全不含任何字符(仅换行符)或仅包含空白字符(如空格、制表符等)的行,处理空行是文本编辑、日志分析、数据清洗等场景中的常见需求,本文将详细介绍如何通过多种命令找到文件中的空行,并对比不同方法的特点,使用grep命令匹配空行grep是Linux中最常用的文本搜索工具,通过正则表达式可……

    2025年9月19日
    2100
  • 如何从基础开始系统学习Linux脚本文件的编写步骤与方法?

    Linux脚本文件是Linux系统中用于自动化任务、批量处理数据和简化重复操作的重要工具,通过将一系列命令组合在一起,实现高效执行,编写Linux脚本需要掌握基本语法、命令使用和调试技巧,以下是详细步骤和注意事项,环境准备在编写脚本前,需确保系统已安装bash解释器(Linux默认自带),创建脚本文件时,通常以……

    2025年9月26日
    1500
  • Linux服务器如何将IP地址映射到项目目录并配置访问?

    在Linux服务器运维中,将IP地址映射到具体项目是实现多服务访问隔离、资源分配和用户访问管理的关键操作,无论是Web应用、API服务还是容器化部署,都需要通过合理的映射策略,确保外部请求能够准确指向对应的项目资源,本文将详细讲解Linux服务器中IP映射到项目的常见方法,包括基于端口的映射、基于域名的虚拟主机……

    2025年9月27日
    1900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信