ModbusRTU中的T3.5和T1.5的处理

本文详细解释了ModbusRTU协议中T3.5和T1.5时间间隔的计算和作用,以及在FreeRTOS环境下如何处理数据接收。介绍了在不同波特率下,如何确保3.5个字符和1.5个字符的时间间隔以正确接收和区分帧数据,同时展示了STM32中USART接收中断的处理流程。
摘要由CSDN通过智能技术生成

ModbusRTU中的T3.5和T1.5的处理

本文是对上一篇文章的补充,写一写上篇文章中T3.5和T1.5的处理过程

1.首先讲一讲3.5个字符和1.5个字符的时间计算

在RTU模式,报文由时长至少3.5个字符时间的空间间隔区分。如下图:
两个帧数据之间,如果超过3.5个字符(字节)定时器的接收或发送周期,则产生中断,告诉本次帧接收完成了。两个帧数据之间,如果超过3.5个字符(字节)定时器的接收或发送周期,则产生中断,告诉本次帧接收完成了。在这里插入图片描述
两个帧数据之间,如果超过3.5个字符(字节)定时器的接收或发送周期,则产生中断,告诉本次帧接收完成了。
modbus帧内间隔在这里插入图片描述
整个报文帧必须以连续的字符流发送,如果两个字符之间的空闲大于1.5个字符时间,则报文帧认为不完整,应该被接收点丢弃。
注意:RTU接收驱动程序的实现,由于T1.5和T3.5的定时,隐含着大量对中断的管理。在高通信速率下,这导致CPU负担家中,因此,在<=19200bps时,这两个定时必须严格遵守;对于>19200bps的情形,应该使用2个定时的固定值,建议字符间的超时时间t1.5为750us;帧间超时时间为1.75ms。
3.5字符的时间间隔采用以下方式计算:

1个字符包括1位起始位、8位数据位(一般情况)、1位校验位(或者没有)、1位停止位(一般情况下)

这样说起来一般情况下1个字符就包括11位

那么3.5个字符就是3.5 x 11=38.5位 ;
波特率含义是每秒传输的二进制位的个数
我设置的波特率是9600bps,意思就是说每1秒(也就是1000毫秒)传输9600个位,
反过来说传输9600个二进制位需要1000毫秒
那么传输38.5个二进制位需要的时间就是:
38.5/9.6=4.0104167毫秒
MODBUS RTU要求一帧数据起始和结束至少有大于等于3.5个字符的时间
在波特率为9600的情况下,只要大于4.0104167毫秒即可!
1.5个字符时间间隔就是(1.5x11)/9.6=1.71875‬ms
而在上篇文章中已经设定了定时器溢出时间为 Tout=((9+1)*(7199+1))/72000000=1ms

2.0 FreeRTOSModbusRTU中关于数据的接收的处理过程

USART中字节的接收和发送:
在STM32的USART中,是按照字节发送的,每接收或发送一个字节&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值