请注意IDLE中止是只检测到闲暇帧时产生的中止。
而闲暇帧的界说是:被视为完全由“1"组成的一个完好的数据帧,后边跟着包括?数据的下一帧的开端位。
关键是后边半句话,要求有下一帧的开端位,而你的状况恰巧没有下一帧的开端位(传输现已完毕),当然不会有中止了。
举例:
假如接连发送一串字符串“123”会产生闲暇中止吗?
不会,由于没有下一帧的开端位。
假如进了闲暇中止不手动清零,会一向进入闲暇中止。
所以用这个IDLEIE来完毕DMA方法的接纳,是适宜的。仅有一个不适宜的当地是:假如你发送一个字符串后,将DMA设置好接纳传输方法,然后:对方没呼应,你一个字符也收不到,这时候,IDLEIE是不会来的,有必要有个总超时检测来完毕DMA接纳方法:由于IDLEIE中止有必要要有字符串收到,然后有一个字符的时刻没收下一个字符的开始位,才会产生。
别的,1个字符距离的闲暇就完毕接纳:是默许任何对方发送字节的距离不大于1个字符距离,是不符合Modbus-RTU协议的,RTU协议是3.5个字符时刻,假如收到”a”后,停了2个字符时刻,又收到”b”,Modbus-RTU仍是以为ab是同一帧的接连字符。