MODBUS移植STM32,STM32做从机

本文详细介绍了MODBUS通信协议,包括单工、半双工和全双工通信方式,主从模式,以及MODBUS主机寻址帧的RTU和ASC方式。还探讨了从设备的回应数据包格式。接着,讲述了MODBUS协议在STM32上的移植流程,包括系统初始化、串口配置、定时器设置和功能码程序。最后,文章分享了试验中观察到的现象。
摘要由CSDN通过智能技术生成

MODBUS学习日志

一、MODBUS通信协议

1、通信协议

  1. 硬件层协议:解决传输问题,相当于路
  2. 串口通信协议 : RS232、RS485、CAN总线
1.1、三种通信方式
1.1.1、单工方式(simplex)

单工通信只支持信号在一个方向上传输(正向或反向),任何时候不能改变信号的传输方向。为保证正确传送数据信号,接收端要对接收的数据进行校验,若校验出错,则通过监控信道发送请求重发的信号。此种方式适用于数据收集系统,如气象数据的收集、电话费的集中计算等。例如计算机和打印机之间的通信是单工模式,因为只有计算机向打印机传输数据,而没有相反方向的数据传输。还有在某些通信信道中,如单工无线发送等。

1.1.2、半双工方式(需要上层软件做协议)(half-duplex)

半双工通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输。因此,半双工通信实际上是一种可切换方向的单工通信。此种方式适用于问讯、检索、科学计算等数据通信系统;传统的对讲机使用的就是半双工通信方式。由于对讲机传送及接收使用相同的频率,不允许同时进行。因此一方讲完后,需设法告知另一方讲话结束(例如讲完后加上’OVER’),另一方才知道可以开始讲话。

1.1.3、全双工方式(full-duplex)

全双工通信允许数据同时在两个方向上传输,即有两个信道,因此允许同时进行双向传输。全双工通信是两个单工通信方式的结合,要求收发双方都有独立的接收和发送能力。全双工通信效率高,控制简单,但造价高。计算机之间的通信是全双工方式。一般的电话、手机也是全双工的系统,因为在讲话时可以听到对方的声音。

参考链接: https://blog.csdn.net/iningwei/article/details/100134783

1.2、主从模式:

主从模式,是数据库设计模式中最常见、也是大家日常设计工作中用的最多的一种模式,它描述了两个表之间的主从关系,是典型的“一对多”关系。
规定要求:

  1. 系统中只有一个设备时主机
  2. 系统中的所有从机不可以主动向主机发数据
  3. 系统中的主机和所有从机上电后都处于监听状态
  4. 任何一次的数据交换都要由主机发起
     4.1、将自己转为发送状态
     4.2、主机按照预先约定的格式,发出寻址数据帧
     4.3、恢复自己的接受状态,等待所寻址的从机响应
1.3、软件层协议:解决传输的目的
1.3.1、主从模式
  1. 整个系统只能有一个主机,每个从机必须有一个唯一的地址(0~247)

  2. 其中0号地址位广播地址:主机向0号地址的设备发数据包,也就是要把该数据包发给所有的从设备。0号地址的数据包所有从机是不回应的。

2、MODBUS的主机寻址帧的格式

>MODBUS的两种传输方式:RTU方式和ASC方式
>
>RTU方式:也叫十六进制 例如:发送0x03:0000 0011
>
>RTU方式:也叫十六进制 例如:发送0x03:0000 0011
>
>ASC方式:0x03  {发送0 :0x30:0011 0000 }{ 发送3:0x33:0011 0011}
>
>所以ASC的通信效率低,但是方便调试,使用实验;工业上都采用RTU方式,效率高
2.3、RTU方式

​ 1、从机地址 2、功能码(127个) 3、数据1~数据n 4、校验码(CRCL、CRCH)

其中: 1~3参与CRC16校验

从机是以接收数据停止时间达到3.5个字节以上,那么就认为主机的寻址帧完成,并开始处理。

例如:波特率:9600bt/s

所以每位数据传输的时间T=1000000us/9600=104us

一字节时间位=10T=1004us(起始位 8位 停止位)(串口格式)

所以时间为:3.5*10T=3645us

2.4、ASC方式

1、: 2、地址 3、功能码 4、数据1~数据n 5、(地址数据)采用LRC校验=((地址+功能码+数据1数据n)%256)+1=(0255) 6、13 10(回车 换行)

2.5、CRC简述

1.将一个 16 位寄存器装入十六进制 FFFF (全 1). 将之称作 CRC 寄存器.
2.将报文的第一个 8 位字节与 16 位 CRC 寄存器的低字节异或,结果置于 CRC 寄存器.
3.将 CRC 寄存器右移 1 位 (向 LSB 方向), MSB 充零. 提取并检测 LSB.
4.(如果 LSB 为 0): 重复步骤 3 (另一次移位).
(如果 LSB 为 1): 对 CRC 寄存器异或多项式值 0xA001 (1010 0000 0000 0001).
5.重复步骤 3 和 4,直到完成 8 次移位。当做完此操作后,将完成对 8 位字节的完整操作。
6.对报文中的下一个字节重复步骤 2 到 5,继续此操作直至所有报文被处理完毕。
7.CRC 寄存器中的最终内容为 CRC 值.
8.当放置 CRC 值于报文时,高低字节必须交换。

3、从设备的回应数据包格式

  1. 回应数据包和主机查询的数据包格式包是一致的
  2. 正常回应时,功能码与主机发的功能码一致(1~127)
  3. 异常的回应,功能码要在收到的功能码基础上加上128 例如:发 0x03 收:0x03 +128

4、MODBUS从机协议实现

  1. 硬件上具备串口
  2. 硬件上需要定时器(精确到毫秒级)

二、MODBUS移植STM32流程

1、系统初始化设计流程

评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxiaodawei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值