简单了解RS485与RS232(UART)

news2024/12/28 23:09:00

简单了解RS485与RS232(UART)

  • 一、UART和RS232、RS485的关系
    • 1、UART
    • 2、RS232/RS485
    • 3、RS232 与 RS485 的区别与联系
  • 二、Modbus协议说明
    • 1、什么是协议
    • 2、Modbus协议说明
    • 3、Modebus通信过程
    • 4、Modbus存储区
    • 5、Modbus协议类型
    • 6、Modbus功能码
  • 三、stm32+HC-SR04超声波模块,对外提供RS485和Modbus协议
  • 参考

前言
当前智能汽车上一般配置有12路超声波雷达,这些专用超声波雷达内置了MCU,直接输出数字化的测距结果,一般硬件接口采用串口RS485,通信协议采用modbus。请思考:

1)RS485与RS232(UART)有什么不同?

2)Modbus协议是什么?

3)如果让你设计一款 12路车载超声波雷达,采用 stm32F103+HC-SR04超声波模块,对外提供RS485和Modbus协议,你的设计方案是什么?

一、UART和RS232、RS485的关系

1、UART

UART,是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),既然是“器”,显然,它就是个设备而已,要完成一个特定的功能的硬件,它本身并不是协议。那么它要完成什么功能呢?它的最基本功能,是串行数据和并行数据之间的转换。我们知道,计算机中的数据以Byte为基本单位,对一个Byte的存取是并行的,即,同时取得/写入8个bit。而串行通信,需要把这个Byte“打碎”,按照时间顺序来收发以实现串行。例如:

内存中的数据是: 1 1 1 0 0 1 0 1

串行发送的实际效果是(按时间排序【注1】):
1

0

1

0

0

1

1

1

接收则是上述过程的逆过程

这就是UART做的最基本工作,进一步的,它还要控制“发车的班次”,比如确认一个Byte的这8个bit是什么时候开始的,又是什么时候结束的,两个班次之间至少要隔多长时间的缓冲,等等。这一部分,也具有协议的特征,但是相对于道路上的协议,更具有一般性,或曰,是与车在什么道路上开,相对独立的。

2、RS232/RS485

RS232,RS485是一种电平标准

数据在通信双方之间传输,本质是传输物理的电平 比方说传输5V的电压 -1V的电压信号,这些物理信号在传输过程中会受到很多干扰,比方说你传输一个5V的电压,到了接收端可能就变成了4.8V,并且通信的双方高低电平的参考电压可能不同。

那么这个时候就需要一个电平标准,来判断多少V的电压是高电平 1,多少V的电压是低电平 0 这就诞生了 RS-485 RS-232

RS232:是电子工业协会(Electronic Industries Association,EIA) 制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准:+3V~+15V对应0,-3V~-15V对应1。

全双工
逻辑1:-15V–5V
逻辑0:+3V–+15V

在这里插入图片描述
RS485:RS485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,抗干扰能力比RS232强很多。两线压差为-2-6V表示0,两线压差为+2+6V表示1

半双工
逻辑1:+2V~+6V
逻辑0: -2V~ -6V

注意485的电平指的是485-A和485-B两根传输线,两线间的电压差。而不是传输线上的电压
在这里插入图片描述

3、RS232 与 RS485 的区别与联系

区别:
(1)抗干扰性:

RS485 接口是采用平衡驱动器和差分接收器的组合,抗噪声干扰性好。
RS232 接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容 易产生共模干扰,所以抗噪声干扰性弱。
(2)传输距离:

RS485 接口的最大传输距离标准值为 1200 米(9600bps 时),实际上可达 3000 米。
RS232 传输距离有限,最大传输距离标准值为 50 米,实际上也只能用在 15 米左右。
3)通信能力:

RS-485 接口在总线上是允许连接多达 128 个收发器, 即具有多站能力,这样用户可以利用 单一的 RS-485 接口方便地建立起设备网络 。
RS-232 只允许一对一通信。
(4)传输速率:

传输速率较低,在异步传输时,波特率为 20Kbps。
RS-485 的数据最高传输速率为 10Mbps 。

联系:

