STM32 UART DMA TX

OP #5860460
Lesenswert?
• ▲
▼
Hi,

Ich habe bereits einen RX DMA UART Treiber implementiert, wo ich einen 
Ringbuffer verwende und dann mit UART idle Interrupt den start und stop 
Pointer der Daten neu setzte. Das funktioniert hervorragend und ich 
möchte nun etwas ähnliches für den TX DMA UART machen, jedoch sehe ich 
hier nicht wirklich, wie man das anstellen soll.

In den HAL Libraries (Das wird hier nicht gerne gehört und ich kann es 
gut nachvollziehen, da die sau langsam sind) gibt es ja die Funktion 
HAL_UART_Transmit_DMA(), welche die Daten schon zuverlässig über den DMA 
überträgt. Muss ich, damit ich den TX sauber handeln kann, die Daten in 
einen eigenen Ringbuffer schreiben und dann auf den DMA_TX_DONE 
Interrupt warten und dann die neuen Daten wieder schreiben oder wie 
würdet ihr das machen?
OP #5860468
Lesenswert?
• ▲
▼
Andreas Müller schrieb:
>> Muss ich, damit ich den TX sauber handeln kann, die Daten in
>> einen eigenen Ringbuffer schreiben und dann auf den DMA_TX_DONE
>> Interrupt warten und dann die neuen Daten wieder schreiben
>
> Wenn Du das so machst, brauchst Du keinen Ringbuffer.

Ich würde die Daten zum Senden in einen Ringbuffer schieben, dann nach 
einem TX Done Interrupt die neuen Daten mit HAL_UART_Transmit_DMA() 
schicken. Wie würdest du es machen?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.