STM32F4 DMA可以并行工作吗?

STM32F4 DMA可以并行工作吗?,stm32,dma,stm32f4,Stm32,Dma,Stm32f4,我正在使用STM32F446开发一个应用程序,它需要3x SPI(我是所有应用程序的主人)和SDIO接口 其中2个SPI(SPI1和SPI2)是需要每1ms读取一次的传感器。对于SPI1,我需要写入1个字节,对该字节的响应将是该值。对于SPI2,我需要先写入1字节,然后读取6字节 第三个SPI(SPI3)和SDIO用于通信/记录,它们都不需要以固定周期传输数据 看看第9节,看起来我不能在外设中断的情况下触发DMA传输(这太糟糕了),但是我能做所有的事情吗 定时器每1ms中断一次:触发内部ISR

我正在使用STM32F446开发一个应用程序,它需要3x SPI(我是所有应用程序的主人)和SDIO接口

其中2个SPI(SPI1和SPI2)是需要每1ms读取一次的传感器。对于SPI1,我需要写入1个字节,对该字节的响应将是该值。对于SPI2,我需要先写入1字节,然后读取6字节

第三个SPI(SPI3)和SDIO用于通信/记录,它们都不需要以固定周期传输数据

看看第9节,看起来我不能在外设中断的情况下触发DMA传输(这太糟糕了),但是我能做所有的事情吗

  • 定时器每1ms中断一次:触发内部ISR SPI1和SPI2 DMA传输。DMA传输用接收到的传感器数据填充缓冲区
  • 每次我需要写入SDIO或SPI3时,我都会以比SPI1和SPI2的优先级更低的优先级启动DMA传输
  • 我猜SPI1和SPI2可以并行执行,因为我有两个DMA控制器,如果它们同时出现在SPI2和SDIO上,则后者将被阻止,直到控制器空闲。是这样吗

    对于SPI1,我需要写入1个字节,对此的响应将是 价值对于SPI2,我需要先写入1字节,然后读取6字节

    请注意,使用SPI时,读取和写入同时发生,您可以通过写入一个伪字节来读取一个字节,在设置要传输的字数时应考虑到这一点

    DMA传输用接收到的传感器数据填充缓冲区

    某些SPI从机无法正常工作,除非在传输之间将CS设置为高。如果您的传感器是这种情况,您应该在接收DMA流中断中执行此操作。如果您正在考虑让DMA自动填充一个大的缓冲区,那么在这种情况下,这是行不通的

    我猜SPI1和SPI2可以并行执行,因为我有2个 DMA控制器,如果它们同时出现在SPI2和 SDIO,后者将被阻止,直到控制器空闲。是吗 对吧?


    它们不会被阻塞,但只要更高优先级的传输不会完全占用DMA带宽,就可以进行交织。没有SPI传输可以做到这一点,因为SPI至少需要16个时钟周期来传输一个字节(至少2个周期/位)。

    我已经这样做了,DMA的3个SPI以最大速度传输,但由于SPI1和SPI2很慢(对于stm4,1ms非常慢),我会在中断中设置一个标志为1,如果设置了标志,则在主代码循环中检查它。如果您使用DMA,您将无法获得更高的速度,因为您需要完全相同的速度,每个ms都会重新启动DMA。