都可通过 DB-9 连接器连接.
接口均可采用屏蔽双绞线传输。
都是串行通信。
通信方式都是全双工。 (一般情况 485 是半双工)

二、Modbus协议说明

1、什么是协议

在了解什么是Modbus之前,我们先来看下什么是协议

协议是一个汉语词汇,读音为xié yì,意思是共同计议,协商;经过谈判、协商而制定的共同承认、共同遵守的文件。

简单的说协议就是规则,我们需要了解规则,遵守规则,运用规则

我们的单片机之间互相通信,以及单片机和上位机通信中,规定了不同的内容规范,这个规范是通信的双方都需要遵守的,这样就可以实现两者的通信。
在这里插入图片描述

而这个协议规范可以有很多种,来适应不同的设备以及通信要求等,我们常见的就有IIC SPI UART串口通信协议等等。而Modbus也是一个串行通信协议。

2、Modbus协议说明

Modbus诞生于1979年 莫迪康公司 后来被施耐德电气公司收购。Modbus提供通用语言用于彼此通信的设备和设备。
Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。Modbus作为目前工业领域应用最广泛的协议

Modbus协议标准开放、公开发表且无版权要求
Modbus协议支持多种电气接口,包括RS232、RS485、TCP/IP等,还可以在各种介质上传输,如双绞线、光纤、红外、无线等
Modbus协议消息帧格式简单、紧凑、通俗易懂。用户理解和使用简单,厂商容易开发和集成,方便形成工业控制网络

3、Modebus通信过程

注意Modbus是一主多从的通信协议

Modbus通信中只有一个设备可以发送请求。其他从设备接收主机发送的数据来进行响应,从机是任何外围设备,如I/O传感器,阀门,网络驱动器,或其他测量类型的设备。从站处理信息和使用Modbus将其数据发送给主站。

也就是说,不能Modbus同步进行通信,主机在同一时间内只能向一个从机发送请求,总线上每次只有一个数据进行传输,即主机发送,从机应答,主机不发送,总线上就没有数据通信。

从机不会自己发送消息给主站,只能回复从主机发送的消息请求。
在这里插入图片描述
并且,Modbus并没有忙机制判断,比方说主机给从机发送命令, 从机没有收到或者正在处理其他东西,这时候就不能响应主机,因为modbus的总线只是传输数据,没有其他仲裁机制,所以需要通过软件的方式来判断是否正常接收。

4、Modbus存储区

既然从机存储数据,那么肯定要有一个存储区,那就需要文件操作,我们都知道这文件可以分为只读(-r)和读写(-wr)两种类型

并且存储的数据类型可以分为 :布尔量 和 16位寄存器

布尔量比如IO口的电平高低,灯的开关状态等。
16位寄存器比如 传感器的温度数据,存储的密码等。
Modbus协议规定了4个存储区 分别是0 1 3 4区 其中1区和4区是可读可写,1区和3区是只读。

Modbus协议规定了4个存储区 分别是0 1 3 4区 其中1区和4区是可读可写,1区和3区是只读
在这里插入图片描述
并且Modbus还给每个区都划分了地址范围 主机向从机获取数据时,只需要告诉从机数据的起始地址,还有获取多少字节的数据,从机就可以发送数据给主机

Modbus数据模型规定了具体的地址范围,每一个从机,都有实际的物理存储,跟modbus的存储区相对应,主机读写从机的存储区,实际上就是对从机设备对应的实际存储空间进行读写。

5、Modbus协议类型

在上面我们已经说明了Modbus可以在各种介质上传输,那么他的传输模式也分为三种。包括ASCII、RTU(远程终端控制系统)、TCP三种报文类型

串行端口存在多个版本的Modbus协议,而最常见的是下面四种:

Modbus-Rtu
Modbus-Ascii
Modbus-Tcp
ModbusPlus

Modbus RTU是一种紧凑的,十六进制表示数据的方式,Modbus ASCII是一种采用Ascii码表示数据,并且每个8Bit 字节都作为两个ASCII字符发送的表示方式。
RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。

