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

相关推荐
北山有鸟3 小时前
用开发板的.config替换ubuntu中内核源码目录的.config
linux·运维·ubuntu
jcbut4 小时前
离线安装dify 1.7
linux·运维·dify
云计算磊哥@4 小时前
运维开发宝典024-Linux云计算运维入门阶段总结
linux·运维·运维开发
江华森4 小时前
《Linux内核技术实战:从Page Cache到CPU调度的深度解构》博客大纲(26讲精编版)
linux
知无不研5 小时前
对套接字的深入理解
linux·服务器·网络·c++·socket·网络套接字
wuminyu7 小时前
Java锁机制之Java对象重量级锁源码剖析
java·linux·c语言·jvm·c++
deadbird7 小时前
Xbox 无线适配器 Linux 设置指南
linux
wait a minutes8 小时前
Ubuntu 升级后 NVIDIA 驱动修复指南
linux·运维·ubuntu
bush49 小时前
嵌入式linux学习记录十二,mmap
java·linux·学习
似水এ᭄往昔9 小时前
【Linux系统编程】--进程概念
linux·运维·服务器