RYMCU

STM32串口空闲中断不起作用怎么办?

Hugh 5 月前
# STM32 # 串口

前言

STM32 串口空闲中断有效的解决了不定长数据包接收问题,在一些特定场合空闲中断并不起作用。

step1 空闲中断的触发条件

在完成一帧数据接收后,紧接着收到空闲帧将触发 STM32 串口空闲中断,触发的前提为允许空闲中断。空闲帧的定义为,连续收到一定长度的高电平。长度与设置有关,通常为起始位 + 数据位 + 停止位长度。例如,串口配置位 115200+8+N+1,长度为 10bit,即 1bit(起始位)+8bit+1bit(停止位)。也就是说,当你接收完一帧数据后,如果 Rx 引脚持续 10bit 的高电平将触发空闲中断。

step2 特定场合无法触发空闲中断

正常情况下,串口接收完成数据后 Rx 引脚一直为空闲状态,即保持高电平,可以触发空闲中断。特定场合下,如 STM32 串口与串口转 422 芯片 MAX3490 连接时,空闲中断将失效。原因为完成数据发送后,MAX3490 使得 STM32 Rx 引脚处于不定状态,有可能为低电平,也可能为高电平,与最后发送的数据有关。

因此,在使用 STM32 串口空闲中断时,需要确保数据接收完成后,Rx 引脚一直保持高电平,否则空闲中断将无法触发。

后发布评论