cancel
Showing results for 
Search instead for 
Did you mean: 

STM32G031K8 consumes 100uA in Stop1 mode

levantg
Visitor

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,

0 REPLIES 0