news 2026/9/21 17:54:56

新手教程:RS485与RS232串行通信原理通俗解释

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
新手教程:RS485与RS232串行通信原理通俗解释

串行通信入门:RS232与RS485,到底有什么不一样?

你有没有遇到过这样的场景:
调试一个温湿度传感器时,接上串口线,电脑却收不到数据;
或者在工控柜里看到一堆设备用一根“双绞线”串在一起,标着“485总线”,但不知道它为什么能连十几个设备?

这些背后,其实都离不开两种古老却依然强大的通信方式——RS232 和 RS485
它们不是协议,也不是软件,而是硬件层面的“语言规则”。理解它们,就像学会听懂设备之间的“悄悄话”。

今天我们就抛开晦涩术语,用工程师的视角,把这两个“老前辈”讲清楚:它们怎么工作?谁更适合什么场合?为什么现在还在用?


从一根线说起:RS232 是怎么传数据的?

想象你要通过电线发一个字节0x55给另一台设备。这根线怎么知道是“1”还是“0”?

RS232 的答案是:看电压对地的高低

它采用的是单端信号传输——所有信号都以公共地(GND)为参考点:
- 逻辑“0”:+3V 到 +15V
- 逻辑“1”:-3V 到 -15V

注意!这里的正负是反的——高电平代表0,低电平代表1。这种设计最早是为了兼容电话线路中的模拟信号,意外带来了不错的抗干扰能力。

最简单的连接:三根线搞定

RS232 只需要三根线就能通信:
-TXD:我发,你收
-RXD:你发,我收
-GND:共用地线,形成回路

这就构成了全双工通信——两边可以同时说话,像打电话一样。

但问题也来了:只能两个设备互连。你想加第三个?不行。这就是典型的点对点(Point-to-Point)结构

实际使用中的坑

别以为插上线就能通。现代单片机比如 STM32 或 Arduino 使用的是 TTL 电平(0V/3.3V 或 5V),而 PC 上的串口是 RS232 电平(±12V)。直接连会烧芯片!

所以必须加个“翻译官”——电平转换芯片,比如MAX232、SP3232。它的作用就是把 MCU 的 0/5V 转成 ±10V,反过来也能接收。

⚠️ 小贴士:现在很多开发板已经内置了 USB-to-TTL 芯片(如 CH340、CP2102),可以直接和电脑通信,但我们仍习惯称其为“串口调试”,本质上已不是传统 RS232。

RS232 适合干啥?

  • 板级调试输出日志
  • 连接打印机、旧式扫码枪等外设
  • 短距离通信(≤15米)

但它扛不住长距离压降和电磁干扰。工厂车间里电机一启动,串口数据就乱码?多半是用了 RS232 做远传。

那怎么办?换 RS485。


多设备联网的秘密武器:RS485 差分通信原理

如果把 RS232 比作两个人打电话,那RS485 就像是一个对讲系统,一个人喊话,一群人听着,只有被点名的那个才回应。

它是怎么做到的?

关键在于——差分信号

差分是怎么抗干扰的?

RS485 用两根线 A 和 B 来传输信号,不看各自对地电压,而是看它们之间的电压差
- 当 A 比 B 高 >200mV → 逻辑“0”
- 当 B 比 A 高 >200mV → 逻辑“1”

假设外界有个强电磁干扰,在两条线上都感应出 +1V 的噪声。但由于 A 和 B 几乎同步受影响,它们的差值仍然不变,接收端照样能正确判断原始信号。

这就是所谓的“共模抑制”能力。再配上屏蔽双绞线(STP),抗扰性能大幅提升。

半双工 vs 全双工

RS485 支持两种模式:
-半双工:一对线(A/B),既能发也能收,但不能同时进行。需要控制方向。
-全双工:两对线,一对专门发,一对专门收,可同时通信。

绝大多数应用采用半双工,因为节省布线成本。这也是 Modbus RTU 常用的方式。

总线结构:一条线挂几十个设备

RS485 最大的优势是支持多点通信。理论上可以在一条总线上挂32 个标准负载设备,用增强型收发器甚至能扩展到 256 个。

