Могу ли я с STM32 использовать DMA UART только для получения? - PullRequest
0 голосов
/ 19 октября 2018

Я настроил некоторые свои UART на STM с DMA, и иногда я траншировал данные UART с помощью функций DMA HALs (HAL_UART_Transmit_DMA und HAL_UART_Receive_DMA), а иногда с помощью функций с таймером HALs (HAL_UART_Transmit und HAL_UART_Receive)).

Пока все хорошо, теперь я спросил себя, могу ли я передать данные с отложенными функциями и получить ответ с помощью функций DMA (поскольку мои передаваемые данные очень короткие, но ответ довольнобольшой, и я мог бы сделать некоторые другие вычисления, пока у меня, вероятно, не будет ответа.Или это просто стилистически плохо, или, может быть, просто отлично?

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

1 Ответ

0 голосов
/ 20 октября 2018

На STM32L0xx просто включите в регистрах:

  • CR3: DMAR, а не DMAT
  • CR1: TE, RE и UE

настроить только один канал DMA для USART RX, затем для приема вы будете использовать DMA и для передачи просто записать данные в регистр TDR.(перед передачей также проверьте TXE бит (регистр передачи данных пуст) в регистре ISR).

...