使用STM32时,我能否仅在接收时使用UART的DMA?

使用STM32时,我能否仅在接收时使用UART的DMA?,stm32,uart,dma,Stm32,Uart,Dma,我使用DMA在STM上设置了一些UART,有时我使用HALs DMA功能HAL_UART_发送DMA和HAL_UART_接收DMA发送UART数据,有时使用HALs定时发送功能HAL_UART_发送和HAL_UART_接收 到目前为止还不错,现在我问自己,我是否可以用延迟函数传输数据,并用DMA函数接收响应,因为我传输的数据很短,但答案相当大,我可以做一些其他计算,直到我可能得到答案为止 我的问题基本上是,如果有任何理由不将UART非DMA tx'es与DMA rx'es混合使用?或者只是风格不

我使用DMA在STM上设置了一些UART,有时我使用HALs DMA功能HAL_UART_发送DMA和HAL_UART_接收DMA发送UART数据,有时使用HALs定时发送功能HAL_UART_发送和HAL_UART_接收

到目前为止还不错,现在我问自己,我是否可以用延迟函数传输数据,并用DMA函数接收响应,因为我传输的数据很短,但答案相当大,我可以做一些其他计算,直到我可能得到答案为止

我的问题基本上是,如果有任何理由不将UART非DMA tx'es与DMA rx'es混合使用?或者只是风格不好,或者只是好

HAL_UART_Transmit(&huart5, com->cmd, com->cmdSize, timeout);
HAL_UART_Receive_DMA(&huart5, rfidBuffer, com->responseSize);

//some other stuff

while(!/*check if flag in HAL_UART_RxCpltCallback was set*/);
//process received data

在STM32L0xx上,仅在寄存器中启用:

CR3:DMAR而非DMAT CR1:TE、RE和UE
仅为USART RX配置一个DMA通道,然后用于接收,您将使用DMA,用于发送,只需将数据写入TDR寄存器。在发送前,还应检查ISR寄存器中的TXE位发送数据寄存器是否为空。

可以,将接收机配置为DMA和TX时不存在问题。另外,这取决于你有什么样的MCU,因为有完全不同的外设,特别是USART,那么我们可以提供更多信息。我使用的是STM32L071,我使用的是USART5。对我来说,我仍在努力理解回应的时机。这可能在很大程度上取决于沟通伙伴,但有时我似乎得到了回应,有时我只是错过了。我只是一个接一个地呼叫HAL tx rx。HAL例程是否可以在rx到来之前变慢以调用?或者我也可以在发送之前调用接收DMA,这样在应答到来之前它就被设置好了?已经感谢大家对一般性问题的批准:我不确定HAL是否可行,但总体而言,与STM中的外设配置为直接寄存器访问非常简单相比,HAL的开销很大。@PaulWürtz是的,在传输之前启动接收DMA似乎是个好主意