STM32F4 DMA UART RX

Gast #4353361
Lesenswert?

Hallo,

ich sende einem STM32F4 mittels UART Telegramme.
Die Empfangenen Daten werden mittels DMA in ein Array abgelegt.

Der DMA ist wie folgt konfiguriert:
Mode: Circular
Data Width Byte/Byte
kein FIFO
1
char uart_rx[16];
2
HAL_UART_Receive_DMA(&huart1, (uint8_t*)&uart_rx[0], 16);

Wenn 16 Zeichen empfangen wurden wird wieder uart_rx[0] überschrieben.
soweit so gut!


Die vom STM32 zu empfangeneden Daten haben am ende ein CR oder LF.
Ist es möglich den "DMA pointer" bei erhalt eines CR oder LF auf 
uart_rx[0] zurückzusetzen?

irgendwie so:?
1
uint8_t i;
2
for (i=0; i<16; i++){
3
   if (uart_rx[i] == '\r'){
4
      DMA pointer = &uart_rx[0];
5
   }
6

7
}
Gast #4353409
Lesenswert?

>Ist es möglich den "DMA pointer" bei erhalt eines CR oder LF auf
>uart_rx[0] zurückzusetzen?

Das ist unsinnig. Wenn Du sowieso eine Schleife über den Buffer laufen 
lässt, kannst Du auch gleich den Inhalt wegkopieren/verarbeiten.
Und auf DMA könntest Du gleich ganz verzichten.
#4353446
Lesenswert?

Es kommt auf den genauen Einsatz an, aber ich denke nicht, dass der DMA 
des STM32F4 dafür Sinnvoll ist. Hier hilft nur ein Datentransfer mittels 
Software.

Schau dir mal die PIC32 an. Hier hat der DMA einen "DMA Pattern Data 
Register", der den DMA-Transfer stoppt, sobald ein spezielles Byte 
transferiert wurde.

Mehr infos hier:
http://ww1.microchip.com/downloads/en/DeviceDoc/60001117H.pdf
auf Seite 31

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren