modbus stm32实时响应程序求助

2019-12-11 18:40发布

本帖最后由 hy2515131 于 2019-4-13 09:29 编辑

更正错误
目前使用一款别人开发的ADC采集系统,modbus-RTU通信实时采集ADC的数据,57600波特率下,采集系统收到modbus指令后间隔280us(实测是215us)回传modbus指令,回传的指令还是经过滤波处理的ADC数据,求modbus实时通信算法。
STM32型号不限制,可以使用F1 F4系列都可以。
自己尝试使用STM32F429IGT6移植了freemodbus,也可以正常通信,不过实时性不高,用的是查询模式,
在while大循环中增加延时之后,发送指令和接收指令之间的时间变化明显,delay延时1秒就导致发送和接收的时间超过1秒,对于实时系统来说这是完全不能接受的。

freemodbus程序结构如下
while (1)
{
Delayms();
ADCAcquie
//FreeMODBUS不断查询
eMBPoll();
}
想求一个实时性强的modbus stm32通信算法,不限于freemodbus,使用自己写的modbus程序也可以
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
ZXF_CUG
1楼-- · 2019-12-12 00:05
大循环中增加1秒延时?没见过这么写程序的。。。
zhugean
2楼-- · 2019-12-12 00:41
暴力的方法是把eMBPoll()直接放在3.5T定时中断里,就没有延时了。正常的做法是缩短主循环的周期:)
hy2515131
3楼-- · 2019-12-12 01:23
 精彩回答 2  元偷偷看……
hy2515131
4楼-- · 2019-12-12 01:57
zhugean 发表于 2019-4-12 16:43
暴力的方法是把eMBPoll()直接放在3.5T定时中断里,就没有延时了。正常的做法是缩短主循环的周期:) ...

这个想法比较好,不过这样会不会影响主循环的ADC采集
lcw_swust
5楼-- · 2019-12-12 07:18
串口接收时复位并启动某个定时器,用于检测帧结束,并在这个定时中断里处理数据,然后用DMA发送。
nanfang2000
6楼-- · 2019-12-12 08:19
定时中断或者跑rtos都是常规方法了,很简单

一周热门 更多>