[!简介] DMA双缓冲,DMA与CPU读写分离、交替工作,解决单缓冲易丢失数据以及CPU阻塞问题

硬件双缓冲/软件双缓冲

  • 硬件双缓冲DBM (Double Buffer Mode)

需要硬件支持:DMA有 M0AR/M1AR 两个内存地址寄存器,使其指向两个大小相等的部分,DBMS位启用双缓冲,自动开启循环模式

通过硬件实现的双缓冲,DMA全程不停止,没有任何空档期,只要求CPU在DMA写回这个buff之前处理完数据

  • 软件双缓冲

通过创建 两个缓冲buff 或 DMA传输过半中断 实现,最终都需重新启动DMA开启新一轮数据接收

通过中断重新为DMA定向buff来实现双缓冲,需要CPU能及时响应中断,否则数据会在一个buff中不断更新覆盖

在低速场景(如串口9600/115200)软件双缓冲够用 在中高速(1Mbps串口、ADC高频采样)软件双缓冲会开始丢数

大致应用流程

  • DMA在 buf0buf1 之间自动切换,触发中断
  • CPU在回调里处理“刚刚采满”的那个buffer
  • 不在DMA中断中进行重处理,通过设置标志位,在while中处理