Я экспериментирую с режимом ожидания на STM32F4O7VGT6. Я знаю, как перевести MCU в режим ожидания (или думаю, что знаю). Я делаю это с помощью этой функции инициализации:
void MX_RTC_Init(void) {
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef sDate = {0};
/** Initialize RTC Only */ hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv =127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_WAKEUP;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK) {
Error_Handler();
}
/** Initialize RTC and set the Time and Date */
sTime.Hours = 0x13;
sTime.Minutes = 0x20;
sTime.Seconds = 0x0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
sDate.WeekDay = RTC_WEEKDAY_THURSDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 0x30;
sDate.Year = 0x20;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
}
Эта функция инициализации позволяет ослабить MCU из режима ожидания с помощью контакта активации (PA0) и таймера (в настоящее время период составляет ~ 20se c). Следующая функция вызывается, когда я хочу перевести MCU в режим ожидания:
void Enter_StandbyMode(void)
{
__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc, RTC_FLAG_WUTF);
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 40960, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
HAL_PWR_EnterSTANDBYMode();
}
Снова это работает, как я и ожидал (я использовал диод, чтобы указать, когда MCU выходит из режима ожидания по таймеру), но мой вопрос следующий :
Почему у меня все еще есть напряжение на контактах, когда MCU находится в режиме ожидания? И когда я использую мультиметр для измерения тока, я получаю 10-20 мА потребляемой мощности.