我在不同的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 波特应该没问题。