cancel
Showing results for 
Search instead for 
Did you mean: 

STM32G031K8 consumes 100uA in Stop1 mode

levantg
Associate II

Hi,

I am currently working on the firmware of a PCB with an STM32G031K8T6 as the MCU, supplied by a 1.8V voltage.

When I enter Stop 1 mode, the consumption of the MCU drops to 100uA, instead of the 7uA stated in the datasheet.

The app_stop function is as follows :

void app_stop(void)
{
    timer_uninit();
    i2c_slave_uninit();
    i2c_master_uninit();
    gpio_stop_mode();
    HAL_SuspendTick();
    SystemClock_Config_StopMode();
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}

void gpio_stop_mode(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    GPIO_InitStruct.Pin = GPIO_PIN_All;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;

    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_All;
    GPIO_InitStruct.Pin &= ~(GPIO_WAKEUP_PIN);
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    __HAL_RCC_GPIOB_CLK_DISABLE();
    __HAL_RCC_GPIOC_CLK_DISABLE();
}

uint8_t timer_uninit(void)
{
    timer_off();
    return HAL_TIM_Base_DeInit(&timer_handler);
}

uint8_t timer_off(void)
{
    if(timer_handler.Instance != 0)
    {
        int irq_status = (timer_handler.Instance->DIER & TIM_IT_UPDATE) ? 1 : 0;
        HAL_TIM_Base_Stop_IT(&timer_handler);
        return irq_status;
    }
    return 0;
}

uint8_t i2c_slave_uninit(void)
{
    return HAL_I2C_DeInit(&i2c_slave_handler);
}

uint8_t i2c_master_uninit(void)
{
    return HAL_I2C_DeInit(&i2c_master_handler);
}

void SystemClock_Config_StopMode(void)
{
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    //RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

    /** Initializes the RCC Oscillators according to the specified parameters
    * in the RCC_OscInitTypeDef structure.
    */
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
    RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_OFF;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_NONE;
    HAL_RCC_OscConfig(&RCC_OscInitStruct);
    /** Initializes the CPU, AHB and APB buses clocks
    */
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                  | RCC_CLOCKTYPE_PCLK1;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_LSI;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

    /** Configure the main internal regulator output voltage
    */
    HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE2);
}

 I checked all the IO levels, non of them are drawing current through a pull resistor.The SWD probe is removed.

Could you please tell me what I am missing ?

 

Best regards,

19 REPLIES 19
Gyessine
ST Employee

hello @levantg 
For now, I suspect that the issue is related to the PCB design. I tested the stop mode with an STM32G031K8 Nucleo board, and it provided consumption values that align with the datasheet.
Can you double-check your hardware?
I attached the project if you want to test it on your PCB.

Hope that helps!
Gyessine

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

Hi @Gyessine ,

Thank you for your answer. I do not see the project in attachement of your message, could you please re-attach it ?

 

Best regards,

Gyessine
ST Employee

hello @levantg 

Sorry for this inconvenience.
Here it is
Gyessine

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

Imen.D
ST Employee

Hello @levantg ,

Ensure no external circuitry is causing leakage or additional current consumption.

When your question is answered, please close this topic by clicking "Accept as Solution".
Thanks
Imen

Hi Gyessine,

The virus scan is continuously in progress on your file, which prevents me to download it. Is there another way you can send it to me ?

 

Best regards

Hello @levantg ,

Unfortunately this is an issue that has occurred the last two days and the team is working on it. 

See this thread: Attachments stuck on "virus scan in progress..."

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.
Gyessine
ST Employee

hello @levantg 
First, sorry about the virus scan in progress issue. We are aware of it, and I assure you that we are actively working on resolving it.

As an alternative solution, could you please create another project that includes only the stop mode function without any other peripherals? I noticed that you are using timers and I2C, this will help ensure that we are testing your hardware accurately.

I ran this test with our Nucleo product and observed a consumption of less than 10 µs. You can use the function explained in this wiki for reference.

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  HAL_Delay(2000);
	  HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
  }
  /* USER CODE END 3 */

Hope that helps
Gyessine

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

MM..1
Chief III

SWD probe removing is irelevant if you leave design powered after flash (with activation debug in low power mode).

For current measure always remove complete power and do clean start.

Shirley.Ye
ST Employee

how about the other low power modes like the standby?

you can get the example code of standby and stop in STM32CubeG0/Projects/NUCLEO-G031K8/Examples_LL/PWR at master · STMicroelectronics/STM32CubeG0 · GitHub

if the standby mode also not align with the datasheet, there maybe the PCB issue