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?
Bert S. 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.
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?
Das hatte doch letztens hier schon jemand so gebaut: Beitrag "Re: STM32: Sendepuffer für USART" Nachdm er fertig war hat er freundlicherweise den Code veröffentlicht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.