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是同一帧的连续字符。
而空闲帧的定义是:被视为完全由“1"组成的一个完整的数据帧,后面跟着包含?数据的下一帧的开始位。
关键是后面半句话,要求有下一帧的开始位,而你的情况恰巧没有下一帧的开始位(传输已经结束),当然不会有中断了。
举例:
如果连续发送一串字符串“123”会发生空闲中断吗?
不会,因为没有下一帧的开始位。
如果进了空闲中断不手动清零,会一直进入空闲中断。
所以用这个IDLEIE来结束DMA方式的接收,是合适的。唯一一个不合适的地方是:如果你发送一个字符串后,将DMA设置好接收传输方式,然后:对方没响应,你一个字符也收不到,这时候,IDLEIE是不会来的,必须有个总超时检测来结束DMA接收方式:因为IDLEIE中断必须要有字符串收到,然后有一个字符的时间没收下一个字符的起始位,才会发生。
另外,1个字符间隔的空闲就结束接收:是默认任何对方发送字节的间隔不大于1个字符间隔,是不符合Modbus-RTU协议的,RTU协议是3.5个字符时间,如果收到"a"后,停了2个字符时间,又收到"b",Modbus-RTU还是认为ab是同一帧的连续字符。
stm32USART_IT_IDL 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)