×
单片机 > 单片机程序设计 > 详情

stm32 USART_IT_IDLE

发布时间:2020-08-27 发布时间:
|
请注意IDLE中断是只检测到空闲帧时产生的中断。

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

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


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

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

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


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向