搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例

通信协议

串口通信详解
IIC通信详解
SPI通信详解
CAN通信详解


计算机与外界的信息交互称为通信

基本的通信方式分为两种:
串行通信:所传送的数据各位按顺序一位一位地发送或接受,占用资源少,速度相对较慢。
并行通信:所传送的数据的各个位是同时发送或接受。速度快,占用引脚资源多。

通信的速率
比特率(bit rate):每秒能传输的二进制位数。
波特率(Baud rate):每秒能传输的码元数(不一定是二进制)。
对于数字信号而言,波特率=比特率。

串行通信的种类
同步通信:带时钟同步信号传输,通讯双方是受同一个时钟源控制,如I2C、SPI、USART。
异步通信:不带时钟信号同步,不是同一个时钟源,按照一定规则传输,如USART、UART、单总线、CAN。

串行通信的方式
单工:只允许单方向传输,只需一条信号线
半双工:允许非同时进行的双方向传输,只需一条信号线。
全双工:允许同时进行双方向传输,需要两条信号线。

通信协议是主控MCU与各类驱动器、传感器之间实现信息交互的基本逻辑,搞懂通信协议在机器人的电控系统中占有很重要的地位。在接下来的内容中,我将分别讲解串口IICSPICAN通信协议的区别原理以及结合实际一些模块的代码部分。


什么是串口?

串口,全称串行接口(Series Interface),是指以串口协议为基础,数据一位一位地按顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信。

串口分类

根据串口具体实物表现的不同,我们将串口分为UART/USART、RS232、RS485等。其中UART只能异步通信,而USART既能够异步也能同步通信。

USART/UART、RS232、RS485的区别

不同串口分类遵循相同的协议——串口协议
它们的本质区别是遵循的通信方式电平格式不一样

UART/USART:全双工传输;TTL电平格式,常见以3.3V/5V高电平为1,以0V低电平为0。
在这里插入图片描述

RS232:全双工传输;负逻辑电平格式,-5V~-15V为1,5V到+15V为0。
在这里插入图片描述

RS485:半双工传输;差分传输电平格式,压差在-2V~-6V之间为1,在2V到6V之间为0。
(RS485通常适用于远距离传输)
在这里插入图片描述

串口协议原理

以上,不管是串口的何种分类,不管电平格式或者通信方式有多大的不同,它们都遵循统一的一种协议,即串口协议,这也是为什么不管是RS232、RS485或者UART/USART,它们在程序上的写法都是一样的

传输协议

空闲状态:TX、RX信号线为“1”高电平。(电压表测USART线为3.3V/5V,测RS232线为-5—-15V)

传输状态

  • 起始位(发送线置“0”表示开始传输);
  • 数据位(一般为8位,最高为9位,先发低位再发高位);
  • 奇偶校验位(0位/1位);
  • 停止位(发送线置“1”表示结束传输,1位/2位)。
    在这里插入图片描述

*数据帧格式:把用于完成数据传输的格式称为数据帧。

需要定义的参数

  • 数据位长度
  • 奇偶校验位长度
  • 停止位长度
  • 传输模式:只用于收/发,收/发均使用
  • 传输速率设置:波特率
    在这里插入图片描述

在这一章的开头,我讲解过,要想学会MCU控制传感器、电机等,先要掌握MCU的三大基石——时钟、GPIO和中断。现在可以看到MCU三大基石在我们想要利用MCU控制一个模块时的作用。

发送函数USART_SendData

在这里插入图片描述

发送函数中核心在于

USARTx->DR = (Data & (uint16_t)0x01FF)

其中将你要发送的数据Data与十六进制的01FF(二进制为0000 0001 1111 1111)做与运算,是因为我们讲过串口协议发送的数据位最高可以设置为9位

