当前位置: 首页 > article >正文

UART 入门指南(Linux新手版)

UART 入门指南Linux新手版适用对象嵌入式/电子/通信初学者目录什么是 UARTUART 工作原理硬件接口与接线通信参数详解编程示例常见问题与调试1. 什么是UART1.1 基本定义UART 的全称是Universal Asynchronous Receiver/Transmitter通用异步收发传输器。它是一种串行通信协议用于在两个设备之间传输数据。1.2 串行 vs 并行并行通信多个比特同时传输需要多根线串行通信比特依次传输只需两根线1.3 UART 的特点特点说明异步不需要时钟信号依靠波特率同步全双工可同时发送和接收数据点对点只能连接两个设备一对一简单硬件和软件实现都简单1.4 应用场景GPS 模块接收 NMEA 定位数据蓝牙模块AT 指令配置、数据传输WiFi 模块ESP8266/ESP32 通信传感器温湿度、气压等数据采集调试输出嵌入式系统打印调试信息bootloader设备固件烧录2. UART 工作原理2.1 信号线定义UART 使用两根数据线信号名称功能方向TXTransmit发送数据输出RXReceive接收数据输入空闲状态无数据传输时TX 和 RX 都保持高电平逻辑 1。2.2 连接规则交叉连接发送端接接收端接收端接发送端。┌──────────┐ ┌──────────┐ │ 设备 A │ │ 设备 B │ │ │ │ │ │ TX ───┼──────────────┼──→ RX │ │ RX ←──┼──────────────┼─── TX │ │ GND ───┼──────────────┼──→ GND │ └──────────┘ └──────────┘ 要点 1. A 的 TX 接 B 的 RX 2. A 的 RX 接 B 的 TX 3. GND 必须连接共地2.3 数据帧结构一个完整的 UART 数据帧由以下部分组成帧结构 [起始位] [数据位] [校验位] [停止位] ↓ ↓ ↓ ↓ 电平 0 D0-D7 P 1各部分说明部分电平长度作用起始位低 (0)1 比特通知接收方开始接收数据位0 或 15-9 比特实际数据常用 8 比特校验位0 或 10 或 1 比特错误检测可选停止位高 (1)1-2 比特表示字符结束2.4 完整帧示例发送字符 ‘A’字符 ‘A’ ASCII 0x41 二进制 01000001配置8N18 数据位无校验1 停止位时间轴 ──────────────────────────────────────────────────────→ 电平 1 ─┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌─── │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 0 ─┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ └─── │ │ │← 起始 →←─────── 数据位 (8 比特) ──────→← 停止 →│ │ 位 LSB MSB 位 │ │ D0 D1 D2 D3 D4 D5 D6 D7 │ │ 1 0 0 0 0 0 1 0 │ 传输顺序起始位→D0→D1→D2→D3→D4→D5→D6→D7→停止位 (0) (1) (0) (0) (0) (0) (0) (1) (0) (1) LSB MSB注意UART 传输顺序是低位在前LSB first高位在后。2.5 波特率详解波特率Baud Rate每秒传输的比特数量。常见波特率波特率每比特时间每秒字符数 (8N1)典型应用1200833.33 μs120老式调制解调器2400416.67 μs240老式调制解调器4800208.33 μs480工业仪表9600104.17 μs960GPS 模块1920052.08 μs1920蓝牙模块3840026.04 μs3840工业设备5760017.36 μs5760高速传感器1152008.68 μs11520常用高速率2304004.34 μs23040WiFi 模块波特率计算每比特时间 1 / 波特率 例如波特率 9600 每比特时间 1 / 9600 0.00010417 秒 104.17 微秒 每秒字符数8N1 波特率 / 10 例如9600 / 10 960 字符/秒波特率误差误差范围结果 2%可靠通信2% - 4%可能偶尔出错 4%通信失败出现乱码3. 硬件接口与接线3.1 电气特性参数值说明逻辑 0Space0V低电平逻辑 1MarkV高电平3.3V 或 5V空闲状态V高电平3.2 电平标准标准逻辑 0逻辑 1应用TTL0V3.3V 或 5V单片机、ESP32RS-2323~15V-3~-15V老式电脑串口RS-485差分信号差分信号工业现场总线注意不同电平标准不能直接连接3.3 TTL 电平接线┌──────────┐ ┌──────────┐ │ 设备 A │ │ 设备 B │ │ (3.3V) │ │ (3.3V) │ │ │ │ │ │ TXD ───┼──────────────┼──→ RXD │ │ RXD ←──┼──────────────┼─── TXD │ │ GND ───┼──────────────┼──→ GND │ │ VCC ───┼─────(选接)───┼──→ VCC │ └──────────┘ └──────────┘ 注意 1. TXD 接 RXD交叉 2. RXD 接 TXD交叉 3. GND 必须连接3.4 USB 转 UART 模块电脑没有 UART 接口需要使用 USB 转 UART 模块常见芯片 ┌─────────┐ CH340 - 国产便宜常用 ├─────────┤ CP2102 - 稳定驱动完善 ├─────────┤ FT232 - FTDI 出品贵稳定 ├─────────┤ PL2303 - 常见于老设备 └─────────┘ 接线 USB 转 UART 模块 目标设备 ┌──────────┐ ┌──────────┐ │ TXD ──┼───────────┼──→ RXD │ │ RXD ←─┼───────────┼─── TXD │ │ GND ──┼───────────┼──→ GND │ │ VCC ──┼──(选接)───┼──→ VCC │ └──────────┘ └──────────┘3.5 常见模块接线GPS 模块如 NEO-6MUSB 转 UART GPS 模块 ┌──────────┐ ┌──────────┐ │ TXD ──┼──────→│ RXD │ │ RXD ←─┼───────│ TXD │ │ GND ──┼───────│ GND │ │ VCC ──┼───────│ VCC 3.3V │ └──────────┘ └──────────┘蓝牙模块HC-05/HC-06USB 转 UART 蓝牙模块 ┌──────────┐ ┌──────────┐ │ TXD ──┼──────→│ RXD │ │ RXD ←─┼───────│ TXD │ │ GND ──┼───────│ GND │ │ VCC ──┼───────│ VCC 5V │ └──────────┘ └──────────┘ESP8266/ESP32USB 转 UART ESP8266 ┌──────────┐ ┌──────────┐ │ TXD ──┼──────→│ RXD │ │ RXD ←─┼───────│ TXD │ │ GND ──┼───────│ GND │ │ VCC ──┼───────│ VCC 3.3V │ │ │ │ CH_PD ───┼──→ 3.3V └──────────┘ └──────────┘3.6 硬件流控制RTS/CTS发送方 接收方 ┌──────────┐ ┌──────────┐ │ TXD ──┼──────────→│ RXD │ │ RXD ←─┼───────────│ TXD │ │ RTS ───┼──────────→│ CTS │ │ CTS ←─┼───────────│ RTS │ │ GND ──┼───────────│ GND │ └──────────┘ └──────────┘ RTS Request To Send请求发送 CTS Clear To Send允许发送4. 通信参数详解4.1 参数格式XN1格式[数据位][校验][停止位] 例如8N1 │││ ││└── 1 个停止位 │└─── N None (无校验) └───── 8 个数据位4.2 数据位数据位应用5老式电传打字机7ASCII 字符0-1278最常用可传二进制9特殊协议如 DMX5124.3 校验位类型说明None (无)不使用校验最常用Odd (奇)1 的个数为奇数Even (偶)1 的个数为偶数4.4 常用配置配置应用8N1最常用默认选择7E1老式设备、仪器仪表8E1工业协议如 Modbus5. 编程示例5.1 Linux 串口设备设备类型设备文件USB 转串口/dev/ttyUSB0板载串口/dev/ttyS0ARM 串口/dev/ttyAMA05.2 权限设置# 查看设备权限ls-la/dev/ttyUSB0# crw-rw---- 1 root dialout 188, 0 Apr 3 10:00 /dev/ttyUSB0# 将用户添加到 dialout 组永久生效sudousermod-a-Gdialout$USER# 临时方案直接给权限sudochmod666/dev/ttyUSB05.3 命令行工具最简单方法 1echo cat快速测试# 配置串口9600 波特率8N1原始模式stty-F/dev/ttyUSB09600raw# 发送数据echoHello/dev/ttyUSB0# 接收数据会阻塞等待cat/dev/ttyUSB0方法 2picocom推荐# 安装sudoaptinstallpicocom# 连接串口9600 波特率picocom-b9600/dev/ttyUSB0# 常用参数# -b, --baud 波特率 (9600, 115200 等)# -f, --flow 流控 (n无h硬件x软件)# -d, --databits 数据位 (5-8)# -p, --parity 校验 (n无o奇e偶)# -s, --stopbits 停止位 (1-2)# -e, --echo 本地回显# -l, --logfile 记录到文件# 示例115200 8N1带回显记录日志picocom-b115200--echo-luart.log /dev/ttyUSB0# 退出CtrlA然后 CtrlX方法 3screen# 连接串口screen/dev/ttyUSB09600# 退出CtrlA然后 D方法 4minicom# 安装sudoaptinstallminicom# 配置首次使用sudominicom-s# 菜单配置# Serial device - /dev/ttyUSB0# Bps/Par/Bits - 9600 8N1# Hardware Flow Ctrl- No# Software Flow Ctrl- No# Save as dfl - 保存为默认# 直接连接minicom-b9600-D/dev/ttyUSB0# 退出CtrlA然后 X方法 5stty read/write脚本用#!/bin/bash# uart_test.shDEV/dev/ttyUSB0BAUD9600# 配置串口stty-F$DEV$BAUDraw-echo# 发送数据echoAT$DEV# 读取响应非阻塞timeout1cat$DEV5.5 Shell 脚本示例发送 AT 指令#!/bin/bash# at_command.shDEV/dev/ttyUSB0# 配置串口stty-F$DEV115200raw-echo# 发送 AT 指令echo发送ATechoAT$DEV# 读取响应1 秒超时echo响应timeout1cat$DEV批量发送指令#!/bin/bash# batch_at.shDEV/dev/ttyUSB0stty-F$DEV115200raw-echosend_at(){echoAT$1$DEVecho-n$1: timeout1cat$DEV|head-1sleep0.5}send_at# AT 测试send_atGMR# 版本信息send_atCSQ# 信号质量6. 常见问题与调试6.1 无法打开设备现象Permission denied解决sudousermod-a-Gdialout$USER# 重新登录生效6.2 收到乱码可能原因波特率不匹配最常见TX/RX 接反电平不匹配GND 未连接检查确认波特率一致检查接线TX 接 RX确认 GND 连接6.3 收不到数据回环测试USB 转 UART ┌──────────┐ │ TXD ──┬──┼──→ RXD │ RXD ←─┴──┼─── │ GND ─────┼──→ GND └──────────┘ 发送数据能收到说明模块正常6.4 数据丢失解决增加超时时间增加读取频率# stty 增加超时stty-F/dev/ttyUSB09600rawtime506.5 调试技巧十六进制查看# 使用 xxd 查看原始数据cat/dev/ttyUSB0|xxd# 使用 hexdumpcat/dev/ttyUSB0|hexdump-C日志记录# 使用 tee 记录收发数据picocom-b9600/dev/ttyUSB0-luart.log# 后台记录cat/dev/ttyUSB0|teeuart_rx.log使用 socat 调试# 安装sudoaptinstallsocat# 创建虚拟串口对测试用socat-d-dpty,raw,echo0pty,raw,echo0# 输出示例# /dev/pts/10 - /dev/pts/11# 一个终端向 pts/10 写数据另一个从 pts/11 读取附录快速参考项目值空闲电平高 (1)起始位低 (0)停止位高 (1)常用波特率9600, 115200常用配置8N1传输顺序LSB first接线规则TX 接 RX术语表术语说明波特率每秒传输比特数起始位传输开始的低电平停止位传输结束的高电平全双工可同时收发流控制防止数据丢失常用芯片芯片电平特点CH3405V/3.3V国产便宜CP21023.3V稳定FT2325V/3.3V贵稳定MAX232RS-232 (±3~±15V)电平转换芯片

