通信协议——UART

本文全面解析了UART(通用异步收发传输器)的工作原理,包括其通信机制、硬件连接方式及协议规范,阐述了UART作为低速串行通信协议在各领域的广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UART概述

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。UART作为一种低速通信协议,广泛用于通信领域等各种场合。

UART通信原理

将数据的二进制位一位一位的进行传输。在UART通讯协议中信号线上的状态位高电平代表’1’低电平代表’0’。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。

UART硬件连接

硬件连接比较简单,仅需要3条线,注意连接时两个设备UART电平,如电平范围不一致请做电平转换后再连接,如下图所示:

  • TX:发送数据端,要接对面设备的RX
  • RX:接收数据端,要接对面设备的TX
  • GND:保证两设备共地,有统一的参考平面

在这里插入图片描述

UART协议

空闲位:
UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平
起始位:
先发出一个逻辑”0”的信号,表示传输字符的开始。
数据位:
起始位之后就是要传输的数据,数据可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位。
奇偶校验位:
数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验分几种方式:
1.无校验(no parity)
2.奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’。
3.偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。
4.mark parity:校验位始终为1
5.space parity:校验位始终为0
停止位:
数据结束标志,可以是1位,1.5位,2位的高电平。
波特率:
数据传输速率使用波特率来表示,单位bps(bits per second),常见的波特率9600bps,115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us。
在这里插入图片描述

### UART通信协议的标准和规范 UART(Universal Asynchronous Receiver/Transmitter)是一种通用的异步串行通信协议,主要用于将数据在串行通信与并行通信之间进行转换。尽管UART本身并不直接定义具体的物理层标准,但它通常会配合一些常见的物理层接口标准来实现实际应用中的通信功能。 #### 物理层标准 UART可以支持多种物理层接口标准,这些标准主要定义了通信过程中的电气特性、传输速率以及连接方式等内容。以下是几种常用的物理层标准: - **RS232**: 这是最经典的UART物理层标准之一,适用于短距离通信场景。它规定了通信口的电气特性、传输速率范围以及其他机械属性等细节[^1]。 - **RS422 和 RS485**: 这些标准提供了更高的抗干扰能力和更远的有效通讯距离相比RS232而言。它们常被应用于工业环境中需要稳定可靠的数据交换场合下[^2]。 #### 数据帧结构 UART通过特定格式的数据帧来进行信息传递。一个典型的数据帧由以下几个部分组成: 1. **起始位 (Start Bit)**: 表明即将开始传送一个新的字节, 总是一个低电平信号. 2. **数据位 (Data Bits)**: 可配置长度一般为5到9比特不等,默认情况下设置成8bit表示ASCII字符集内的每一个字母或者符号. 3. **奇偶校验位 (Parity Bit - Optional)**: 用于错误检测目的而存在; 如果启用了此选项,则可以选择奇数还是偶数作为验证依据. 4. **停止位 (Stop Bits)**: 结束当前正在发送的信息单元标志符, 至少持续高电平时长等于或大于两位时间间隔.[^3] #### 工作原理概述 当CPU准备向外部设备发送数据时,它先将以并形式存在的多位二进制数值写入到UART内部寄存器里去。接着,UART按照预先设定好的参数(比如波特率大小等等),把这些离散化的数字序列逐步转变成为连续变化模拟电压波形沿着单条导线上传输出去。同样道理,在接收到外界传来的脉冲流之后,目标端也会经历相反方向的操作流程——也就是把那些经过编码后的电信号重新解析还原回原始状态供后续处理使用。整个过程中涉及到的关键要素包括但不限于如下几个方面: - 波特率一致性的维持; - 正确识别各个组成部分边界位置; - 实现有效的握手机制确保双方能够及时响应彼此请求。[^4] ```python # Python 示例代码展示如何初始化PySerial库以建立基于UART的串行连接 import serial ser = serial.Serial( port='COM3', # 替换为你自己的端口号 baudrate=9600, # 设置合适的波特率 bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE) if ser.isOpen(): print('Port is open') else: print('Failed to open the port') try: while True: data = input("Enter message>") if not data: break ser.write((data + '\n').encode()) response = ser.readline().decode() print(f'Received from device:{response}') finally: ser.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值