【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工具不香吗)。

相关推荐
GeW4 小时前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux
mounter6254 小时前
深入理解 gccrs:GCC 如何实现 Rust 编译器,以及编译 Linux 内核面临的挑战
linux·驱动开发·rust
垚垚学技术_聚焦云原生4 小时前
Ansible Playbook 进阶:when 条件、loop 循环、handlers 触发器落地
linux·ansible·自动化运维·devops
无足鸟ICT5 小时前
【RHCA+】type命令(判断命令类型)
linux·ssh·bash
咸鱼梦想家π5 小时前
Linux开发工具(下)
linux·运维·服务器
LHICOD5 小时前
Linux-1
linux·ip·vmware·虚拟机·cmd·ping
丰锋ff7 小时前
用户管理命令
linux·运维·服务器
刚入门的大一新生8 小时前
Linux-线程概念
linux·jvm
H.莓飛8 小时前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
Zenova EdgeOS8 小时前
Linux 日志实战:用 journalctl 精准检索与治理工业边缘日志
linux·运维·chrome