相关文章:

UART 入门指南(Linux新手版)

UART 入门指南(Linux新手版) 适用对象:嵌入式/电子/通信初学者 目录 什么是 UARTUART 工作原理硬件接口与接线通信参数详解编程示例常见问题与调试 1. 什么是UART 1.1 基本定义 UART 的全称是 Universal Asynchronous Receiver/Transmitte…...

C++20 协同调度原语:利用 std::atomic::wait/notify 实现低功耗自旋锁在高并发下的快速响应协议

各位同仁,女士们,先生们,欢迎来到今天的技术讲座。在现代C编程中,高性能与低功耗的追求从未停止。随着多核处理器的普及和异步编程模型的兴起,对并发原语的精细化控制变得尤为关键。C20标准为我们带来了诸多激动人心的…...

C++ 硬件特征自适应分发:利用 C++ 特性实现对不同 CPU 指令集(AVX2/AVX-512)的运行时代码路径最优选择

C 硬件特征自适应分发:运行时代码路径最优选择各位技术爱好者,大家好!在现代高性能计算领域,充分挖掘硬件潜力是提升程序性能的关键。我们知道,CPU架构在不断演进,其指令集也在持续扩展,以支持更…...

uniapp实战:uview Collapse组件动态数据加载后高度异常的3种解决方案

