UART,MODBUS

keil中使用UART发送接收数据,通讯协议使用MODbus。主机发送03指令读取从机数据,如何通过软件去判断主机没有收到从机的回复。板子使用的是STM32H7系列的。

发送完成后开启一个定时器100~500ms中断自选时间,然后进入定时器中断后判断接收数据长度如果为0说明没接收到,接收中断接收到数据对数据判断按照modbus,

实际上就是加一个超时判断。
1.首先要保证自身主机发送的机制合理,正常MODBUS协议发送完一帧数据至少要间隔3.5字节,再发送下一帧数据。(单字节发送速度,根据波特率可以算出)
2.超时判断,这个延时时间,取决于从机的响应时间,一般从机在接收到数据后,会在3~5个字节时间内响应,当然有的时间会更长,但是整体一般不会超过100ms。当然这主要取决于通讯的波特率,波特率越高,发送速度越快,响应时间一般也越快。
工程一般都是通过中断置标志位,主循环加一个100MS延时时间判断(时间机制为定时器触发累加),比如发一帧数据结束时time=0,然后加一个判断if(time>100),在这个100ms内一直判断是否有收到数据(接收了,置接收成功标志,time清零计时;超过了,置超时标志,time清0,重新再发数据,在判断,如此往复)

做个超时接收判断吧。。