STM32 UART DMA TX

#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?
#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

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