Uniapp实战:uView Collapse组件动态数据加载后高度异常的深度解决方案 在Uniapp开发中,uView UI库的Collapse折叠面板组件因其简洁易用而广受欢迎。但当我们需要动态加载数据并展开面板时,经常会遇到一个棘手的问题:面板高度计算不…...

ROS2 Jazzy机器人导航避坑指南:详解Navigation2参数配置中那些容易出错的‘坑’

ROS2 Jazzy导航系统参数配置实战:从踩坑到精通的避坑手册 当你第一次打开ROS2 Jazzy的Navigation2参数配置文件时,是否感觉像是面对一本没有注释的古老秘籍?那些看似简单的参数背后,往往隐藏着让机器人"发疯"的陷阱。本…...

在PhpStudy中进行PHP版本切换的详细流程(Linux和Windows)

在使用多样化的 PHP Web 应用程序时,选择合适的 PHP 版本至关重要。例如,一些老旧的应用程序可能是基于早期版本的 PHP 开发的,如果使用最新版本的 PHP 来运行,可能会遇到兼容性问题,导致错误。反之,如果用…...

PHP中比较两个对象的几种方式小结

在PHP中,比较两个对象并不是一件直接明了的事情,因为对象之间的比较通常依赖于它们的属性和状态,而这些属性和状态可能非常复杂且多样化。PHP提供了几种方式来比较对象,但每种方式都有其特定的用途和限制。1. 使用和运算符在PHP中…...

