经过测试STM32H750的DMA1、DMA2可以在如下配置下,实现无SRAM总线竞争的条件下,6个AHB总线时钟一次的SRAM到GPIO的数据搬运。
[C] 纯文本查看 复制代码
__HAL_RCC_DMA1_CLK_ENABLE();
DMA_Handle.Instance = DMA1_Stream1;
DMA_Handle.Init.Request = DMA_REQUEST_GENERATOR0;
DMA_Handle.Init.Direction = DMA_MEMORY_TO_PERIPH;
DMA_Handle.Init.PeriphInc = DMA_PINC_DISABLE;
DMA_Handle.Init.MemInc = DMA_MINC_ENABLE;
DMA_Handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
DMA_Handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
DMA_Handle.Init.Mode = DMA_CIRCULAR;
DMA_Handle.Init.Priority = DMA_PRIORITY_LOW;
DMA_Handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
DMA_Handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL; // DMA_FIFO_THRESHOLD_1QUARTERFULL;
DMA_Handle.Init.MemBurst = DMA_MBURST_SINGLE;
DMA_Handle.Init.PeriphBurst = DMA_PBURST_SINGLE;
做到6个周期完成一次传输的关键在于DMA的FIFO设置,使用FIFO后,应该是降低了DMA对SRAM总线的需求,缩短了一次传输的时钟需求。
在禁止FIFO时,需要9个时钟才能稳定触发一次传输。
而且对FIFO的触发阈值不能设置为FULL |