核心思路是采用双缓冲或乒乓缓冲配合DMA半传输/传输完成中断,避免单环形缓冲区在DMA连续写入时被CPU读取覆盖。实操建议:1) 使用两个大小相等的缓冲区(如各256字节),DMA配置为循环模式,开启HT(半传输)和TC(传输完成)中断;当HT触发时CPU处理前半段,TC触发时处理后半段,确保CPU处理速度高于DMA写入速度。2) 在中断服务程序中,将数据快速拷贝到应用层环形队列(如使用memcpy),并置标志位,主循环解析,避免在中断内做耗时操作。3) 若数据帧较长,可结合空闲中断(IDLE)判断帧结束,但注意IDLE可能误触发,需加超时或帧头校验。4) 关键:确保DMA缓冲区大小大于最大帧长,且CPU处理逻辑无阻塞,否则仍会覆盖。建议先用逻辑分析仪实测吞吐率,再调整缓冲区尺寸。
mcuku 阿沐 · 2026-09-02