cancel
Showing results for 
Search instead for 
Did you mean: 

Stop mode and Standby mode consume more power in STM32F765BI

AParm
Associate

Hello,

I am using STM32F765BI MCU, i have implemented standalone code for measuring current during all three low power mode but the amount of current consumption is very high in each mode as shown below,

Sleep mode - 84mA

Stop mode - 47mA

Standby mode - 48mA

my STOPMode function is,

void StopMode_Measure(void)

{

 GPIO_InitTypeDef GPIO_InitStruct;

  

 /* Disable Ethernet Clock */

 __HAL_RCC_ETH_CLK_DISABLE();

  

 /* Configure all GPIO as analog to reduce current consumption on non used IOs */

 /* Enable GPIOs clock */

  __HAL_RCC_GPIOA_CLK_ENABLE();

  __HAL_RCC_GPIOB_CLK_ENABLE();

  __HAL_RCC_GPIOC_CLK_ENABLE();

  __HAL_RCC_GPIOD_CLK_ENABLE();

  __HAL_RCC_GPIOE_CLK_ENABLE();

  __HAL_RCC_GPIOF_CLK_ENABLE();

  __HAL_RCC_GPIOG_CLK_ENABLE();

  __HAL_RCC_GPIOH_CLK_ENABLE();

  __HAL_RCC_GPIOJ_CLK_ENABLE();

  __HAL_RCC_GPIOK_CLK_ENABLE();

 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;

 GPIO_InitStruct.Pull = GPIO_NOPULL;

 GPIO_InitStruct.Pin = GPIO_PIN_All;

 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

 HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

 HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

 HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

 HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); 

 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

 HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct); 

 HAL_GPIO_Init(GPIOK, &GPIO_InitStruct);

 /* Disable GPIOs clock */

  __HAL_RCC_GPIOA_CLK_DISABLE();

  __HAL_RCC_GPIOB_CLK_DISABLE();

  __HAL_RCC_GPIOC_CLK_DISABLE();

  __HAL_RCC_GPIOD_CLK_DISABLE();

  __HAL_RCC_GPIOE_CLK_DISABLE();

  __HAL_RCC_GPIOF_CLK_DISABLE();

  __HAL_RCC_GPIOG_CLK_DISABLE();

  __HAL_RCC_GPIOH_CLK_DISABLE();

  __HAL_RCC_GPIOJ_CLK_DISABLE();

  __HAL_RCC_GPIOK_CLK_DISABLE();

 RTCHandle.Instance = RTC;

   

 /* Configure RTC prescaler and RTC data registers as follow:

 - Hour Format = Format 24

 - Asynch Prediv = Value according to source clock

 - Synch Prediv = Value according to source clock

 - OutPut = Output Disable

 - OutPutPolarity = High Polarity

 - OutPutType = Open Drain */ 

 RTCHandle.Init.HourFormat = RTC_HOURFORMAT_24;

 RTCHandle.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;

 RTCHandle.Init.SynchPrediv = RTC_SYNCH_PREDIV;

 RTCHandle.Init.OutPut = RTC_OUTPUT_DISABLE;

 RTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;

 RTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;

  

 if(HAL_RTC_Init(&RTCHandle) != HAL_OK)

 {

  /* Initialization Error */

  Error_Handler(); 

 }

  

  /*## Configure the Wake up timer ###########################################*/

 /* RTC Wakeup Interrupt Generation:

   Wakeup Time Base = (RTC_WAKEUPCLOCK_RTCCLK_DIV /(LSI))

   Wakeup Time = Wakeup Time Base * WakeUpCounter 

         = (RTC_WAKEUPCLOCK_RTCCLK_DIV /(LSI)) * WakeUpCounter

   ==> WakeUpCounter = Wakeup Time / Wakeup Time Base

   To configure the wake up timer to 20s the WakeUpCounter is set to 0xA017:

    RTC_WAKEUPCLOCK_RTCCLK_DIV = RTCCLK_Div16 = 16 

    Wakeup Time Base = 16 /(~32.768KHz) = ~0,488 ms

    Wakeup Time = ~20s = 0,488ms * WakeUpCounter

    ==> WakeUpCounter = ~20s/0,488ms = 40983 = 0xA017 */

 /* Disable Wake-up timer */

 if(HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle) != HAL_OK)

 {

  /* Initialization Error */

  Error_Handler(); 

 }

  

 /*## Clear all related wakeup flags ########################################*/  

 /* Clear RTC Wake Up timer Flag */

 __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&RTCHandle, RTC_FLAG_WUTF);

  

 /*## Setting the Wake up time ##############################################*/

 HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, 0xA017, RTC_WAKEUPCLOCK_RTCCLK_DIV16);

 /* FLASH Deep Power Down Mode enabled */

 HAL_PWREx_EnableFlashPowerDown();