Modbus协议使用串口传输时可以选择RTU或ASCII模式,并规定了消息、数据结构、命令和应答方式并需要对数据进行校验ASCII 模式采用LRC校验,RTU模式采用16 位CRC校验。通过以太网传输时使用TCP,这种模式不使用校验,因为TCP协议是一个面向连接的可靠协议。
在这里插入图片描述
当然常用的就是RTU模式,ASCII一般很少

举一个简单的例子,如果我们需要发送一个数字10 那么RTU模式下,只需要发送 0x0A 总线上传输数据形式为: 0000 1010

而ASCII码模式则将数据1和0转为’1’和’0’,需要发送0x31(1) 0x30(0)两个字节数据。总线上传输数据形式为: 0011 0001 0011 0000

详细的我们等下再阐述

Modbus-RTU协议
Modbus报文帧结构
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,本质就是一串数据。

Modbus报文是指主机发送给从机的一帧数据,其中包含着从机的地址,主机想执行的操作,校验码等内容

Modbus协议在串行链路上的报文格式如下所示:

从站地址 功能码 数据 CRC/LRC 1 byte 1 byte N bytes 2 bytes
帧结构 = 从机地址 + 功能吗 + 数据 + 校验 从机地址: 每个从机都有唯一地址,占用一个字节,范围0-255,其中有效范围是1-247,其中255是广播地址(广播就是对所有从机发送应答)

功能码: 占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改从机的数据,所以不同功能码对应不同功能.
数据: 根据功能码不同,有不同功能,比方说功能码是查询从机的数据,这里就是查询数据的地址和查询字节数等。
校验: 在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确

6、Modbus功能码

Modbus规定了多个功能,那么为了方便的使用这些功能,我们给每个功能都设定一个功能码,也就是指代码。

Modbus协议同时规定了二十几种功能码,但是常用的只有8种,用于对存储区的读写,如下表所示:
在这里插入图片描述
CRC校验
**错误校验(CRC)域占用两个字节包含了一个16位的二进制值。**CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。
比如主机发出01 06 00 01 00 17 98 04, 98 04 两个字节是校验位,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如果不相等那么说明数据传输有错误,这些数据就不能要

CRC校验流程:

1、预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。

2 、把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。

3、将CRC寄存器向右移一位,最高位填以0,最低位移出并检测。

4 、如果最低位为0:重复第三步(下一次移位);如果最低位为1:将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。

5、重复第三步和第四步直到8次移位。这样处理完了一个完整的八位。

6 、重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。

7、最终CRC寄存器的值就是CRC的值。

此外还有一种利用预设的表格计算CRC的方法,它的主要特点是计算速度快,但是表格需要较大的存储空间,该方法此处不在阐述

三、stm32+HC-SR04超声波模块,对外提供RS485和Modbus协议

超声波雷达模块
超声波传感器:12个HC-SR04模块,每个模块有Trig和Echo引脚。
连接方式:将每个HC-SR04模块的Trig和Echo引脚分别连接到STM32F103的GPIO引脚上。
微控制器
微控制器:STM32F103系列,至少需要12个GPIO用于超声波模块的Trig和Echo信号。
时钟设置:72MHz的系统时钟频率。
通信接口
RS485接口:采用MAX485芯片,实现RS485物理层通信。
串口配置:STM32的USART接口用于与MAX485通信。
电源管理
电源:汽车电源通常为12V,需要DC-DC转换器将12V转换为STM32和HC-SR04模块所需的5V和3.3V。
3.2 软件设计
底层驱动
GPIO驱动:配置GPIO引脚为输出模式(Trig)和输入模式(Echo)。
定时器驱动:使用定时器捕获HC-SR04的Echo信号高电平时间,计算距离。
USART驱动:配置USART用于RS485通信,波特率根据具体需求设置,一般为9600或115200。
测距算法
触发信号:发送至少10us的高电平到Trig引脚。
捕获回波:定时器捕获Echo信号的高电平时间,通过时间计算距离。
Modbus协议栈
帧格式:实现Modbus RTU协议的帧格式,包括地址域、功能码、数据域和CRC校验
读写操作:支持基本的读寄存器和写寄存器操作,读取超声波模块的测距数据。
数据处理
距离测量:每个超声波模块测量到的距离存储在STM32的寄存器中。
错误处理:处理测量超时或无效数据的情况,确保系统的可靠性。
3.3 实现步骤
硬件连接

