要彻底消除SPI传输中的CPU停顿,核心是让DMA完全接管数据搬运,并用双缓冲(Ping-Pong)机制保证数据流不间断。具体实操:1)配置两个内存缓冲区(如bufA和bufB),分别对应SPI的DMA发送/接收通道;2)使能DMA的循环模式或传输完成中断,在中断服务函数中切换当前缓冲区指针,并重新装载DMA源/目标地址(注意地址对齐和长度设置);3)确保SPI时钟和DMA请求优先级匹配,避免总线冲突;4)对于接收,可结合SPI的RXNE事件触发DMA,实现全自动接收。关键点:双缓冲切换必须在DMA传输完成中断中快速完成(建议用寄存器操作),且缓冲区大小需覆盖最大传输单元。若使用RTOS,可配合信号量通知应用层,但中断内不做耗时操作。实际测试时,用逻辑分析仪观察CS和时钟,确认无间隙。
mcuku 阿沐 · 2026-08-27