空闲中断 (Idle Interrupt):
触发条件:
当串口接收数据线(RX)从有数据传输的状态(低电平)进入并保持高电平状态(即“空闲”状态)超过一个完整数据帧的时间(通常是 1 个字节的传输时间,包括起始位、数据位、停止位) 时,硬件会自动产生空闲中断。
工作原理:
当第一个数据位(起始位,低电平)到达时,接收状态被激活。
在最后一个停止位(高电平)结束后,如果 RX 线继续保持高电平(空闲),并且这个高电平状态持续的时间超过了传输一个字节所需的时间(例如,在 115200bps 下约为 87us),硬件就会置位空闲中断标志位。
如果下一个字节的起始位(低电平)在空闲中断判定时间结束前到达,接收状态会继续,空闲中断不会被触发。
关键特点:
基于线路物理状态: 直接检测 RX 线上的电平变化。
固定“空闲”判定时间: 判定时间通常固定为 1 个字节的传输时间,由波特率决定。
指示帧结束: 最常用于标识一个连续发送的数据帧的结束。在帧内部,数据位之间是连续的,没有长于 1 字节时间的空闲。
适合协议: 特别适合帧内数据连续紧密排列的不定长协议(如 Modbus RTU、自定义二进制协议)。一旦检测到线路空闲,就认为当前帧接收完毕。
优点:
实现简单,硬件自动完成检测。
能可靠地检测连续数据块的结束。
缺点:
如果数据帧内部存在较长的停顿(长于 1 字节时间),会被错误地识别为一个帧的结束和下一个帧的开始(误触发)。
对于帧内包含自然间隔(如空格)的文本协议(如 AT 命令响应、NMEA 0183 GPS 语句),不太适用,容易把一个完整的句子切分成多个“帧”。
|
|