Hallo zusammen!
Ich habe hier einen STM32G0 auf einer eigenen Platine.
Der MCU kommuniziert mit einem LTE Modem via AT Kommandos auf UART2.
Wenn ich den MCU in den Sleep schicke:
1 | HAL_PWREx_EnableFlashPowerDown(PWR_FLASHPD_LPSLEEP);
|
2 | HAL_SuspendTick();
|
3 | HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFE);
|
Wacht mir der MCU sofort wieder auf. Wenn ich vorher den UART noch
de-Initialisiere mit:
1 | HAL_UART_DeInit(&huart2);
|
funktioniert der Sleep-Mode wie gewünscht und ich wach sogar wieder auf.
Leider funktioniert danach der UART nicht mehr. Ich habe verschiedene
Methoden probiert, den UART wieder zu starten, aber anscheinend mache
ich es immer falsch, egal welche der beiden UART Init Varianten ich
verwende.
1 |
|
2 | MX_DMA_Init();
|
3 | MX_USART2_UART_Init();
|
4 | HAL_UART_Init(&huart2);
|
5 | HAL_UART_Receive_DMA(&huart2, &rxByte, 1);
|
Der UART RX Cplt Callback wird nach der Re-Init nicht mehr aufgerufen,
wenn Daten ankommen. Habe ich mit dem Logic-Analyzer und einem
getoggelten Pin auch "wasserdicht" geprüft. Es kommen nach dem Sleep
auch wirklich Daten am RX Pin des STM32 an, also muss es am MCU liegen.
Hat jemand eine Idee? Woran könnte es noch liegen?
Danke!