Embedded 待机模式下的Stm32功耗过高
我正在STM32F4O7VGT6上试验待机模式。我知道如何将MCU置于待机模式(或者我想我知道)。我用这个init函数来实现这一点:Embedded 待机模式下的Stm32功耗过高,embedded,stm32,sleep,standby,Embedded,Stm32,Sleep,Standby,我正在STM32F4O7VGT6上试验待机模式。我知道如何将MCU置于待机模式(或者我想我知道)。我用这个init函数来实现这一点: void MX_RTC_Init(void) { RTC_TimeTypeDef sTime = {0}; RTC_DateTypeDef sDate = {0}; /** Initialize RTC Only */ hrtc.Instance = RTC; hrtc.Init.HourFormat = RT
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);
}
此初始化功能允许使用唤醒引脚(PA0)和定时器(当前周期约为20秒)将MCU从待机模式唤醒。当我想将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-20mA的功耗 我认为这个问题应该转移到。已经交叉发布了我听了你的建议你的处理器处于待机状态,但你的板上还有什么吸引电流?例如,如果有一个或两个LED亮起,20mA就差不多了。当它不处于待机状态时,它会画什么?管脚上的电压并不表示待机-这取决于您所指的管脚的时间以及它们连接到什么。显然,从您的同一个问题开始,该板上还有其他消耗电源的组件-USB网桥和GNSS模块,它们将对您的电源预算做出重大贡献-这不是软件问题。