微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > stm32 USART_IT_IDLE

stm32 USART_IT_IDLE

时间:12-03 来源:互联网 点击:
请注意IDLE中断是只检测到空闲帧时产生的中断。

而空闲帧的定义是:被视为完全由“1"组成的一个完整的数据帧,后面跟着包含?数据的下一帧的开始位。

关键是后面半句话,要求有下一帧的开始位,而你的情况恰巧没有下一帧的开始位(传输已经结束),当然不会有中断了。

举例:
如果连续发送一串字符串“123”会发生空闲中断吗?
不会,因为没有下一帧的开始位。
如果进了空闲中断不手动清零,会一直进入空闲中断。

所以用这个IDLEIE来结束DMA方式的接收,是合适的。唯一一个不合适的地方是:如果你发送一个字符串后,将DMA设置好接收传输方式,然后:对方没响应,你一个字符也收不到,这时候,IDLEIE是不会来的,必须有个总超时检测来结束DMA接收方式:因为IDLEIE中断必须要有字符串收到,然后有一个字符的时间没收下一个字符的起始位,才会发生。

另外,1个字符间隔的空闲就结束接收:是默认任何对方发送字节的间隔不大于1个字符间隔,是不符合Modbus-RTU协议的,RTU协议是3.5个字符时间,如果收到"a"后,停了2个字符时间,又收到"b",Modbus-RTU还是认为ab是同一帧的连续字符。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top