PHP脚本设置无限执行时间的四种方法

为 PHP 脚本设置无限执行时间是一个在特定场景下可能需要的操作,比如执行长时间运行的后台任务、数据迁移、大批量数据处理等。然而,值得注意的是,设置无限执行时间并不是一种推荐的做法,因为它可能导致服务器资源被长时间占用&am…...

ThinkPHP实现定时任务的操作步骤

到一个需求:定时检查设备信息,2分钟没有心跳的机器,推送消息给相关人员,用thinkphp5框架,利用框架自带的任务功能与crontab配合来完成定时任务。第一步:分析需求先写获取设备信息,2分钟之内没有…...

快速原型利器:在快马平台一键对比不同AI模型的代码生成效果

最近在开发一个需要快速验证AI模型代码生成能力的项目时,发现手动切换不同模型测试效率太低。于是尝试用InsCode(快马)平台搭建了个模型对比工具,意外地好用,分享下具体实现思路和踩坑经验。 核心需求拆解 这个工具的核心目标是解决三个痛点&…...

Ubuntu24.04下Qt6高效安装指南:从镜像加速到依赖解决

1. 准备工作:系统检查与资源规划 在开始安装Qt6之前,我们需要先做好基础准备工作。很多新手容易忽略这个环节,结果安装到一半才发现磁盘空间不足或者系统版本不兼容。我自己就曾经吃过这个亏,当时安装到90%突然报错,排…...

