2

I want to use SPI2 and UART4 peripherals with DMA but, as I see DMA1-SPI2-Tx and DMA1-UART4-Tx uses the same dma stream.

SPI2_TX  - DMA1_Stream4 (channel 0)
UART4_TX - DMA1_Stream4 (channel 4)

Is there any way to use the same DMA stream for the different peripherals at the same time? enter image description here

4

1 回答 1

2

有什么方法可以同时为不同的外设使用相同的 DMA 流?

不,没有。每个流只能选择一个通道。当然,如果您不是同时在两个端口上传输,那么您可以在通道之间来回切换。

使用另一个流

尽管 SPI2 TX 和 UART4 TX 似乎都被限制在 Stream 4 中,但可以通过其他方式控制传输通道。

注意:这仅适用于没有流控制的SPI 主机或UART 。即只要 MCU 完全控制时序。

没有规则说 DMA 传输应该访问请求来自的同一个外围设备(但是它们必须在APBDMA1 的同一总线上)。可以使用 eg TIM6(或连接到 DMA1 的任何其他计时器)在 4 以外的流上生成周期性 DMA 请求,并设置该流以将数据从内存传输到SPI2->DR.

只需设置定时器频率以生成 1/8 SPI 比特率的更新 DMA 请求,写入几个字节SPI2->DR以填充 FIFO,然后启动定时器。

使用具有各种帧选项的 UART 会更加棘手,但它通常应该可以工作。

于 2018-11-23T14:54:12.333 回答