超声波模块连接:将每个HC-SR04的Trig和Echo分别连接到STM32的GPIO引脚,例如:Trig1 -> PA0, Echo1 -> PA1, Trig2 -> PA2, Echo2 -> PA3,依此类推。
RS485连接:MAX485的DI连接到STM32的TX引脚,RO连接到STM32的RX引脚,DE和RE引脚连接在一起并连接到STM32的一个控制引脚(例如PA4),用于控制发送和接收状态。
电源连接:确保所有模块都供电正常,STM32和HC-SR04都需要3.3V/5V供电,MAX485需要5V供电。
软件开发

  1. 初始化

配置系统时钟。
初始化GPIO引脚。
初始化定时器用于捕获Echo信号。
初始化USART用于RS485通信。
2. 超声波测距

触发每个HC-SR04模块,启动测距。
捕获Echo信号高电平时间,通过定时器计算距离。
将距离数据存储在寄存器中,供Modbus协议读取。
3. Modbus通信

实现Modbus RTU协议的帧解析和生成。
处理Modbus主站的请求,根据请求的功能码读取或写入寄存器。
返回对应的距离数据或执行相应操作。
4. 测试与调试

使用Modbus主站测试工具,验证通信协议的正确性。
通过调试工具和串口监视器,调试距离测量和通信功能。

参考

链接: 基于stm32的12路超声波雷达方案设计与RS485/Modbus集成

链接: 深入理解UART、IIC、SPI与RS232以及RS485的区别

链接: 详解Modbus通信协议—清晰易懂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1820848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【StableDiffusion】采样方法对比优缺点及评估,采样器 调度器(目前已有的 采样器介绍与评估)

采样器 Sampler 采样方法 决定了 如何从 噪声 生成 图像 的过程,也就是去噪过程如何进行 包含 DPM 的采样方法(逆转扩散采样) DPM → Diffusion Probabilistic Models(扩散概率模型) DPM、DPM2 包含 DPM 的采样方…

FastAPI 作为H5中流式输出的后端

FastAPI 作为H5中流式输出的后端 最近大家都在玩LLM,我也凑了热闹,简单实现了一个本地LLM应用,分享给大家,百分百可以用哦~^ - ^ 先介绍下我使用的三种工具: Ollama:一个免费的开源框架&…

Redisson原理解析

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

智能对话画画音乐创作歌曲三合一系统源码 前后端分离 附带完整的源代码包+搭建部署教程

系统概述 创想无界是一个高度集成的创意生态系统,它巧妙地融合了人工智能的三大核心领域:自然语言处理(NLP)用于智能对话,计算机视觉(CV)实现自动画画,以及音乐生成算法来创作个性化…

Redis中的Lua脚本

EVAL 命令 命令格式 EVAL script numkeys key [key ...] arg [arg ...]命令说明 1、script 参数: 一段Lua脚本程序,会在Redis服务器上下文中运行,不需要(也不应该)定义为一个Lua函数。 2、numkeys 参数&#xff1…

IT人的拖延——别让“需求沟通”耽误了你的正事

IT人的工作,很多“需求沟通”的场景,而在沟通需求时,又会因为沟通的不顺畅,没有结果而产生烦躁的情绪或者是悬而未决的不能开始行动,进而间接地造成了拖延。这种拖延的原因,需要从需求沟通的根源来找方案&a…

人工智能将成为数学家的“副驾驶”

人工智能将成为数学家的“副驾驶” 数学传统上是一门独立的科学。1986年,安德鲁怀尔斯为了证明费马定理,退到书房里呆了7年。由此产生的证明往往很难让同事们理解,有些至今仍有争议。但近年来,越来越多的数学领域被严格地分解为各…

汇编:EFLAGS寄存器

EFLAGS寄存器是x86架构处理器中的一个状态寄存器,用于存储当前处理器状态和控制特定操作;寄存器中的各个标志位可以影响指令执行,并且指令执行过程中也可以修改这些标志位,每个位都有特定的含义。 EFLAGS寄存器图示: …

振弦采集仪在隧道工程中的安全监测与控制研究

