Me gustaría poner STM32F030K6T6 en modo STOP (modo de bajo consumo), en el que debería haber un consumo de corriente de unos 5 A.
Pero haga lo que haga el consumo de corriente ronda los 450 A en modo de parada.
Básicamente no hay nada más en la placa de circuito impreso, es lo más simple posible:
La placa sin MCU consume 7 A, que es la corriente de reposo del LDO. Así que al final yo esperaría obtener 12 A (7 + 5 A).
Cuando coloco allí la MCU el consumo es de unos 2-3 mA en modo normal y 450 A en modo parada.
Todos los pines están configurados como entrada analógica sin pull-ups, que es la configuración recomendada. Todos los periféricos están deshabilitados (como ADC, IWDG, I2C, SPI, temporizador, etc.). Sólo el RTC está habilitado.
Lo he probado con todos los pines puestos en salida, tampoco ha servido de nada.
Este es el código:
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_RTC_Init();
while (1) {
goto_stop();
HAL_Delay(3000); // 3 seconds of full power
}
}
void goto_stop(void) {
RTC_DateTypeDef sDate;
sDate.Date=1;
sDate.Month=RTC_MONTH_JANUARY;
sDate.Year=22;
sDate.WeekDay=RTC_WEEKDAY_MONDAY;
// HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD);
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
{
/* Initialization Error */
Error_Handler();
}
RTC_TimeTypeDef sTime;
sTime.Seconds=0;
sTime.Minutes=0;
sTime.Hours=0;
// HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD);
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
{
/* Initialization Error */
Error_Handler();
}
HAL_NVIC_EnableIRQ(RTC_IRQn);
RTC_AlarmTypeDef sAlarm;
sAlarm.Alarm=RTC_ALARM_A;
sAlarm.AlarmTime.Seconds=20;
sAlarm.AlarmTime.Minutes=0;
sAlarm.AlarmTime.Hours=0;
// sAlarm.AlarmMask=RTC_ALARMMASK_SECONDS | RTC_ALARMMASK_MINUTES | RTC_ALARMMASK_HOURS;
sAlarm.AlarmMask=RTC_ALARMMASK_HOURS | RTC_ALARMMASK_DATEWEEKDAY;
// HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD);
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK)
{
/* Initialization Error */
Error_Handler();
}
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
__HAL_RCC_GPIOA_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOD_CLK_DISABLE();
__HAL_RCC_GPIOF_CLK_DISABLE();
HAL_SuspendTick();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
SystemClock_Config();
HAL_ResumeTick();
}
¿Qué hago mal?