forgot 发表于 2025-4-17 09:05

串口空闲中断与串口超时中断

1. 空闲中断(Idle Interrupt)
触发条件
当串口总线在接收数据后持续保持空闲状态(如高电平)超过一帧时间(即一个字符传输时间)时触发。
硬件自动检测总线空闲状态,与数据长度无关。

特点
依赖总线物理状态,而非时间。
常用于检测不定长数据帧的结束,无需依赖特定结束符。

应用场景
Modbus通信:不定长数据包的接收。
DMA接收:配合DMA自动搬运数据,空闲中断通知CPU处理。
高速数据流:快速响应数据帧结束,减少软件延迟。

2. 超时中断(Timeout Interrupt)
触发条件
当两次接收数据的间隔超过预设时间时触发。
时间阈值通过硬件计数器或波特率计算配置(如STM32的接收超时功能RTO)。

特点
基于时间阈值,与总线状态无关。
可灵活配置超时时间。
需在每次收到数据时重置超时计数器。

应用场景
数据分段接收:处理间歇性数据流(如GPS模块输出)。
通信故障检测:长时间无数据时触发错误处理。
低功耗场景:超时后进入睡眠模式。

LOVEEVER 发表于 2025-4-20 15:23

当两次接收数据的间隔超过预设时间时触发。

一切D都好 发表于 2025-5-8 14:36

空闲中断就是没有数据的时候,应该就是空闲吧

canfeil 发表于 2025-5-8 15:40

你说的超时是不是接收到数据之后,有一段时间接收不到就是超时中断了啊

gongqijuns 发表于 2025-5-8 17:03

串口空闲中断当串口接收线(RX)保持高电平(逻辑1)超过1个字符时间时触发(即当前字符接收完成后无新数据到达)。

nqty 发表于 2025-5-8 18:11

由UART硬件模块检测RX引脚电平,结合波特率计算字符时间(如9600bps时,1字符时间=1/9600≈104μs)。

yuliangren 发表于 2025-5-8 19:33

空闲中断标志位(如STM32的USART_SR_IDLE)由硬件自动置位,需软件清零

hhdhy 发表于 2025-5-8 21:36

接收端无法预知数据长度时,通过空闲中断判断一帧结束(如Modbus RTU协议)。

miltk 发表于 2025-5-9 09:08

快速区分连续发送的多帧数据(如GPS模块输出NMEA语句时以\r\n结尾,但帧间无明确间隔)。

twinkhahale 发表于 2025-5-9 11:14

串口超时中断触发条件:当接收器在超时阈值时间内未收到新数据时触发(如50ms无数据到达)。

nuan11nuan 发表于 2025-5-9 13:16

部分高端MCU(如STM32H7)内置UART超时中断功能(通过USART_CR1_RTOIE使能),超时阈值由USART_RTOR寄存器配置。

eleg34ance 发表于 2025-5-9 14:35

通过定时器或系统滴答定时器(SysTick)实现,需在接收中断中重置定时器。当数据帧不完整或传输中断时,通过超时强制结束接收(如TCP/IP over UART的Keep-Alive机制)。
页: [1]
查看完整版本: 串口空闲中断与串口超时中断