Linux串口操作指南:3步搞定设置,告别乱码与回显干扰

电子说

1.4w人已加入

描述

 

 

 Linux 系统下调试串口(如 RS232/485)时,新手常面临两类典型问题:发送数据出现乱码、终端回显干扰接收结果。实际上,仅需通过系统自带的 stty 指令完成基础配置,配合双终端测试,即可快速实现稳定的串口通信。本文基于通用操作场景,总结一套即学即用” 的串口设置与测试方案。

 

 

一、核心痛点解析:为何需配置串口参数?

 

直接使用echo 发送数据、cat 接收数据前,串口默认配置存在三类影响通信的问题:

 

 

1.乱码问题:默认启用的onlcr 模式会将换行符(n” 自动转换为 回车 换行(rn,若对接设备不兼容该格式,接收端会出现乱码;

 

 

2.回显干扰:默认echo 模式会重复显示输入字符(如发送“123” 时,终端会额外回显 “123”),导致接收端获取的数据混入冗余内容;

 

 

3.缓冲延迟:默认icanon 规范模式下,数据需等待回车” 指令才会发送,实时性较差,测试过程中无法即时查看传输结果。

 

 

针对上述问题,核心配置指令(如stty -F /dev/ttyS0 -echo -onlcrstty -F /dev/ttyS0 -echo -icanon)可实现精准解决。

串口

 

 

 

二、Linux 串口操作 步方案(含指令解析)

 

第一步:确认串口设备,避免操作错误

 

首先通过ls 命令查看系统中已识别的串口设备(常见路径为/dev/ttyS* /dev/ttyUSB*,前者为硬件串口,后者为 USB 转串口设备),示例如下:

 

 

列出系统中所有 ttyS 类串口设备,确认目标串口存在

 

 

ls -l /dev/ttyS*

 

 

示例输出(确认/dev/ttyS0 串口存在):

 

 

crw-rw---- 1 root dialout 4, 64 2025-09-01 10:00 /dev/ttyS0

 

 

注意:若执行命令时提示“Permission denied”,后续所有操作需添加 sudo 权限,或切换至 root 用户(通过 su - 指令)。

 

 

第二步:用 stty 配置串口,解决乱码与回显

 

基于/dev/ttyS0 串口,针对不同通信需求,分两类场景进行配置,覆盖多数测试场景:

 

 

场景 1:通用测试(解决乱码 关闭回显)

 

适用于多数串口通信场景,通过关闭回显和换行转换,避免基础通信问题:

 

 

核心指令:配置 /dev/ttyS0,关闭回显(-echo)、关闭换行符转换(-onlcr

 

 

stty -F /dev/ttyS0 -echo -onlcr

 

 

指令解析

 

 

sttyLinux 系统自带的串口参数配置工具;

 

 

-F /dev/ttyS0:指定待配置的串口设备路径(-F “File” 缩写,用于明确操作对象);

 

 

-echo:关闭输入回显” 功能 —— 发送数据时,终端不再重复显示发送内容,避免干扰接收端数据读取;

 

 

-onlcr:关闭输出换行转回车” 功能(onlcr 全称“Output NewLine to Carriage Return”—— 禁用后,换行符(n)将直接发送,不额外转换为 回车 换行,解决格式不兼容导致的乱码。

 

 

场景 2:实时传输测试(低延迟 关闭回显)

 

针对传感器数据采集、实时指令下发等对传输延迟要求较高的场景,需额外关闭icanon 规范模式,启用原始模式

 

 

进阶指令:配置 /dev/ttyS0,关闭回显(-echo)、关闭规范模式(-icanon

 

 

stty -F /dev/ttyS0 -echo -icanon

 

 

关键补充

 

 

-icanon:关闭规范模式,进入原始模式”—— 数据无需等待 回车” 指令,发送后立即传输,实时性显著提升,测试中可即时观察接收结果;

 

 

若需固定波特率(如 9600115200),可在指令末尾追加波特率参数,示例:stty -F /dev/ttyS0 -echo -icanon 9600(串口波特率需与对接设备保持一致,否则会出现乱码)。

 

 

验证配置有效性

 

配置完成后,通过stty 指令查看/dev/ttyS0 当前参数,确认目标配置已生效:

 

 

查看 /dev/ttyS0 的当前配置,重点确认 -echo-onlcr-icanon 是否存在

 

 

stty -F /dev/ttyS0

 

 

正确输出特征:参数列表中显示-echo(回显关闭)、-onlcr(换行转换关闭)、-icanon(规范模式关闭,若配置该参数),无echoonlcricanon 原始参数。

 

 

第三步:双终端实战测试,验证通信稳定性

 

配置完成后,打开两个终端,分别执行接收” 和 发送” 操作,验证 /dev/ttyS0 串口通信是否正常:

 

 

终端 1:接收端(监听串口数据)

 

/dev/ttyS0 设为接收端,通过cat 指令持续读取串口数据:

 

 

终端1执行:持续接收 /dev/ttyS0 串口的数据

 

 

cat /dev/ttyS0

 

 

提示:cat 指令会保持阻塞状态以等待数据,需终止时按Ctrl+C 即可。

 

 

终端 2:发送端(发送测试数据)

 

在另一个终端中,向/dev/ttyS0 串口发送测试数据(如“test_data”):

 

 

终端2执行:向 /dev/ttyS0 串口发送“test_data”-n 选项避免自动追加换行符)

 

 

echo -n "test_data" > /dev/ttyS0

 

 

预期结果:终端 1 会即时显示 “test_data”,无乱码、无冗余回显内容,表明串口配置正确且通信正常。

 

 

进阶:回环测试(无外部设备时自测)

 

若暂无对接设备,可通过回环测试” 验证串口自身功能是否正常:

 

 

1.用导线短接/dev/ttyS0 对应的TX 引脚(发送引脚)与RX 引脚(接收引脚)(需参考硬件手册确认引脚定义,如部分设备中/dev/ttyS0  TX 为 PIN10RX 为 PIN9);

 

 

2.终端 1 执行:cat /dev/ttyS0(持续接收数据);

 

 

3.终端 2 执行:echo -n "loop_test" > /dev/ttyS0(发送测试数据);

 

 

4.若终端 1 成功接收 “loop_test”,说明 /dev/ttyS0 串口硬件功能正常。

 

 

三、常见问题解决方案(新手必看)

 

1.问题 1:执行指令提示 “Permission denied”

 

 

原因:当前用户无/dev/ttyS0 串口的读写权限;

 

 

解决方案:通过chmod 指令临时赋予全用户读写权限,示例:

 

 

sudo chmod 666 /dev/ttyS0

 

 

1.问题 2:配置后仍出现乱码

 

 

原因:串口波特率、数据位、校验位与对接设备不匹配(如本地配置为 9600 波特率,对接设备为 115200 波特率);

 

 

解决方案:统一双方参数,以 9600 波特率为例,配置指令:

 

 

stty -F /dev/ttyS0 -echo -onlcr 9600

 

 

1.问题 3:指令无报错,但接收端无数据

 

 

原因 1:物理连接异常(如 TX/RX 引脚接反、未共地);

 

 

原因 2SELinux 拦截(CentOSRHEL 等系统默认启用 SELinux,可能限制串口操作);

 

 

解决方案:检查物理接线是否正确;临时关闭 SELinux(仅用于测试),指令:

 

 

sudo setenforce 0

 

 

1.问题 4:发送数据后,接收端延迟较长才显示

 

 

原因:未关闭icanon 规范模式,数据滞留在缓冲区,需等待回车” 触发发送;

 

 

解决方案:添加-icanon 参数配置串口,指令:

 

 

stty -F /dev/ttyS0 -echo -onlcr -icanon

 

 

四、方案优势总结

 

1.简洁高效:无需安装第三方工具(如 minicom),仅依赖系统自带的 sttyechocat 指令,新手可在 5 分钟内掌握基础操作;

 

 

2.精准避坑:通过-echo 解决回显干扰、-onlcr 解决乱码、-icanon 解决实时性问题,三个核心参数覆盖 90% 以上的串口测试场景;

 

 

3.通用性强:适用于硬件串口(/dev/ttyS*)与 USB 转串口(/dev/ttyUSB*),仅需替换串口路径即可复用操作流程。

 

 

若在串口调试过程中遇到其他问题,可通过查看系统日志(dmesg | grep ttyS0)进一步定位故障,或参考硬件手册确认串口引脚与参数配置。


 


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分