Forum: Mikrocontroller und Digitale Elektronik STM32F4 DMA UART RX


von Anfänger (Gast)


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
}

von Kleinschreibung (Gast)


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.

von Little B. (lil-b)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.