STM32作为从机通过RS485实现Modbus RTU通讯

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1. 串行通讯、RS485、Modbus的联系和区别

Modbus是一种串行通信协议,因此在介绍MODBUS之前,有必要了解一下更为基础的知识,即串行通讯。并且对于很多初学者来说,分清串行通讯、485通讯、MODBUS通讯协议是进行MODBUS通讯的第一步。那么首先我们先区别这三个通讯分别是什么,之间的关系又是什么。

一个通讯的完成,根据计算机系统的层级划分,可以分为物理层、数据链路层、应用层等等等等,在这里,我们只介绍MODBUS一对一的通讯方式,因此只涉及到物理层、数据链路层、应用层等部分分。对于上述各个层级,可能比较抽象,这里我自己的理解是:

电气层(属于物理层):电气层是我为了读者方便理解,自己加的。其具体含义是,两个设备要进行通讯,首先应该进行电气参数的匹配,如果一个设备输出电压是24V,另一个设备输入电压是5V,那么很有可能通讯的时候设备直接被烧坏了。此外,什么是高点平、什么是低电平,两边通讯时,需要共同约定一个规则来定义1和0,这种规则往往是一种阈值电压或差分电压等。换一种角度理解,通讯其实就是各个设备在进行讲话,电气层就是要讲的一句话中,一个单词里的一个字母如何定义。RS485就是一种电气上的接口,它规定了正差分就是1,负差分就是0。

物理层:物理层规定了一个字节是怎么发送的,我们都知道,一个字节是8位,一般来说,如果只有一根通讯线,需要发8位字节的话,就需要用同一根线在不同的时刻发8次,这种通讯方式就是串行通讯。如果我们有8根通讯线,那么就只需要在同一时刻8根通讯线同时发送,就能够将一个字节的数据发送出去。换种角度理解,物理层就是规定,所要说的话中,一个单词是怎么说出来的。串行通讯就是物理层的规则定义,它定义了一个字节是通过怎样的方式进行发送和接收。

数据链路层:数据链路层规定了一个数据帧如何发送和接受。数据帧可以理解为一段能够表达通讯需求的若干个字节。即如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理(来源于百度百科)换种角度理解,数据链路层就是规定了如何将一个一个的单词(字节)组合成一句话,并且一句话应该按照怎样的方式去说和理解。Modbus就是一种在数据链路层中的协议规定,他规定了一种开源的通用数据帧格式,按照这种格式进行通讯的两个设备就能较为稳定的进行通讯。

应用层:应用层就是用户对于已经接受到的数据进行何种处理来实现用户的应用的需求,这一部分是软件上用户自己定义的。

这里我所做的内容是通过STM32进行控制,通过RS485电气接口进行串行通讯,并采用Modbus通讯协议。
在理解了上述三个的联系和区别以后,下面就对各个内容进行分别介绍。

2. 串行通讯介绍

2.1 串行通讯的定义:

串行通讯是一种数据通讯方式,与并行通讯的同一时刻多条数据线同时发送数据不同,串行通讯是在不同时刻依次发送一个字节的各个位。

2.2 串行通讯的分类:

根据串行通讯的收发功能不同,串行通讯一般可以分为单工、半双工、全双工。单工是指该串行通讯只能收或者只能发,只能进行单方向的工作。半双工是指,该串行通讯既可以收,也可以发,但是同一时刻下,只能进行收或发。全双工是指,该通讯可以同时进行收和发。
根据串行通讯是否需要进行时钟的同步,可以分为同步通讯和异步通讯两种。这里采用RS485的通讯接口,接口电路中没有专门传递时钟信号的传输线,因此只能采用异步的串行通讯的方式进行收发。

2.3 串行通讯的参数和意义:

