我可以使用STM32将UART的DMA仅用于接收吗?

时间:2018-10-19 09:36:39

标签: stm32 uart dma

我在STM上使用DMA设置了一些UART,有时我使用HAL DMA功能(HAL_UART_Transmit_DMAHAL_UART_Receive_DMA)收发UART数据,有时使用HAL定时功能({{1 }}和HAL_UART_Transmit)。

到目前为止很好,现在我问自己,我是否可以使用延迟的功能发送数据并使用DMA功能接收响应(因为我发送的数据太短了,但是答案很大,我可以其他一些计算,直到可能得到答案为止。

我的问题基本上是,是否有任何理由不将UART非DMA tx与DMA rx混合?还是在风格上不好,还是很好?

HAL_UART_Receive

1 个答案:

答案 0 :(得分:1)

在STM32L0xx上,只需在寄存器中启用:

  • 1 2 3 4 5 2 1 1 1 1 CR3而非DMAR
  • DMATCR1TERE

仅为USART RX配置一个DMA通道,然后在接收时将使用DMA并仅向UE寄存器发送写入数据。 (在TX之前,还要检查TDR寄存器中的TXE位(发送数据寄存器为空)。