1、串口通讯
串口通信是一种设备间常用的串行通信方式,串口按位(bit)发送和接受字节。而串口通信协议是指规定了数据包的内容(起始位、主体数据、校验位和停止位),常见的协议有RS232、RS485、RS422等。
对于通信协议,采用分层的方式分为物理层和协议层。
- 物理层:电气特性、机械接口、信号类型等
- 协议层:数据传输的格式、时序和控制逻辑等。
2、RS232
RS232(Recommended Standard 232)是由 EIA(电子工业协会)制定的串行通信标准。属于全双工,异步通信。
2.1、物理层特性
1、电气特性
- 逻辑电平定义:
- 逻辑“1”:-3V~-15V
- 逻辑“0”:+3V~+15V
- 传输距离
- 无调制解调器时,最大约15m。
- 传输速率
- 常见标准速率为9600bps、19200bps、115200bps等。
2、机械接口
常见的接口类型为DB-9接口(现在一般只用TXD、RXD和GND信号),以及DB-25接口(早期使用)。
一般是将发送设备的TXD接口连接到接收设备的RXD接口,发送设备的RXD接口连接到接收设备的TXD接口。
3、信号类型
- 数据信号:
- TXD(Transmit Data):发送数据。
- RXD(Receive Data):接收数据。
- 控制信号:
- RTS(Request To Send):请求发送数据。
- CTS(Clear To Send):允许发送(对 RTS 的响应)。
- DTR(Data Terminal Ready):终端就绪。
- DSR(Data Set Ready):设备就绪。
- DCD(Data Carrier Detect):检测到载波(用于调制解调器)。
2.2、协议层规范
1、数据传输格式
- 帧结构:
起始位(1位,低电平) + 数据位(5-8位,低位在前) + 校验位(0或1位) + 停止位(1/1.5/2位,高电平)
关键参数:
- 波特率:每秒传输的码元数,需收发双方一致(如 9600bps)。
- 数据位长度:常见 5、6、7、8 位(8 位时可传输任意字节数据)。
- 校验方式:无校验(None)、奇校验(Odd)、偶校验(Even)。
- 停止位长度:1 位(常用)、1.5 位(极少)、2 位。
数据帧编码类型
虽然RS232的数据帧结构(起始位+数据位+校验位+停止位)是固定的,但数据位的内容可以采用多种编码格式。- ASCII编码:将每个字符映射为7位或8位二进制值(如 'A’→0x41)。
- 二进制编码:直接传输原始二进制数据。
- 十六进制字符串:将二进制数据转换为ASCII字符表示(如0XAB->“AB”)
- 自定义协议:按特定协议组织数据(如Modbus的功能码+数据域+CRC校验)。
常见数据编码类型优缺点和应用场合对比:
编码方式 | 优点 | 缺点 | 典型应用场景 |
---|---|---|---|
ASCII | 可读性强、调试方便 | 传输效率低 | 调试信息、文本协议 |
二进制 | 传输效率高、适合大数据 | 调试困难 | 传感器数据、固件升级 |
十六进制 | 兼容性好、易解析 | 双倍占用带宽 | 调试工具、兼容性协议 |
自定义协议 | 功能强大、可扩展性高 | 开发复杂度高 | 工业控制、设备通信 |
3、RS485
RS485 是一种基于差分信号传输的串行通信标准,由 EIA/TIA-485 定义,主要解决 RS232 在远距离、多节点通信中的不足。属于半双工、异步串行。
3.1、物理层特性
1、电气特性
- 差分信号传输:
- 逻辑 “1”:A 线电压比 B 线高 200mV 以上(如 A=+2V,B=0V)。
- 逻辑 “0”:B 线电压比 A 线高 200mV 以上(如 A=0V,B=+2V)。
- 抗干扰性:差分信号可抑制共模干扰,适合工业环境。
- 传输距离与速率:
- 标准传输距离:1200 米(速率≤100kbps)。
- 高速传输:速率 10Mbps 时,距离≤12 米(需匹配终端电阻)。
- 节点数量:
- 理论支持 32 个节点(使用 120Ω 终端电阻)。
- 通过增加收发器可扩展至 128/256 个节点。
2、机械接口
- 常见接口类型:
- DB-9 接口:工业设备常用,通常只使用 A、B、GND 三根线。
- RJ45 接口:部分设备使用(如安防摄像头),见到过用这个接口的,但是没用双绞,也是震惊了!还是量产产品。
- 端子排:便于布线和工业应用。
- 线缆要求:
- 屏蔽双绞线(STP),特性阻抗 120Ω。
- 推荐线规:24AWG(0.51mm²)或更粗。
3、. 信号类型
- 数据信号:
- A 线(Data+):差分正信号。
- B 线(Data-):差分负信号。
- 控制信号:
- DE(Driver Enable):发送使能(高电平有效)。
- RE(Receiver Enable):接收使能(低电平有效)。
- 多数收发器将 DE 和 RE 短接,通过一个引脚控制收发方向。
3.2、协议层规范
RS485 本身只定义物理层,协议层需结合上层协议(如 Modbus、Profibus 等)或自定义。
4、RS422
RS422(EIA-422)是由电子工业协会(EIA)制定的全双工差分串行通信标准,基于 RS485 发展而来,主要用于高速、长距离数据传输。
4.1、物理层特性
1、 电气特性
- 差分信号传输:
- 逻辑 “1”:差分电压 ≥ +200mV(如 A=+2V,B=0V)。
- 逻辑 “0”:差分电压 ≤ -200mV(如 A=0V,B=+2V)。
- 抗干扰性:差分信号抑制共模噪声,适合工业环境。
- 传输距离与速率:
- 标准传输距离:1200 米(速率≤100kbps)。
- 高速传输:10Mbps 时距离可达 12 米(需匹配终端电阻)。
- 驱动能力:
- 单个驱动器可支持最多 10 个接收器(负载系数 0.1)。
2、机械接口
- 单个驱动器可支持最多 10 个接收器(负载系数 0.1)。
- 常见接口类型:
- DB-9/DB-25 接口:工业设备常用,通常使用 4 根数据线(TX+、TX-、RX+、RX-)。
- RJ45 接口:部分高速设备使用。
- 线缆要求:
- 屏蔽双绞线(STP),特性阻抗 100-120Ω。
- 推荐线规:24AWG(0.51mm²)或更粗。
3、信号类型
- 数据信号:
- 发送差分对:TX+(发送正)、TX-(发送负)。
- 接收差分对:RX+(接收正)、RX-(接收负)。
- 控制信号:
- 无需方向控制信号(全双工),发送和接收可同时进行。
4.2、协议层规范
RS422 仅定义物理层,协议层需结合上层协议(如 Modbus、自定义协议)。
5、上述串口通信协议对比
特性 | RS232 | RS485 | RS422 |
---|---|---|---|
传输方式 | 单端信号(2线) | 差分信号(2线) | 差分信号(4线) |
电平范围 | ±3V~±15V | -7V~+12V | -7V~+12V |
传输距离 | ≤15米 | ≤1200米 | ≤1200米 |
传输速率 | 最高115.2kbps | 10Mbps(12米) | 10Mbps(12米) |
节点数 | 点对点(1主1从) | 多节点(≤32/128) | 1主多从(≤10) |
通信模式 | 单工/半双工 | 半双工 | 全双工 |
典型应用 | 近距离调试 | 长距离多节点通信 | 高速数据传输 |
6、如何使用stm32实现串口通讯
STM32的USART实现串口通讯,需要结合硬件电路和软件驱动。即在于电平转换方式、通信模式等方面。
STM32的USART输出的是TTL电平,通常约3.3V表示逻辑高电平,接近0V表示逻辑低电平。
6.1、使用stm32实现232通讯
1、硬件连接
由于232的通信模式基本与STM32自带的USART逻辑一致,所以一般只需要做电平转换即可。
STM32 MAX232(电平转换芯片) PC/设备
┌─────────┐ ┌───────────┐ ┌───────┐
│ │ │ │ │ │
│ USART1 ├──TXD───→│T1IN │ │ │
│ │ │ T1OUT──┼──DB9(2-RXD)────→│ │
│ │ │ │ │ │
│ USART1 ├──RXD───←│R1OUT │ │ │
│ │ │ R1IN───┼──DB9(3-TXD)────←│ │
│ │ │ │ │ │
│ GND ├───┬────→│GND │ │ GND │
└─────────┘ │ │ │ │ │
│ └───────────┘ └───────┘
│
└───→ VCC(+5V,为MAX232供电)
2、软件驱动
软件方面一般使用STM32的USART接口即可,需要配置波特率、数据位长度、校验方式和停止位长度。
6.2、使用stm32实现485通讯
1、硬件连接
硬件方面,需要将STM32的USART口输出的TTL电平转换成485逻辑(差分信号),同时有独立IO控制485收发状态。(也有专用芯片可以省略这个IO信号)
STM32 MAX485(RS485收发器) 另一RS485设备
┌─────────┐ ┌───────────┐ ┌───────┐
│ │ │ │ │ │
│ USART1 ├──TXD───→│DI │ │ │
│ │ │ │ │ │
│ USART1 ├──RXD───←│RO │ │ │
│ │ │ │ │ │
│ PB12 ├──DE/RE─→│ │ │ │
│ │ │ A──────┼─────────────────┼──A │
│ GND ├───┬────→│GND │ │ │
└─────────┘ │ │ │ │ │
│ │ B──────┼─────────────────┼──B │
│ └───────────┘ │ │
│ │ │
└───→ VCC(+5V,为MAX485供电) └───────┘
2、软件驱动
需要配置波特率、收发模式,同时需要配置方向控制引脚。发送前切换为发送模式,发送后切换为接收模式。
6.3、使用stm32实现422通讯
1、硬件连接
由于422需要4根信号线,所以使用两个USART口进行控制,一个用于发送,一个用于接收。
STM32 SN75174(RS422发送器) 另一RS422设备
┌─────────┐ ┌───────────┐ ┌───────┐
│ │ │ │ │ │
│ USART1 ├──TXD───→│INPUT │ │ │
│ │ │ │ │ │
│ USART2 ├──RXD───←│ │ │ │
│ │ │ A+─────┼─────────────────┼──A+ │
│ GND ├───┬────→│GND │ │ │
└─────────┘ │ │ │ │ │
│ │ A-─────┼─────────────────┼──A- │
│ └───────────┘ │ │
│ │ │
└───→ VCC(+5V,为收发器供电) └───────┘
另一RS422设备 SN75175(RS422接收器) STM32
┌───────┐ ┌───────────┐ ┌─────────┐
│ │ │ │ │ │
│ │ │ INPUT+─┼─────────────────┼──USART2 │
│ │ │ │ │ RXD │
│ │ │ INPUT-─┼─────────────────┼── │
│ │ │ │ │ │
│ │ │ OUTPUT─┼─────────────────┼──USART1 │
│ │ │ │ │ TXD │
│ │ │ GND────┼─────────────────┼──GND │
└───────┘ └───────────┘ └─────────┘
2、软件驱动
需要将一路USART配置为接收模式,一路配置为发送模式。其它与485一致。