2025-12-02 2:04 AM
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,