Ich verwende ein STM32L4R5-Board und versuche, den DMA auf der UART2-Leitung zu konfigurieren. Ich habe es geschafft, die RX-Leitung so zu betreiben, wie ich es möchte, aber wenn ich der „Übertragung mit DMA“ in Abschnitt 44.5.19 des „RM0432-Referenzhandbuchs“ folge, wird nur ein Byte übertragen und sonst nichts. Dieses Byte wird nur gesendet, wenn ich explizit ein Byte in das TDR-Register schreibe. Danach kann ich sehen, dass das TC-Flag gelöscht ist und das erste Byte meines DMA-Registers betroffen ist. Wie bringe ich den DMA dazu, die Daten kontinuierlich zur Übertragung an den TDR zu senden?
Hinweis: Dieses Problem scheint einer unbeantworteten Frage hier ähnlich zu sein
Die im Datenblatt erwähnten Schritte sind wie folgt:
Mein Code ist hier:
//filling in dummy info into my DMA TX buffer
memset((void*)DMA_USB_TXbuf, 0x55, 16);
//ensuring my UART is configured for DMA Transfer
huart2.Instance->CR3 |= USART_CR3_DMAT;
//steps 1-4 taken care of within this funciton
HAL_DMA_Start_IT(&hdma_usart2_tx, (uint32_t)&huart2.Instance->TDR, (uint32_t)&DMA_USB_TXbuf[0], DMA_USB_TX_SIZE);
//step 5 (just ensuring that we have the flags we want after the previous function)
__HAL_DMA_DISABLE(&hdma_usart2_tx);
__HAL_DMA_ENABLE_IT(&hdma_usart2_tx, DMA_IT_HT);
__HAL_DMA_ENABLE_IT(&hdma_usart2_tx, DMA_IT_TC);
//step 6
__HAL_UART_CLEAR_FLAG(&huart2, UART_CLEAR_TCF);
//step 7
__HAL_DMA_ENABLE(&hdma_usart2_tx);
//I shouldn't need to do this, but this seems to be the only way
// I get even 1 trasmission from DMA register
WRITE_REG(huart2.Instance->TDR, 0x55);
Es gab zwei Gründe, warum dies nicht so funktionierte, wie es sollte.
Danke Codo
Kodo
HAL_USART_Transmit_DMA()
?Ahorn
Chris Stratton
Beau R