Intento configurar mi STM32 para obtener el menor consumo de energía. Para eso estoy usando la función deepsleep () de mbed librairies. Antes de eso deshabilito GPIO con esta función
void SystemPower_Config(void)
{
/* Enable Power Control clock */
__HAL_RCC_PWR_CLK_ENABLE();
/* Enable Ultra low power mode */
HAL_PWREx_EnableUltraLowPower();
//pc.printf("1\r\n");
/* Enable the fast wake up from Ultra low power mode */
HAL_PWREx_EnableFastWakeUp();
GPIO_InitTypeDef GPIO_InitStructure = {0};
GPIO_InitStructure.Pin = GPIO_PIN_All;
GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
GPIO_InitStructure.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
HAL_GPIO_Init(GPIOH, &GPIO_InitStructure);
HAL_GPIO_Init(GPIOE, &GPIO_InitStructure);
}
Mi aspecto principal es así
int main()
{
Board_Init();
while(1)
{
SystemPower_Config();
wait(0.1);
deepsleep();
}
}
Para generar interrupciones, utilizo alarmas RTC para salir del modo deepSleep. Esta parte funciona bien, pero el problema es que la primera vez (durante el primer sueño profundo) mi consumo es igual a 1uA. Después de eso mi consumo es de alrededor de 2.5uA en cada sueño profundo. Así que creo que la función deepSleep cambia algo la primera vez en los registradores o algo así. Tienes alguna idea ?
Muchas gracias por tu ayuda angain.
Simon NOWAK