Java 从入门到精通(十一):异常处理与自定义异常,程序报错时到底该怎么处理?

Java 从入门到精通(十一):异常处理与自定义异常,程序报错时到底该怎么处理? 很多人刚学 Java 时,对“异常”这件事的第一反应通常很直接: 代码报错了控制台一大片红字程序停了然后开始慌 于是很…...

提升51%系统响应:开源工具Win11Debloat让老旧电脑焕发新生

提升51%系统响应:开源工具Win11Debloat让老旧电脑焕发新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...

面向商业航天的高可靠电机控制系统:从环境约束到芯片实现

摘要商业航天已成为全球航天产业高质量发展的核心增长极,电机控制系统作为运载火箭、卫星平台、空间载荷与在轨服务装备的关键执行机构,其在轨可靠性、控制精度与环境适应性直接决定航天任务成败。本文系统梳理商业航天电机控制领域的技术演进、典型负载…...

如何在iPhone 6s上解决内核利用失败问题:TrollInstallerX完全指南

如何在iPhone 6s上解决内核利用失败问题:TrollInstallerX完全指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否在使用TrollInstallerX越狱iPhone 6…...

深入解析Flash芯片测试:从基础操作到高级模式切换

1. Flash芯片测试基础入门 第一次接触Flash芯片测试时,我也被各种专业术语搞得晕头转向。经过几个项目的实战,我发现只要掌握几个核心概念,就能快速上手。Flash芯片和我们平时用的U盘、SSD本质上是一类东西,但测试时需要关注的点…...

Unity UXML和USS实战:像搭积木一样设计你的第一个编辑器窗口

Unity UXML与USS模块化开发指南:构建可维护的编辑器界面 在Unity编辑器扩展开发中,界面设计往往成为制约开发效率的瓶颈。传统IMGUI虽然灵活,但维护成本随界面复杂度呈指数级增长。UI Toolkit带来的UXML/USS工作流,正在重塑Unity工…...

从仿真到焊板:手把手教你用741运放和Multisim搞定一个1kHz文氏电桥振荡器

从仿真到焊板:用741运放构建1kHz文氏电桥振荡器的工程实践指南 当你第一次尝试将课本上的振荡电路理论转化为实际可工作的电路时,往往会发现仿真完美的设计在实际搭建时问题百出。文氏电桥振荡器作为经典的RC正弦波发生器,是理解振荡原理和掌…...

用Quartus原理图搭个抢答器:从74175到数码管,一个FPGA初学者的完整项目复盘

从零构建FPGA抢答器:一位工程师的74系列芯片实战手记 第一次接触FPGA开发时,我被Quartus原理图界面上那些密密麻麻的逻辑门和连线吓得不轻。直到把课堂上学到的数字电路知识真正落地成一个抢答器项目,才突然理解了那些看似抽象的触发器、计数…...

UML/结构/创建/行为—计算机等级考试—软件设计师考前备忘录—东方仙盟