Example:比如我要发送的数据为0x01(0000 0000 0000 0001),那么与0x01FF做与运算后就为我发送的数据本身。
(如果不与0x01FF与运算,那么当你实际写入一个0x11FF时,就会发生错误,接收方接收不到正确的信息,0x01FF的存在就是防止此类事件的发生)

接收中断USART3_IRQHandler中的USART_GetITStatus位

前提:初始化开启USART外设中断

USART_GetITStatus位将默认为0(RESET),当串口中断发生时,将变为1(SET),所以通常利用此位的变化作为接收数据的标志。

串口通信硬件管脚

TX(发送)、RX(接收)、VCC(提供传输电源)、GND(保证共地)
很显然,两个模块做通信时,发送方TX接接收方RX。


串口通信实例——蓝牙和RS232通信的定位模块

蓝牙模块

蓝牙模块通常有六个引脚:TX、RX、VCC、GND、MD0、MD1。
其中MD0和MD1用于蓝牙模块的模式选择,通常蓝牙模块有三种模式:

MD0 MD1
00:通信功能(在使用蓝牙模块进行通信时,将这两个管脚拉低即可)
01:固件升级
10:配置功能
(根据厂商不同,可能不一样)

RS232陀螺仪定位模块

引脚:TX、RX、VCC、GND

你需要一个RS232转TTL电平格式的模块才能用MCU去控制。如果你买到了一个独立的模块,可以把该模块作为MCU的一部分,也可以把它当成陀螺仪定位模块的一部分。

(比如当成MCU的一部分时,从MCU引出的USART_TX接该模块的USART_TX,把该模块引出的RS232_TX接定位模块RS232_RX)
在这里插入图片描述

