Gast
#6672439
Hallo zusammen, ich habe ein kleines Problem mit meinem STM32 und dem Empfang der Daten über UART_DMA. Ich (re)starte meinen Nucleo Board, ich sende Daten via RS232 zur Gegenstelle (mit Oszi gemessen) und bekomme auch antworten (ebenfalls mit Oszi gemessen). Die Daten haben eine variable Länge, allerdings kenne ich die immer vorher und kann diese Info beim Aufruf von "HAL_UART_Receive_DMA(&huart2, bBuf, bLen)" mitgeben. --> passt. Funktioniert beliebig oft mit variabler Datenlänge. Jetzt lege ich die Gegenstelle schlafen, warte 20s und wecke sie mit einer WAKEUP/INIT Funktion auf. Gegenstelle wacht auf und initialisiert sich und signalisiert via LED "bereit". Alle Anfragen danach werden ganz normal verarbeitet und ich bekomme Antworten. Wenn ich die Gegenstelle schlafen lege, dann eine beliebige Funktion (nicht die WAKEUP/INIT) schicke, bleibt die Gegenstelle im Sleep Mode (so soll es auch sein). Wenn ich danach die Wakeup/Init schicke, wachte die Gegenstelle auf, allerdings bekomme ich die Antwort ("Init erfolgreich") der Gegenstelle nicht mit, obwohl ich sie am Oszi sehe. Mir scheint das die HAL_UART_Receive_DMA(...) irgendwie blockiert ist, da die eine normale Funktion den Empfang blockiert. Ich bin jetzt schon mit dem Debugger durch gesprungen, aber ich bekomme keinen Error oder Hänger, er spingt brav durch die Funktionen, so wie er es auch macht die Sache funktioniert, nur der Empfangsbuffer bleibt halt leider leer. Gibt es da einen Trick, wie man den UART Empfang per DMA neu starten kann? Ich würde ja HAL_UART_Receive_DMA(...) nehmen, dafür müsste ich ja die wissen welche Anfrage an die Gegenstelle ich zu erst schicke, da ich die Länge hinterlegen muss. Viele Grüße