UML → 创建型 5 种 → 结构型 7 种 → 行为型 11 种每种:定义(教材版) 1 道真题选择题你直接复制进 Word,考前背这一篇就够。一、UML 核心考点(上午选择 下午应用题)1. 用例图(Use Case&#…...

零基础玩转PowerPaint-V1:手把手教你用Gradio实现智能修图,小白也能轻松上手

零基础玩转PowerPaint-V1:手把手教你用Gradio实现智能修图,小白也能轻松上手 你是不是也遇到过这样的烦恼?拍了一张很满意的照片,但背景里总有个碍眼的垃圾桶;或者找到一张完美的素材图,偏偏有个大大的水印…...

圣女司幼幽-造相Z-Turbo进阶用法:用Python脚本批量生成角色图教程

圣女司幼幽-造相Z-Turbo进阶用法:用Python脚本批量生成角色图教程 1. 从手动点击到自动生成:为什么需要脚本批量处理? 如果你已经体验过圣女司幼幽-造相Z-Turbo的Web界面,手动输入提示词、点击生成按钮,看着一张张精…...

YOLO12边缘设备部署指南:Nano版仅需2GB显存,低配置也能跑

YOLO12边缘设备部署指南:Nano版仅需2GB显存,低配置也能跑 1. 引言 在计算机视觉领域,实时目标检测一直是热门研究方向。YOLO系列模型因其出色的速度和精度平衡而广受欢迎。2025年,Ultralytics推出了最新一代YOLO12模型&#xff…...

Z-Image-Turbo-辉夜巫女应用:快速生成动漫角色,打造个人风格画师

Z-Image-Turbo-辉夜巫女应用:快速生成动漫角色,打造个人风格画师 1. 项目介绍与核心功能 1.1 什么是Z-Image-Turbo-辉夜巫女? Z-Image-Turbo-辉夜巫女是一款基于阿里巴巴通义实验室Z-Image-Turbo模型的图像生成工具,专门针对动…...

Retinaface+CurricularFace人脸识别:高清人脸比对效果案例分享

RetinafaceCurricularFace人脸识别:高清人脸比对效果案例分享 1. 开篇:为什么选择这个组合方案 人脸识别技术已经渗透到我们生活的方方面面,从手机解锁到机场安检,从考勤打卡到金融认证。但在实际应用中,一个稳定可靠…...

【花雕动手做】ESP32-S3 + MimiClaw 实战:通过飞书自然语言指令控制板载 WS2812 彩灯

【花雕动手做】嵌入式 AI Agent 实战:MimiClaw ESP32-S3 接入飞书,远程控制板载 RGB 全彩灯效 ——从源码修改到飞书指令,手把手打造一个能“听懂颜色话”的嵌入式 AI 智能体 一、引言:当“养龙虾”热潮遇到嵌入式 AI 2026 年开春…...

信创运维避坑指南:统信UOS服务器离线安装软件,这些细节你注意了吗?

信创运维实战:统信UOS服务器离线部署全流程精解 在信创产业快速发展的背景下,越来越多的企业开始将业务系统迁移到国产操作系统平台。统信UOS作为国产操作系统的代表之一,其服务器版本在政务、金融等关键领域得到广泛应用。然而,…...

【花雕学编程】嵌入式 AI Agent:从云端到终端,开启物理世界智能新范式

【花雕学编程】嵌入式 AI Agent:从云端到终端,开启物理世界智能新范式 ——当 AI 不再只是屏幕里的聊天窗口,而是真正走进工厂、家庭和城市——嵌入式 AI Agent 正在重新定义“智能”的边界 引言 当下 AI 热潮的本质,是对“AI 从云…...

从社交推荐到药物发现:GAT(图注意力网络)在5个工业级场景下的落地实践

从社交推荐到药物发现:GAT在5个工业级场景下的落地实践 当AlphaFold2用图神经网络破解蛋白质折叠难题时,工业界突然意识到:图注意力网络(GAT)早已不再是学术玩具。在社交平台每天处理数十亿次关系推理的推荐系统里&…...

RStudio Server卡在‘R启动慢’?别慌,手把手教你清理session文件恢复访问

RStudio Server启动缓慢的深度排查与解决方案 当你正赶着提交分析报告,RStudio Server却卡在"R is taking longer to start than usual"的提示界面,那种焦虑感数据工作者都懂。这不是简单的等待问题,而是系统在尝试恢复一个可能已经…...