每个设备都有地址。主机发送命令时带上目标地址,所有从机都在监听,只有地址匹配的才会响应。

这就实现了真正的“主从轮询”架构,非常适合工业现场大量传感器集中管理。


硬件怎么接?软件怎么写?

我们来看一个典型的 RS485 应用场景:STM32 控制 MAX485 芯片,与其他设备通信。

硬件连接要点

STM32MAX485
UART_TXDI(数据输入)
GPIO_XDE / RE(使能控制)
GNDGND
A/B 引脚接总线

其中最关键的是DE/RE 引脚,用来控制 MAX485 是处于“发送模式”还是“接收模式”。

  • DE=1, RE=0 → 发送使能
  • DE=0, RE=1 → 接收使能
    (有些芯片将两者集成在一个引脚)

如果不控制方向,设备永远处于接收态,无法发出数据;或者一直占用总线,导致其他设备无法通信。

软件实现:方向切换不能少

#include "stm32f4xx_hal.h" UART_HandleTypeDef huart2; #define RS485_DIR_PIN GPIOD, GPIO_PIN_5 // 初始化方向控制IO void RS485_Init(void) { __GPIOD_CLK_ENABLE(); GPIO_InitTypeDef gpio = {0}; gpio.Pin = GPIO_PIN_5; gpio.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出 gpio.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOD, &gpio); HAL_GPIO_WritePin(RS485_DIR_PIN, GPIO_PIN_RESET); // 默认接收 } // 带方向控制的数据发送 HAL_StatusTypeDef RS485_Send(uint8_t *data, uint16_t len, uint32_t timeout) { // 切换到发送模式 HAL_GPIO_WritePin(RS485_DIR_PIN, GPIO_PIN_SET); // 发送数据 HAL_StatusTypeDef status = HAL_UART_Transmit(&huart2, data, len, timeout); // 发送完成后切回接收 while (!(__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TC))); // 等待发送完成 HAL_GPIO_WritePin(RS485_DIR_PIN, GPIO_PIN_RESET); return status; }

📌 关键细节:
- 必须等 UART 发送完成后再切换回接收模式,否则最后几个字节可能丢失。
- 使用UART_FLAG_TC标志位确保数据完全移出移位寄存器。

这个函数就是构建 Modbus 主站的基础。你可以封装成Modbus_SendPacket(...),配合 CRC 校验和超时重试机制,形成稳定通信。


RS232 和 RS485 到底该怎么选?

别纠结,记住这张表就够了:

对比项RS232RS485
设备数量仅2个最多256个
通信距离≤15米可达1200米
抗干扰性弱,依赖良好接地强,差分+屏蔽线双重保障
数据模式全双工多为半双工
成本低(短线无需额外电路)中等(需终端电阻、保护器件)
典型用途调试口、本地外设工业PLC、远程仪表、楼宇自控

实际案例对比

场景1:给新做的电路板加个调试口

✅ 选择 RS232(或更准确地说,TTL串口转USB)
理由:只连一台PC,距离短,成本低,开发方便。

场景2:把10个分布在厂区的电表数据采集回来

✅ 选择 RS485
理由:远距离、多节点、环境复杂,必须用差分总线。

场景3:电梯控制系统中楼层信号上传

✅ RS485 + Modbus RTU
理由:多个轿厢和控制器共享同一总线,实时性和可靠性要求高。


工程实践中的那些“坑”与解决办法

1. 信号反射导致通信失败?

长距离传输时,信号会在电缆末端反射,造成波形畸变。

🔧 解法:在总线两端各加一个120Ω终端电阻,匹配特性阻抗,吸收能量。

✔ 正确做法:只在最远的两个节点加上拉/下拉后的120Ω电阻,中间节点不要接。

2. 总线空闲时误触发?

当没有设备发送时,A/B线处于悬空状态,容易受干扰进入不确定电平。

🔧 解法:添加偏置电阻
- A线接上拉电阻(560Ω ~ 1kΩ)到 VCC
- B线接下拉电阻到 GND

这样空闲时 A>B,形成稳定的逻辑“1”(Marking state),符合 Modbus 起始条件。

