Con mi STM32 estoy intentando configurar un modo de suspensión profunda y uso RTC para generar interrupciones (en realidad cada 30 segundos).
Cuando se inicia mi STM, este configura el RTC y entra directamente en modo de parada. Después de 30 segundos, la placa se está despertando y usa Serial para configurar el módulo de Radio LoRa RN2483 con la comunicación Serial y también usa I2C para leer y escribir algunos datos. Pero para la configuración del RN2483, tenemos que esperar la respuesta (tarda unos 3 segundos).
Después de eso, el STM entra de nuevo en modo de suspensión profunda. Esto es un bucle. Si este período entre dos de Deepsleep toma demasiado tiempo (debido a la espera o la impresión, por ejemplo), el próximo DeepSleep estará mal configurado y el STM nunca volverá a activarse y el consumo de energía es alto.
¿Alguien tiene alguna idea?
¿Quizás necesito revisar algunos registros de sueño profundo o algo así?
EDITAR: Esta es una foto de mi máquina de estado.
Para la configuración de DeepSleep, este es mi script a continuación
void STM32_DeepSleep(void){
//Clear bits
EXTI->PR &= 0xFF840000;
//Enter in stopmode
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON | PWR_CR_CWUF | PWR_CR_ULP | PWR_CR_FWU , PWR_STOPENTRY_WFI);
}
Después de algunas investigaciones, el problema proviene de la función __WFI (). Debido a un largo tiempo antes, el __WFI () se congela. Tal vez un perro guardián dentro del STM32 haga que el script se congele?