我正在使用 STM32F446 开发一个需要 3x SPI(我是所有这些方面的大师)和 SDIO 接口的应用程序。
其中 2 个 SPI(SPI1 和 SPI2)是需要每 1ms 读取一次的传感器。对于 SPI1,我需要写入 1 个字节,对此的响应将是值。对于 SPI2,我需要写入 1 个字节,然后读取 6 个字节。
第三个 SPI (SPI3) 和 SDIO 用于通信/记录,它们都不需要以固定周期传输数据。
查看STM32F46x 手册,第 9 节,看起来我不能通过外设中断触发 DMA 传输(这太糟糕了),但我可以做以下所有事情:
- 每 1ms 的定时器中断:在 ISR 内部触发 SPI1 和 SPI2 DMA 传输。DMA 传输用接收到的传感器数据填充缓冲区;
- 每次我需要写入 SDIO 或 SPI3 时,我都会启动优先级低于 SPI1 和 SPI2 的 DMA 传输。
我猜 SPI1 和 SPI2 可以并行执行,因为我有 2 个 DMA 控制器,如果它们同时发生在 SPI2 和 SDIO 的同时,后者将被阻塞,直到控制器空闲。那正确吗?