Forum: Mikrocontroller und Digitale Elektronik STM32 Uart Senden stoppen


von paule (Gast)


Lesenswert?

Hallo,

ich habe folgendes Problem, ich möchte bei einer bestimmten Bedingung 
das Senden des UART stoppen. Wie kann ich das elegant lösen.

Ich dachte daran das TXE Flag auf 0 zu setzen. Ich weiss jedoch nicht, 
ob das funktioniert und wie ich ein Flag setzen oder löschen kann.

Hat da jemand einen Tip für mich?

Gruß
paule

von Simon H. (simi)


Lesenswert?

Meinst Du, mitten in einem Byte aufhören zu senden?

Da sehe ich als einzige Möglichkeit, der UART den GPIO wegzunehmen. Die 
SM wird wohl, einmal angeworfen, bis zum Schluss durchlaufen, ich denke 
nicht, dass man die stoppen kann.


.... Warum willst Du das eigentlich?

von (prx) A. K. (prx)


Lesenswert?

Simon Huwyler schrieb:

> Meinst Du, mitten in einem Byte aufhören zu senden?
> Da sehe ich als einzige Möglichkeit, der UART den GPIO wegzunehmen.

Takt abschalten tuts garantiert auch, ebenso der selektive 
Peripherie-Reset auf diese UART.

von Ulrich P. (uprinz)


Lesenswert?

Die Frage ist so unvollständig, dass man Dir da wohl kaum helfen kann. 
Warum willst Du stoppen und vor allem, wer soll den Stop verursachen?
Soll es die Software auf dem STM oder eine Bedingung von Außerhalb?
Soll unter allen Umständen sofort gestopt werden, oder nach der 
Übertragung des aktuellen Bytes oder der laufenden Sequenz?
Dann müsste man noch wissen, wie der treober aussieht, den Du für den 
USART verwendest.

Aus der Luft gegriffene Lösungen...
Byte zu ende, dann stop:
- Abbruch-Bedingung in Interruptroutine
- \0 in nächste Position des Puffers
- Puffer-Position auf Puffer-Ende setzen

Sequenz zuende:
- Puffer gegen neue Daten blockieren

Sofortiger Abbruch:
- USART im RCC abschalten
- USART disable setzen

Abbruch von Außen:
- RTS/CTS Handshake verwenden.

Ist aber alles nur geraten, weil man Deine Randbedingungen nicht kennt.

von Simon H. (simi)


Lesenswert?

A. K. schrieb:
> Simon Huwyler schrieb:
>
>> Meinst Du, mitten in einem Byte aufhören zu senden?
>> Da sehe ich als einzige Möglichkeit, der UART den GPIO wegzunehmen.
>
> Takt abschalten tuts garantiert auch, ebenso der selektive
> Peripherie-Reset auf diese UART.

Ich habe eindeutig zuwenig Phantasie! :-)

Takt abstellen, würde aber sicher bedeuten, dass er, sobald der Takt 
wieder läuft, die Arbeit zu ende führt.

Aber eben:

Ulrich P. schrieb:
> Die Frage ist so unvollständig, dass man Dir da wohl kaum helfen kann.

Ist wohl so.

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.