前言
STM32
串口空闲中断有效的解决了不定长数据包接收问题,在一些特定场合空闲中断并不起作用。
step1 空闲中断的触发条件
在完成一帧数据接收后,紧接着收到空闲帧将触发 STM32
串口空闲中断,触发的前提为允许空闲中断。空闲帧的定义为,连续收到一定长度的高电平。长度与设置有关,通常为起始位 + 数据位 + 停止位长度。例如,串口配置位 115200+8+N+1
,长度为 10bit
,即 1bit
(起始位)+8bit
+1bit
(停止位)。也就是说,当你接收完一帧数据后,如果 Rx
引脚持续 10bit
的高电平将触发空闲中断。
step2 特定场合无法触发空闲中断
正常情况下,串口接收完成数据后 Rx
引脚一直为空闲状态,即保持高电平,可以触发空闲中断。特定场合下,如 STM32
串口与串口转 422
芯片 MAX3490
连接时,空闲中断将失效。原因为完成数据发送后,MAX3490
使得 STM32
Rx
引脚处于不定状态,有可能为低电平,也可能为高电平,与最后发送的数据有关。
因此,在使用 STM32
串口空闲中断时,需要确保数据接收完成后,Rx
引脚一直保持高电平,否则空闲中断将无法触发。
? ?