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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (46)

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

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

据我所知,这应该是最快的解决方案,而不会阻塞UART继电器MCU的CPU。但不幸的是,我没有找到任何外围设备的可比较的例子,所以我担心,这种方法要么是出于某种原因,我不知道不是最好的,或者只是不可实现。

提问于
用户回答回答于

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

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

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

扫码关注云+社区

领取腾讯云代金券