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)电平转换芯片
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2490376.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!