<think>好的,用户现在问的是USARTUART、RS-232、RS-485之间的区别。我需要先理清楚每个术语的定义和功能,然后比较它们的异同点。 首先,用户之前已经了解Modbus协议可以在不同物理层上使用,比如UART和RS-485,现在他们可能想更深入理解这些通信接口的具体区别,以便在实际项目中选择合适的方案。我需要确保回答清晰,结构分明,避免混淆概念。 UART是通用异步收发器,属于硬件模块,负责处理异步串行通信,比如TX和RX信号。USART则是在UART基础上增加了同步通信功能,所以更灵活,但用户可能不太清楚同步和异步的区别,需要简要说明。 接下来,RS-232和RS-485是物理层的标准,涉及电平、传输距离、拓扑结构等。用户可能容易混淆这些标准和UART/USART的关系,需要明确区分协议和物理层。比如,UART生成的是TTL电平,而RS-232使用更高的电压,适合更长距离,但抗干扰能力不如RS-485的差分信号。 用户可能的应用场景是工业控制或嵌入式系统,他们需要选择合适的接口。比如,短距离用UART直接连接,长距离或多设备用RS-485。此外,用户可能关心硬件设计上的差异,比如是否需要转换芯片,成本如何。 需要组织内容,分点比较,使用表格或列表更直观。可能的结构是先分别介绍每个术语,然后对比差异,最后给出应用建议。同时要注意用户之前的问题,确保回答连贯,补充他们可能需要的实际应用例子。 还要检查是否有常见的误区,例如将UART与RS-232混为一谈,或者认为USART只能用于同步通信。需要澄清这些概念,确保用户理解它们之间的层次关系:UART/USART是硬件模块,而RS-232/RS-485是物理层标准,定义了电气特性。 最后,总结部分需要强调选择依据,比如距离、设备数量、抗干扰需求,帮助用户根据实际情况做出决策。可能还需要提到通信协议如Modbus在这些物理层上的应用,以连接之前的问题,增强回答的相关性。</think>以下是关于 **USARTUART、RS-232、RS-485** 的对比解析,从底层原理到应用场景全面说明: --- ### **1. 核心概念区分** | **术语** | **定义** | **层级** | |-------------|--------------------------------------------------------------------------|----------------| | **UART** | **通用异步收发器**(硬件模块),仅支持**异步串行通信**(如TTL电平信号)。 | 硬件通信模块 | | **USART** | **通用同步/异步收发器**(硬件模块),支持**同步**和**异步**两种通信模式(如SPI、UART)。 | 硬件通信模块 | | **RS-232** | **物理层标准**,定义异步通信的电气特性(如电平、连接器),常用于计算机串口。 | 物理层标准 | | **RS-485** | **物理层标准**,定义差分信号传输规范,支持长距离、多点总线通信。 | 物理层标准 | --- ### **2. 详细对比** #### **(1) UART vs USART** | **特性** | **UART** | **USART** | |----------------|-----------------------------------------|---------------------------------------| | **通信模式** | 仅异步(无时钟线) | 同步(带时钟线) + 异步 | | **协议支持** | 纯异步协议(如Modbus RTU) | 可支持SPI、I2C等同步协议 | | **硬件复杂度** | 简单(仅需TX/RX) | 较高(需同步时钟线) | | **典型应用** | 嵌入式设备间短距离通信 | 需要高速同步通信的场景(如FPGA与外设)| - **关键区别**:USART可通过配置切换同步/异步模式,而UART仅支持异步。 #### **(2) RS-232 vs RS-485** | **特性** | **RS-232** | **RS-485** | |------------------|-----------------------------------------|---------------------------------------| | **信号类型** | 单端信号(高电平±3~15V,低电平±3~-15V)| 差分信号(两条线A/B互补传输) | | **通信距离** | 最长15米(速率≤20kbps) | 最长1200米(速率≤10Mbps) | | **拓扑结构** | 点对点 | 多点总线(最多32节点) | | **抗干扰能力** | 弱(易受共模噪声影响) | 强(差分信号抑制共模干扰) | | **典型场景** | PC串口、老式调制解调器 | 工业自动化、传感器网络 | - **关键区别**:RS-485通过差分信号和总线拓扑实现远距离、多设备通信。 --- ### **3. UART与RS-232/RS-485的关系** - **UART是硬件模块**:负责生成/解析串行数据帧(如起始位、数据位、停止位)。 - **RS-232/RS-485是物理层标准**:定义如何将UART的逻辑信号(TTL电平)转换为适合传输的电气信号。 - **示例**: - UART输出 **0V/3.3V(TTL)** → 通过 **MAX3232芯片** 转换为 **±12V(RS-232)**。 - UART输出 **0V/3.3V** → 通过 **MAX485芯片** 转换为 **差分信号(RS-485)**。 --- ### **4. 应用场景建议** 1. **短距离调试**(<1米): - 直接使用UART的TX/RX引脚(TTL电平),无需电平转换。 - 例如:STM32与Arduino间通信。 2. **中距离设备互联**(<15米): - 使用 **UART + RS-232**,适合点对点通信(如工控机与PLC)。 - 需注意:RS-232易受电磁干扰,避免在工厂环境使用。 3. **工业长距离网络**(>15米): - 必须使用 **UART + RS-485**,支持多点总线和高抗干扰性。 - 例如:Modbus RTU网络中多个温度传感器并联。 --- ### **5. 常见误区澄清** - ❌ **误区1**:RS-232UART是同一概念。 - ✅ **正解**:UART是硬件模块,RS-232是物理层标准,二者需通过电平转换芯片协同工作。 - ❌ **误区2**:RS-485需要专用协议。 - ✅ **正解**:RS-485仅定义电气特性,协议层仍可使用UART的异步帧格式(如Modbus RTU)。 --- ### **6. 总结** - **UART/USART**:硬件模块,负责串行数据帧的生成与解析。 - **RS-232/RS-485**:物理层标准,定义如何可靠传输这些数据帧。 - **选择依据**: - 距离短、点对点 → UART(TTL)或RS-232。 - 距离长、多设备 → RS-485。 - 需同步通信 → 选择USART支持同步模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值