“UART串口每来一个字节都进中断行不行?”这是嵌入式单片机常见追问。考点不在于说DMA更快,而在于理解CPU搬运数据与数据接收边界如何协作。
01 / 中断和DMA,真正差在哪里
逐字节中断接收的优点是逻辑直观,适合低速、短帧数据;缺点是每个字节都触发CPU处理,高波特率或多任务系统中更容易受到中断响应延迟的影响。
DMA允许外设数据直接搬运到内存缓冲区,CPU负责配置、帧结束判定和业务处理;DMA并不是不需要CPU,也不代表丢包永远不会发生。

02 / 工程中常见的接收方案
已知固定长度帧:DMA满缓冲中断或双缓冲机制即可判断一帧。
长度不固定:经常组合UART空闲线检测(IDLE)与DMA环形缓冲;处理时记录读写位置,防止覆盖未消费数据。
还应验证溢出、噪声导致的帧错误、数据缓存一致性(带D-Cache平台)、缓冲区边界和任务间同步。
03 / 面试参考回答
“短报文、吞吐低时用中断更简单。持续高速串口流我倾向DMA加环形缓冲,由空闲检测或协议长度确定帧边界,应用层做队列解析和异常计数;最后用连续发送、CPU高负载和超长帧验证不会丢数据。”
04 / 追问:DMA收到了,为什么解析还是错?
重点排查读写指针竞争、缓冲区覆盖、帧头帧尾和校验处理,而不是一上来就改波特率。
知识点:STM32面试题、UART DMA接收

扫码关注






