在进行串行通讯时,我们的目标是正确的传输一个字节(8位二进制),那么在数据传输过程中,就需要输出和输入两方对串口协议进行一个统一的规定。相关的参数如下:
波特率:波特率是指每秒中传递的二进制的位数。为了避免数据接收时按照错误的节拍接收数据,串口通讯需要提前设置好接收和发送端的波特率。举例说明,假设波特率是9600bts/s,那么传递一个字节(8位),需要的时间是0.83ms,每个位持续的时间是0.104ms。此时如果接收端按照每0.104ms是一个位来对数据进行判断,那么接收端能够接收到正确的信息。但此时如果接收端按照每0.008ms(115200bit/s)一个位的话,可以看出,当发送端还未将全部的数据位发送完成,接收端就已经有了8位数据。这就是接受和发送没有统一波特率带来的通讯出错。
起始位:起始位必须是持续一个比特时间的逻辑“0”电平,标志传送一个字节的开始。
数据位:数据位是需要传递的数据,一般来说是8位,也有7位、6位等。
奇偶校验位:为了保证传递数据的正确性,可以在传递完数据后进行一次奇偶校验,可以选择奇校验或者偶校验或者不校验。奇偶校验是指数据位中,1或者0的个数是奇数还是偶数。
停止位:在上述数据位发送结束后,再发送1bit时间的高电平,表示发送结束。也可设定为1.5或2位时间。
在进行使用时,读者可以仅了解一次串行发送时的电平时序关系,但要始终注意发送和接受两端要采用相同的串行通讯协议,也就是采用相同的波特率、奇偶校验方式、停止位持续时间等。

2.4 STM32中的串行通讯:

STM32的串行通讯的使用可以参照STM32的参考手册USART章节,需要注意的是,STM32的USART是全双工异步串口通讯,有两个传输线TX和RX,其中TX为发送,RX为接收。在进行与其他串口连接时,一般来说,是STM32的TX接外部设备的RX,STM32的RX接外部设备的TX

3. RS485介绍

3.1 RS485的定义:

RS485是一种电气接口和电平定义,我们已经知道了串行通讯能够传递一个字节,可是这是建立在两个设备能正确传递一个位的基础上才能实现。RS485就是解决如何传递一个位。这就需要设备两端在电气层面上有连接,并且采用相同的电气参数来定义0和1。而RS485就是一种电气接口和电平定义。RS485具有A、B两根线,并且通过A、B两根线之间的压差来定义1和0A和B的压差在+(2-6)V内为高电平,A和B的压差在-(2-6)V内为低电平。由此就定义了RS485的电气接口和电平。
因为RS485虽然有两根线,但是是通过两根线的压差来表示1和0。这就造成了RS485其实是只有一个数据传输通道,同一时刻只能收或者只能发,因此RS485是一种半双工的通讯方式。
此外还应注意的问题是,RS485设备之间是A接A,B接B
延伸来说,RS485通讯逐渐取代RS232通讯,是因为RS485的接口电平更小,不易损坏芯片,并且兼容TTL(5V-0V)电平。此外RS485通过两根AB线通讯,可以多台设备组成通讯网

基于STM32F103的Modbus通讯32做从 最近做了个实验,用STM32做从接收主发送过来的数据包(也是基于mobus协议),而后从将一些数据发送给主。 首先呢还是介绍下modbus协议。其实modbus协议你不需要了解太多。既然是要使用,那么你只需要明白一点,modbus协议就是在你要发送的数据的基础上,在数据前面加上一个帧头,数据后面加一个帧尾。嗯,是不是还是有点迷?举个例子吧。 所以主会发过来一帧数据:01 03 0... 阅读详情

相关推荐

stm32配置modbus笔记

本篇笔记讲解modbus通讯的大概配置流程,梳理通讯过程,由于项目代码参杂了许多其他内容,故代码部分以后有时间再贴出来。

weixin_49297378的博客 3513

STM32单片实现modbus通讯协议

软件:Keil uvision5 单片STM32F103C8T6 调试:XCOM V2.6、Modbus调试精灵 串口通信:波特率:9600    数据位:8   校验位:无 停止位:1 modbusRTU模式下03功能码、06功能码实现

STM32——Modbus协议

CRC即循环冗余校验码,是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