3. 地线环路引入噪声?

多个设备远距离连接,地电位不同,产生地环流,破坏差分平衡。

🔧 解法:使用隔离型 RS485 收发器,如 ADM2483、SN65HVD12
内部集成 DC-DC 隔离电源和数字隔离器,彻底切断地环路,提升系统稳定性。


波特率怎么选?距离与速度的权衡

RS485 不是越高越好。越高速度,对布线和终端匹配的要求越高。

一般经验法则:

传输距离推荐最大波特率
< 10 米10 Mbps
50 米2.5 Mbps
100 米1 Mbps
500 米115.2 kbps
1200 米9.6 kbps ~ 38.4 kbps

原则很简单:距离越长,速率越低
如果你要在 800 米外稳定通信,别想着跑 115200,老老实实用 19200 或更低。


结语:为什么学这些“老技术”还重要?

也许你会问:现在都物联网时代了,WiFi、LoRa、MQTT 都出来了,还学 RS485 干嘛?

答案是:底层没变,根基仍在

  • 90% 的工业传感器仍提供 RS485 接口
  • Modbus over RS485 是全球最普及的工业通信组合
  • 很多网关设备的第一步,就是先把 485 数据转成 TCP/IP 上云

不懂物理层,你怎么排查“为什么读不到数据”?
是地址错了?波特率不对?接线反了?终端电阻漏了?还是根本没有供电?

这些问题,不会出现在 Wireshark 里,只能靠你手里的万用表和示波器,一层层剥开。


🔧动手建议
买一块 STM32 开发板 + 几个 MAX485 模块 + 若干跳线,搭建一个小系统:
- 一个作为主机轮询
- 两个作为从机模拟温湿度上报
- 用 Modbus 协议通信

当你亲眼看到“01 03 00 00 00 02 C4 0B”这样的报文成功交换,并解析出有效数据时,你就真正跨过了嵌入式通信的第一道门槛。

而这扇门的背后,还有 CAN、I2C、SPI、Ethernet、RTOS……等待你一步步深入探索。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 11:13:09

MZmine 3质谱数据分析:从入门到精通的完整指南

MZmine 3质谱数据分析&#xff1a;从入门到精通的完整指南 【免费下载链接】mzmine3 MZmine 3 source code repository 项目地址: https://gitcode.com/gh_mirrors/mz/mzmine3 掌握MZmine 3这款强大的开源质谱数据分析工具&#xff0c;你将能够高效处理各类质谱数据。无…

作者头像 李华
网站建设 2026/9/20 17:32:54

JSON对比工具深度评测:从在线工具到命令行工具的完整解决方案

JSON对比工具深度评测&#xff1a;从在线工具到命令行工具的完整解决方案 【免费下载链接】online-json-diff 项目地址: https://gitcode.com/gh_mirrors/on/online-json-diff 在现代软件开发中&#xff0c;JSON数据的对比分析已成为日常开发工作的重要环节。无论是API…

作者头像 李华
网站建设 2026/9/20 18:34:15

终极窗口管理神器:Window Resizer 快速上手指南

终极窗口管理神器&#xff1a;Window Resizer 快速上手指南 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为杂乱的窗口布局烦恼吗&#xff1f;Window Resizer 这款免费开源工…

作者头像 李华
网站建设 2026/9/22 2:22:20

Windows 10系统瘦身神器:一键清理预装应用和冗余服务

Windows 10系统瘦身神器&#xff1a;一键清理预装应用和冗余服务 【免费下载链接】Win10BloatRemover Configurable CLI tool to easily and aggressively debloat and tweak Windows 10 by removing preinstalled UWP apps, services and more. Originally based on the W10 d…

作者头像 李华
网站建设 2026/9/21 18:59:37

Mac Mouse Fix终极配置指南:快速解锁第三方鼠标的完整功能

Mac Mouse Fix终极配置指南&#xff1a;快速解锁第三方鼠标的完整功能 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/gh_mirrors/ma/mac-mouse-fix 还在为你的罗技、雷蛇等第三方鼠标在macOS…

作者头像 李华