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