qq_23339307的博客 3806

STM32开发(六)STM32F103 通信 —— RS485 Modbus通信编程详解

本实验基于STM32F103开发,实现 通过RS-485实现Modbus通信。Modbus是主从方式通讯,不能同步进行通信,总线上每次只有一个数据进行传输。主发送,从应答,主不发送,总线上就没有数据通讯MODBUS 协议允许在各种网络体系结构内进行简单通信。

weixin_43564241的博客 5万+

嵌入式 STM32 通讯协议--MODBUS

自己定义的一种协议。随便定义 ----即使是自定义的协议,一般也遵循一般协议的格式。协议有什么格式?通信中的数据往往以数据包的形式进行传送,我们把这样的一个数据包称为一帧数据。类似于网络通信中的TCPIP协议一样,比较靠谱的通信协议往往都是含有一下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。RS485 发送hello . 如果以数据帧格式发送hello. 怎么样写???帧头: 一帧数据开始,可以使用多个字节。假如以一个字节:0XFF ----自己定义。

Lushengshi的博客 8806

基于STM32MODBUS-RTU框架的实现

基于STM32MODBUS-RTU框架的实现

zhuzhu的博客 1万+

STM32通过RS485实现Modbus RTU通讯的完整实战指南

工业自动化领域,设备间可靠通讯是系统稳定运行的基础。RS485作为经典的串行通讯标准,以差分信号传输保证抗干扰能力和长距离通信,而Modbus RTU协议凭借简单、开放的特性成为工业设备互联的事实标准。在嵌入式开发中,STM32作为主控芯片,通过RS485收发器与PLC、触摸屏等上位进行Modbus RTU通讯,是实现设备监控与远程控制的常见方案。本文从硬件电路设计、协议帧解析、CRC校验、状态实现等角度,系统讲解如何基于STM32打造一个稳定的Modbus RTU,并分享调试过程中的常见故障排除与

weixin_30983965的博客 297

基于RS485Modbus通讯(从硬件层 到软件层的理解和STM32实践)

通讯协议 的理解 : 1、通讯协议通俗易懂的理解就是两个设备之间互相 传递信息 大家一起 约定好的一种规则;通讯协议 又分为硬件层协议和 软件层协议,常用的 硬件层协议 如:RS-232、RS-485、CAN、I2C、SPI等 ,硬件层协议好比汽车需要的公路,在通信上负责稳定传输0、1两种基本的二进制数据 ,如两个 MCU 之间进行数据的传输 ,MCU使用 地线和信号线(数据传输过程 会带干扰)的传输方式输出 TTL电平 即 (逻辑0:0V 逻辑 1:5V),RS485发送器 有两条输出信号

weixin_43174813的博客 2755

MODBUS通讯协议详解(基于485)

顾名思义,他是一个bus,即总线协议,如果你接触到这种协议,相信你所处的行业很可能是工业方面或者你的产品用于工业。 Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。...

zhuguanlin121的博客 3万+

modbus rtu协议_STM32基于RS485MODBUS通讯学习笔记(一)

从业两年来看了很多技术类的书籍,学了很多新的东西,还是感觉不踏实。一是看的东西比较杂,知识没有成体系;二是没有动手做过一个比较完整的小项目。鉴于此,我决定开始做做小项目,并完整的记录下来。 对于基于RS485MODBUS通讯,我想每一个工控人都不陌生,具体的一些细节大家可以自行查资料,我只把后面会用到一些知识点写下来。 预备知识:(一) 对RS485协...

weixin_39859394的博客 1211

基于STM32485通讯传感器采集程序

基于STM32485通讯传感器采集程序 先来看看硬件连接,大致就这样连接! 一般来说,RS485是硬件,而他软件方面是modbus协议,用到最多的是RTU方式。 工作方式:主STM32)通过串口向从发送一段问询帧(包括地址码,功能码,数据码,效验码),每个从485传感器)都可以收到,但是因为问询帧里面有一段地址码,所以只有对应的地址的从才执行相应的命令(比如返回采集到的温湿度等),...

