Forum: Mikrocontroller und Digitale Elektronik STM32 - Senden und Empfangen mit UART Interrupt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von STM32 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein grundsätzliches Problem mit dem Senden und Empfangen von 
UART-Bytes per STM32F4 Controller.


Ich nutze die Funktionen
HAL_UART_Receive
HAL_UART_Receive_IT
HAL_UART_Transmit_IT



Jede für sich alleine genommen funktioniert mit gewissen 
Einschränkungen, nur wenn ich sie kombinieren will, dann klappt das so 
überhaupt garnicht.

Beispiel:
Empfangen eines Textes mit Receive_IT klappt grundsätzlich. Es wird zwar 
kein erkennbarer Interrupt ausgelöst wenn die Anzahl gewünschter Bytes 
empfangen wird, aber prinzipiell landen die Bytes schon mal da wo sie 
hinsollen.
Hier ist also eine (untergeorndete ) Frage: Warum erhalte ich keinen 
Interrupt, wenn die Anzahl X-Bytes empfangen wurde?
Die ServiceRoutine wird tatsächlich jedesmal aufgerufen...

Größeres Problem:
Wenn ich einen Text rausschicke und eine Antwort erwarte, dann kommt im 
Antwortspeicher überhaupt nichts an.
Vorgehen ist, dass ich Receive_IT aufrufe, so dass diese genügend 
Zeichen einer Antwort aufnehmen können sollte, danach schicke ich meinen 
Befehl mit der Transmit_IT auf die Reise und nun möchte ich die Antwort 
aufnehmen.

Sie kommt aber nicht an...

Muss man bei dem Aufruf der Funktionen irgendwas beachten, oder können 
sie erst gestartet werden, nachdem bestimmte Bedingungen erfüllt sind?

Oder kann ich grundsätzlich nur dann etwas senden, wenn die 
Receive-Funktion bereits beendet ist und tatsächlich ihre X Bytes 
empfangen hat?

von Franz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
STM32 schrieb im Beitrag #4811628:
> Frage: Warum erhalte ich keinen
> Interrupt, wenn die Anzahl X-Bytes empfangen wurde?
> Die ServiceRoutine wird tatsächlich jedesmal aufgerufen...
Ich nehme an, Du verwendest das sogenannte HAL?!

Wenn ja, sollte irgendwo sowas in Deinem Code stehen (z.B. in 
stm32fxxx_it.c):
1
void USARTx_IRQHandler(void)
2
{
3
  HAL_UART_IRQHandler(&UartHandle);
4
}

Andererseits ist es m.E. keine so gute Idee auf Bytes vom UART zu 
warten.
Wenn mal eins verloren geht, kommt Deine ganze Übertragung aus dem 
Tritt.
Ich würde auf eine 'Ende'-Markierung (z.B. Enter) warten und dann die 
vorher empfangenen Daten auswerten.

von hp-freund (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Für HAL:

Beitrag "Re: STM32 Uart implementierung findet die defines nicht?!"

In der angehängten Datei ist alles Nötige das zusätzlich gebraucht wird 
um zu Senden und bei Empfang des Ende der Zeichenkette auszuwerten.

von W.S. (Gast)


Bewertung
1 lesenswert
nicht lesenswert
STM32 schrieb im Beitrag #4811628:
> ich habe ein grundsätzliches Problem mit dem Senden und Empfangen von
> UART-Bytes per STM32F4 Controller.
>
> Ich nutze die Funktionen
> HAL_...

Eben, genau DAS ist dein Fehler.
Ich habe hier schon so oft einen vernünftigen UART-Handler gepostet, daß 
es mir langsam leid ist. Also benutze mal die Forensuche danach.
Und hör auf, mit diesen HAL- und sonstigen Bibliotheken herunzufummeln. 
Das wird nämlich nix, es wurde auch bei Anderen nix.

Schreib dir deine Lowlevel-Treiber selbst und verstehe, wie sowas geht.

W.S.

von hp-freund (Gast)


Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Das wird nämlich nix, es wurde auch bei Anderen nix.

;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.