【Linux 用户态操作 UART】

Linux 用户态操作 UART

参考连接:【6. 串口通讯-野火电子】【Linux PL011驱动支持RS485】

用户态 UART 操作工具

工具 层级 作用
stty 低层配置 设置串口参数(波特率等)
minicom 专用应用 串口调试终端
screen 通用工具 多用途终端复用,也能连串口

👉 ✅ 一句话总结:

Linux 只提供"机制"(TTY + ioctl),这些工具只是不同人写的"用法封装".

如何在用户态简单测试串口功能?

步骤1:先stty配置好串口参数

Understanding Raw Mode vs. Canonical Mode (Buffered Mode)*

规范模式(缓冲模式):只有当检测到换行符(n)、回车符(r)、EOF(结束符)等 "行终止符" 时,才会把缓冲的一整行数据一次性交给cat,此时才能在终端看到打印结果。所以如果想要cat /dev/ttyUSB1获得串口收到的不带换行符数据,需要用stty命令让串口工作在 raw 模式。

原始模式:终端不做任何缓冲,不解析任何字符比如换行符,回车符(全都视为普通字节)。只要串口收到1个字节的数据,终端驱动就立刻把这个字节传给cat,cat读取后马上打印(像是实时打印)。

shell 复制代码
#切换为原始模式(raw模式)(关闭行缓冲,实时传输)
stty -F /dev/ttyUSB1 raw

#更详细的raw模式命令,配置串口ttyUSB1 、115200波特率、8数据位、1停止位、无奇偶校验、关闭回显
stty -F /dev/ttyUSB1 raw speed 115200 cs8 -cstopb -parenb -echo 

#切换为规范模式(需要行缓冲)
stty -F /dev/ttyUSB1 sane

#更详细的规范模式命令,配置串口 ttyUSB1 、115200波特率、8数据位、1停止位、无奇偶校验、关闭回显
stty -F /dev/ttyUSB1 sane speed 115200 cs8 -cstopb -parenb -echo 

!NOTE

RS485应使用哪种模式?

答:raw模式。RS485通常用于工业通信,传输的是二进制数据包(如Modbus RTU、自定义协议等),数据中可能包含任意字节值(0x00-0xFF),包括换行符\n(0x0A),如果使用规范模式,遇到数据中的0x0A会被误认为是行结束符,导致数据截断。

步骤2:对端接好串口测试工具

最好用正点原子XCOM串口测试工具,配置成与串口1同样的波特率,校验,停止位等。

步骤3:echo 操作串口发送

就可以在XCOM串口工具看到收到的数据了。

!IMPORTANT

为什么测试一个串口非得用Windows端测试工具?

因为echo会默认输入换行符。在讲到通过stty工具测试UART时,参考这个野火链接(https://doc.embedfire.com/linux/rk356x/quick_start/zh/latest/quick_start/40pin/uart/uart.html)告诉大家,`echo "12345" > /dev/ttyUAB0`这个命令中,echo是默认带换行符的。虽然有一些参数可以禁止echo输入换行符,但是因为串口终端模式的影响,也是不保险的。尽量使用Windows一侧的串口发送工具比如正点原子的XCOM,可以真正看到你发送了啥东西。

在用 cat /dev/ttyUSB1 测试时遇到的问题:

我发现在执行 cat /dev/ttyUSB0 时(串口工作在RAW模式),如果串口收到数据,串口还会回将数据转发回去。

这并不是 cat 命令在转发数据,而是 Linux 内核的终端(TTY)子系统在"帮倒忙"。即使你将串口设置为了 RAW 模式,如果终端配置中的某些标志位没有被彻底关闭,内核在接收到串口数据后,会默认触发"回显(Echo)"机制,自动把收到的数据再写回到串口的发送端。所以需要在接收端打开 -echo这个stty命令参数(别整这么麻烦啦,直接用正点原子的XCOM windows工具不香吗)。

相关推荐
代码熬夜敲Q1 小时前
ENSP 网络工程实验
linux·运维·服务器
csdn_life182 小时前
OpenClaw v2026.5.12+ 高级密钥管理:使用SecretRef实现真正的隐蔽存储
linux·openclaw
Terrence Shen2 小时前
Claude Code Harness 源码学习讲义
linux·学习·ubuntu
赵药师2 小时前
dpkg: warning: files list file for package ‘libselinux1:amd64‘ missing;
linux·运维·服务器
STDD2 小时前
Samba 文件共享:Linux 服务器与 Windows/Mac 共享文件夹
linux·服务器·windows
liudanzhengxi3 小时前
CRM系统技术文章
linux·服务器·网络·人工智能·新人首发
南境十里·墨染春水3 小时前
守护进程编程流程
linux·学习
eggrall4 小时前
Linux进程信号——像收快递一样理解 Linux 信号
linux·开发语言·c++
灰色人生qwer4 小时前
Python 规则:带默认值的参数必须放在不带默认值的后面
linux·windows·python