Liaiblog 8748

STM32 RS485 modbus通讯源程序,亲测有效

Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,比较简单,在单片上很容易实现modbus协议简单解析如下: 1、主对从写数据操作 如果单片接收到一个报文那么就对报文进行解析执行相应的处理,如上面报文: 01 06 00 01 00 17 ...

weixin_42413713的博客 1万+

STM32做从modbus rtu接收

STM32做从modbus rtu接收 STM32中的RS485: 在STM32中采用RS485,因为STM32的串口输出为全双工,输出电压为3.3V或0V,而RS485为半双工,需要甚至-6V到+6V的电压,因此STM32串口的数据不能直接通过RS485进行递。因此在使用过程中,常常通过485芯片来对电平进行转换。例如SP3485或MAX3485等芯片。 485芯片中,和STM32相连的有一个发送引脚、一个输出引脚、和一个使能引脚,当使能引脚为0时,485此时为接收态...

一只大憨憨的博客 8136

基于STM32以及modbus——RTU的从程序(STM32作为从

Modbus协议是一种应用层报文传输协议,协议本身并没有定义物理层,所以支持多种电气接口,直接可以理解成他是软件层面的,各种的电气接口比如RS232RS485、TCP/IP等,他们是硬件层面。他们之间互不影响。3.2 Modbus通讯过程Modbus是一主多从的通信协议Modbus通信中只有一个设备可以发送请求。其他从设备接收主发送的数据来进行响应,从是任何外围设备,如I/O传感器,阀门,网络驱动器,或其他测量类型的设备。从站处理信息和使用Modbus将其数据发送给主站。

weixin_45739317的博客 1万+

STM32+RS485+Modbus-RTU(主模式+从模式)-标准库/HAL库开发

1、对modbus协议的0x03,0x06,0x10功能码进行测试+代码编写 2、使用modbus poll软件,modbus slave软件、串口调试助手进行模拟测试 3、使用STM32分别作为modbus协议的主和从进行测试 4、STM32使用串口中断超时接收数据 5、STM32使用DMA传输数据 6、STM32HAL库开发(主+从模式均进行测试)

qq_37281984的博客 11万+

STM32移植FreeModbus RTU教程2(FreeModbus的移植)

基于原子F103精英版RS485实验工程的Freemodbus RTU的移植资源准备及Freemodbus文件内容说明Freemodbus文件说明开始移植 Freemodbusstm32平台工程中工程文件内modbus文件夹内容的添加keil工程内modbus源码及头文件的添加keil工程接口函数的补充及报错的解决 资源准备及Freemodbus文件内容说明 移植FreeModbus版本为 FreeModbus V1.6提取码:1xkk 硬件平台为原子F103精英版,移植基础工程为 实验RS485通讯模板

weixin_42634914的博客 9485

基于STM32MODBUS-RS485——RTU程序实现

这里为什么说RS485MODBUS实现载体呢,因为RS485仅仅只是一种硬件电平标准,我的理解就是在串口的基础上加了电平转换芯片比如MAX485,将串口的TTL电平转换成了RS485差分电平。 贴上代码段

zwbzero的博客 1万+

STM32--MODBUS 通讯

MODBUS STM32通讯篇 文章目录MODBUS STM32通讯篇一、MODBUS简介二、MODBUS协议详解1.MODBUS通讯方式①.ASCII方式②.RTU方式③.TCP方式2.读入数据总结 一、MODBUS简介 ①Modbus协议是一种请求/应答的串行通信协议,是一种工业现场总线协议标准。是一项应用层报文传输协议,用于在通过不同类型的总线或网络连接的设备之间的客户/服务器通信。 ②Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。 ③标准的Modbus

weixin_43281206的博客 1万+
上一篇: 随笔:在C语言中如何快速的将16位数据拆开存到8位数组中
下一篇: 随笔:卡尔曼滤波前置知识(概统知识的复习)
Dobolong
博客等级 码龄9年 1014粉丝 23原创
评论 54
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值