STM32:通过DMA直接将外围设备I2C与UART连接

时间:2019-06-11 18:19:09

标签: stm32 uart i2c dma hal

我在不同的PCB上设置了2个STM32L0 MCU,它们通过I2C进行通信。 我需要将传入的数据I2C通信(RX)从一个MCU尽可能快地中继到另一个MCU的UART(TX),而无需对数据本身进行任何处理。

是否可以通过DMA直接将I2C RX与UART-TX连接?

据我了解,这应该是最快的解决方案,而不会阻塞UART中继MCU的CPU。但是不幸的是,我找不到任何外围设备的可比示例,因此,恐怕这种方法是出于某种原因,我不知道不是最好的,或者是无法实现的。

1 个答案:

答案 0 :(得分:3)

应该有可能,因为参考手册指出DMA控制器支持外设到外设的传输。但这并没有确切说明应如何配置,因此我只是在这里猜测一下。

使用DMA通道3请求6,即I2C1_RX请求。将其设置为执行8位 circular 外设到内存的传输,既不增加外设也不增加内存地址,外设地址是I2C接收寄存器,内存地址是UART发送数据寄存器

确保在I2C接收时UART可以更快地传输。 I2C需要9位来传输字节,而UART需要10位,因此在选择位速率时要考虑到这一点。 I2C @ 100kHz和UART @ 115200波特应该没问题。