终极吞吐方案:STM32 串口 DMA 接收配合空闲中断(IDLE)实现不定长高速接收

在处理传感器回传、或者是与 Web 调试端进行大容量文件传输(如固件 OTA 升级包)时,如果继续采用'单字节触发一次串口接收中断'的古老方案,单片机主频将被极其频繁的中断服务程序(ISR)完全挤占、极易引发 CPU 栈溢出和中断重入崩溃,更无法准确提取出每一次接收到的'不定长(Variable Length)'数据帧边界。

STM32 的 **串口 DMA 接收 + 串口空闲中断(UART IDLE Interrupt)** 联合技术,是嵌入式行业公认的高速异步通信终极解决方案。具体架构如下:

  1. 开启 DMA 接收:配置 STM32 的硬件串口 DMA 模块,直接在硬件层将 RX 引脚接收到的每个字节默默地、源源不断地搬运到内部 SRAM 的指定环形 Buffer(RAM 数组)中,在此期间不需要 CPU 核心进行任何软件干涉,CPU 使用率为 0%。
  2. 空闲中断触发机制:当发送端(上位机)把一帧不定长度的数据包发送完毕后,通信线上必然会出现至少 1 个字节宽度以上的'持续高电平空闲(Idle)期'。STM32 的串口硬件检波模块一旦嗅探到这一空闲,便会立刻抛出一个 IDLE 空闲中断。CPU 在此时才会被唤醒一次,进入空闲中断回调,通过读取 DMA 的剩余传输计数器寄存器(CNDTR),即可在微秒级时间内反算出来这一帧数据的准确字节长度,并直接进行内存解析。该技术能完美抗住 460800 甚至更高速波特率下的爆发大数据流。