Stm32 Энергопотребление в режиме ожидания слишком велико - PullRequest
0 голосов
/ 12 февраля 2020

Я экспериментирую с режимом ожидания на 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 мА потребляемой мощности.

...