振弦采集仪在隧道工程中的安全监测与控制研究 隧道工程的安全监测与控制是保障隧道施工和运营安全的重要工作。隧道工程常面临的问题包括地层变形、地下水位变化、地震影响等,这些问题对隧道结构的安全性和使用寿命有着重要影响。因此,隧道工程中的安全…

【CS.AI】AI引领编程新时代:深度探索GitHub Copilot

文章目录 引言0. TOP TAKEAWAYS 重要要点1. Copilot的基本功能2. 技术原理3. 优势与局限优势局限 4. 使用体验4.1 初次使用4.2 在 JetBrains 全家桶中使用 GitHub Copilot1. 安装插件2. 配置插件3. 使用 GitHub Copilot 4.3 日常开发4.4 体验与反馈 5. 对开发者生态系统的影响5…

零碳产业园区建设指南案例

零碳产业园区的建设一直备受广泛关注,特别是在我国碳达峰碳中和的背景下。据不完全统计,目前,全国共有国家级和省级园区2500余家,这些园区在贡献了全国50%工业产出的同时,其CO2排放量也占到了全国排放总量的30%以上。作…

VMware安装ubuntu22.4虚拟机超详细图文教程

一 、下载镜像 下载地址:Index of /ubuntu-releases/22.04.4/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 二、创建虚拟机 打开VMware点击左上角文件,创建新的虚拟机,打开后如下图: 下一步,镜像文件就是…

光纤跳线(又称光纤连接器)的种类

光纤跳线(又称光纤连接器),也就是接入光模块的光纤接头,也有好多种,且相互之间不可以互用。SFP模块接LC光纤连接器,而GBIC接的是SC光纤连接器。下面对网络工程中几种常用的光纤连接器进行详细的说明&#x…

3d交互式场景在线编辑平台的好处

在数字化教学的新时代,我们为您带来了革命性的产品——VR全景展示搭建编辑器。它将传统的教学方式升级为三维模式,让课程训练更加真实生动,为您带来前所未有的学习体验。 VR全景展示搭建编辑器不仅支持视频录播、PDF、图文等多种内容承载方式…

非阻塞IO简介和代码实例

接上篇 阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介-CSDN博客文章浏览阅读90次。阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介https://blog.csdn.net/CSDN_DU666666/article/details/139598410?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%2…

Matlab|基于主从博弈的智能小区代理商定价策略及电动汽车充电管理

目录 一、主要内容 二、部分代码 三、程序结果 四、下载链接 一、主要内容 主要做的是一个电动汽车充电管理和智能小区代理商动态定价的问题,将代理商和车主各自追求利益最大化建模为主从博弈,上层以代理商的充电电价作为优化变量,下层以…

用PlayCanvas打造一个3D模型

本文由ScriptEcho平台提供技术支持 项目地址:传送门 基于 PlayCanvas 的 3D 物理场景开发 应用场景介绍 PlayCanvas 是一款功能强大的 3D 引擎,可用于创建各种类型的 3D 体验,包括游戏、模拟和交互式可视化。本技术博客将介绍如何使用 Pl…

低成本和颜值兼顾的 HomeLab 设备:HPE MicroServer Gen10(二)

本篇文章,继续分享另外一台端午假期折腾的设备,HP MicroServer Gen10 一代。同样分享下我的折腾思路,希望能够帮助到有类似需求的你。 写在前面 Gen10 “标准版”(第一代)和 Plus 版本设计风格一致,同样颜…

20240607在ubuntu下解压缩7z的压缩包文件

20240607在ubuntu下解压缩7z的压缩包文件 2024/6/7 10:26 百度:ubuntu 7z解压缩 在Ubuntu中,可以使用7z命令来解压.7z文件。首先,确保你已经安装了p7zip-full包,如果没有安装,可以使用以下命令安装: sudo …

预告|博睿数据将受邀出席GOPS全球运维大会北京站!

GOPS全球运维大会作为国内外运维领域最具影响力的技术盛会之一,旨在汇聚全球运维精英,分享运维领域的前沿技术、实践经验与创新理念。6月28日,博睿数据(bonree.com,股票代码688229)将受邀出席第二十三届 GO…