STM32F0 wie sauber Uart senden per DMA mit Timer event

Gast #4657350
Lesenswert?
• ▲
▼
Hallo,
ich will mich an ein bestehendes Sensor System dran klemmen und habe da 
ein paar Probleme.
Der ganze UART kram läuft mit ca. 460kbit, das ist aber nicht das 
Problem!
Das original System macht sozusagen 3,5 Stoppbits, also es gibt eine 
Pause zwischen den gesendeten Bytes.

Nach kurzem nachdenken kommt man drauf das man am besten per DMA mit 
Timerevent sendet.
Hat den Vorteil das man nicht ständig im UART int steckt.
Ich muss 128 Byte pro MSG senden und dann auf IN umschalten (RS485)!

Jetzt aber mein Problem:
Ich stelle den Timer und den DMA (128Byte) ein sowie den DMA ende Int.
Dann sende ich das erste Byte und starte den Timer.
allerdings wenn ich das letzte Byte gesendet habe wird noch eins 
gesendet.
Leider kommt das immer schon raus bevor ich den DMA Ende Int bekomme und 
die Richtung umschalte.


Also, wie kann man die 128byte senden mit dem DMA über timer und am ende 
sauber die Richtung vom RS485 Bus drehen?

VG, Uli
#4657412
Lesenswert?
• ▲
▼
Uli schrieb:
> Also, wie kann man die 128byte senden mit dem DMA über timer und am ende
> sauber die Richtung vom RS485 Bus drehen?

Man sende 127 Bytes mit DMA. Im DMA Interrupt macht man den UART TXC (TX 
Complete) Interrupt an und sendet das letzte Byte. Im TXC Handler wird 
dann der RS485 Bus umgeschaltet.

Es gibt µC die RS485 Umschaltung in Hardware können, z.B. EFM32 (USART) 
und LPC17xx (UART1). Dort sind solche Kopfstände nicht nötig.
Gast #4657436
Lesenswert?
• ▲
▼
Also doch umständlich, ich hatte es schon befürchtet.
Aber immer noch besser als alles im TX Int zu machen.

Hardware nützt nicht wirklich was, da ich ja diese blöde Pause zwischen 
den Bytes rein bauen muss. Der Entwickler von dem System hat sich wohl 
was dabei gedacht, nur was?
Ich hatte es mal mit 2 Stoppbits als Pause probiert-> ging nicht.
Es müssen wirklich 3,5 sein, ach da kann man nun lange über ein fremdes 
System nachdenken. Ist vielleicht eine Art Kopierschutz vom Hersteller.

VG, Uli

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.