STM32 DMA(并发流,FIFO,突发模式,双缓冲)

ric*_*nle 2 c stm32 dma stm32f4discovery

stm32F4系列的DMA有一些高级功能,我可以在这里要求澄清吗?

  • 并发流:两个流可以同时传输数据吗?由于允许一个字节传输.如果总线宽度为32位,则可以进行4次并发传输.顺便说一下,STM32的AHB总线宽度是多少?

  • FIFO模式:如果无法进行并发传输,我猜这里可以使用FIFO.FIFO将有助于将数据从低速外设等待到DMA而不占用AHB总线.当准备好一定数量的数据时,数据块将一起发送到内存.我的理解是否正确?

四字深度每个流32个先进先出存储缓冲器(FIFO)

那是什么意思?FIFO中可以存储多少数据?4或4*32?

  • 突发模式:实际突发模式有什么作用?它在数据表中说可以传输65535个数据.65535与突发模式之间有什么关系?

  • 双缓冲模式:

双缓冲区类型事务:使用两个
内存指针进行内存的双缓冲区传输(当DMA
从/向缓冲区读/写时,应用程序可以向/从另一个
缓冲区写入/读取).-----来自STM32F4的参考手册

我的问题是:在DMA传输期间,AHB总线不适用于Cortex M4,应用程序如何从其他缓冲区读取?

ric*_*nle 5

在做了一些研究之后,我发现了这个,以防有人需要它.

  • 并发流:在一个DMA中不可能.可以同时运行DMA1,DMA2.例如:F427可以同时执行:

    • CPU访问Flash(读取代码)
    • DMA1访问SRAM(传输一些缓冲区)
    • DMA2访问SDRAM(另一个缓冲区)
  • FIFO用于临时存储来自低速设备的数据.当累积了一定数量的数据时,可以发送突发,以节省AHB的资源.由于DMAC使用AHB时,处理器无法使用它.FIFO具有4*32位大小.它可以配置为16*8位(16*0ne字节).

  • 突发模式:从FIFO到连续发送一块数据,比如说存储器.只有在发送突发时才会占用AHB.突发模式用于节省AHB的资源.它与65535数据大小限制无关.
  • 双缓冲:如前所述,AHB仅在传输数据时被占用.因此,当DMA没有占用AHB时,处理器仍然可以从存储器中获取数据.