HAL_SuspendTick();

// HAL_EnableDBGStopMode();

HAL_EnableDBGStopMode();

 /* Enter Stop Mode */

 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

 /* Configures system clock after wake-up from STOP: enable HSE, PLL and select 

 PLL as system clock source (HSE and PLL are disabled in STOP mode) */

 SYSCLKConfig_STOP();

  

 /* Exit Ethernet Phy from low power mode */

 ETH_PhyExitFromPowerDownMode();

  

 /* Disable Wake-up timer */

 if(HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle) != HAL_OK)

 {

  /* Initialization Error */

  Error_Handler(); 

 }

}

My Standmode function is,

void StandbyRTCMode_Measure(void)

 RTCHandle.Instance = RTC;  

 /* Configure RTC prescaler and RTC data registers as follow:

 - Hour Format = Format 24

 - Asynch Prediv = Value according to source clock

 - Synch Prediv = Value according to source clock

 - OutPut = Output Disable

 - OutPutPolarity = High Polarity

 - OutPutType = Open Drain */ 

 RTCHandle.Init.HourFormat = RTC_HOURFORMAT_24;

 RTCHandle.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;

 RTCHandle.Init.SynchPrediv = RTC_SYNCH_PREDIV;

 RTCHandle.Init.OutPut = RTC_OUTPUT_DISABLE;

 RTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;

 RTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;

  

 if(HAL_RTC_Init(&RTCHandle) != HAL_OK)

 {

  /* Initialization Error */

  Error_Handler(); 

 }

  

 /*## Configure the Wake up timer ###########################################*/

 /* RTC Wakeup Interrupt Generation:

   Wakeup Time Base = (RTC_WAKEUPCLOCK_RTCCLK_DIV /(LSI))

   Wakeup Time = Wakeup Time Base * WakeUpCounter 

         = (RTC_WAKEUPCLOCK_RTCCLK_DIV /(LSI)) * WakeUpCounter

   ==> WakeUpCounter = Wakeup Time / Wakeup Time Base

   To configure the wake up timer to 20s the WakeUpCounter is set to 0xA017:

    RTC_WAKEUPCLOCK_RTCCLK_DIV = RTCCLK_Div16 = 16 

    Wakeup Time Base = 16 /(~32.768KHz) = ~0,488 ms

    Wakeup Time = ~20s = 0,488ms * WakeUpCounter

    ==> WakeUpCounter = ~20s/0,488ms = 40983 = 0xA017 */

 /* Disable Wake-up timer */

 if(HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle) != HAL_OK)

 {

  /* Initialization Error */

  Error_Handler(); 

 }

  

 /*## Clear all related wakeup flags ########################################*/  

 /* Clear RTC Wake Up timer Flag */

 __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&RTCHandle, RTC_FLAG_WUTF);

  

 /*## Setting the Wake up time ##############################################*/

 HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, 0xA017, RTC_WAKEUPCLOCK_RTCCLK_DIV16);

 HAL_EnableDBGStandbyMode();

 /*## Enter the Standby mode ################################################*/

 /* Request to enter STANDBY mode */

 HAL_PWR_EnterSTANDBYMode(); 

}

I have configured one GPIO (PJ13) as a user button for exit from the low power mode and configured RTC for wake up from stop and standby mode, no other peripherals or clock is configured.

I have debugged both the functions and found they were entered in respective mode also but current consumption is too high.

I have measured the current using CEN-TECH digital multi meter at VDD pin of MCU.

Please reply me as soon as possible.

Waiting for your reply.

1 REPLY 1
AParm
Associate

Waiting for reply. Please give suggestion.