使用下面的代码进入standby模式后,休眠电流比预期大二十倍!
void prepareToStandby(void)
{
// 停止 UART + DMA
HAL_UART_DMAStop(&huart1);
HAL_UART_DeInit(&huart1);
HAL_UART_DMAStop(&huart4);
HAL_UART_DeInit(&huart4);
HAL_NVIC_DisableIRQ(UART4_IRQn);
HAL_NVIC_DisableIRQ(USART1_IRQn);
HAL_NVIC_ClearPendingIRQ(UART4_IRQn);
HAL_NVIC_ClearPendingIRQ(USART1_IRQn);
HAL_NVIC_ClearPendingIRQ(RTC_IRQn);
}
//休眠时间:秒
void enterLowPowerMode(const uint32_t sleep_s){
if (sleep_s > 64800)
return;
/* RTC is already running, msp init will execute the minimum operation */
/* Enable RTC APB clock */
__HAL_RCC_RTCAPB_CLK_ENABLE();
__HAL_RCC_PWR_CLK_ENABLE();
/* Clear Standby flag */
prepareToStandby(); //静默外设!!必须
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SBF);
__HAL_PWR_CLEAR_FLAG(PWR_WAKEUP_ALL_FLAG);
// 休眠时长1s-18h
if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, sleep_s, RTC_WAKEUPCLOCK_CK_SPRE_16BITS, 0) != HAL_OK) {
Error_Handler();
}
HAL_PWREx_EnableUltraLowPowerMode();
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN7_HIGH_3);
if (HAL_RTCEx_SetLowPowerCalib(&hrtc, RTC_LPCAL_SET) != HAL_OK)
{
Error_Handler();
}
HAL_SuspendTick();
__DSB(); __ISB();
HAL_PWR_EnterSTANDBYMode();
// HAL_PWREx_EnterSHUTDOWNMode();
// HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
}
电流截图如下:45uA!!,但是使用同样的代码,之前有时候却可以到2uA左右,请问这是什么原因呢?休眠被降级?为什么呢?(使用freertos)

|
外设时钟没有被关闭?