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

相关推荐
盐焗鹌鹑蛋26 分钟前
【Linux】进程控制
linux
盐焗鹌鹑蛋2 小时前
【Linux】进程程序替换
linux
鸠摩智首席音效师2 小时前
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead
linux
tianyuanwo3 小时前
DevOps主机管理员视角:企业级Linux主机权限管理策略与实践
linux·服务器·devops
郭涤生3 小时前
Windows + Ubuntu 双系统启动故障修复
linux·windows·ubuntu
三言老师3 小时前
CentOS8 Firewalld 高级规则中级实操教程
linux·运维·服务器·网络·centos
tedcloud1235 小时前
Impeccable 部署指南:开源前端设计工具 Linux 环境搭建实践
linux·运维·服务器·前端·人工智能·开源
风曦Kisaki5 小时前
# Kubernetes(K8s)笔记Day12 :K8s 七层代理(Ingress 和 Ingress Controller)
linux·笔记·云原生·容器·kubernetes
大黄说说5 小时前
SQL Server 执行计划怎么看?快速定位 SQL 慢的根源
java·linux·数据库
yunwei377 小时前
eBPF 教程:精准隔离已建立的 TCP 连接
linux·安全·开源