cancel
Showing results for 
Search instead for 
Did you mean: 

LCD Driver Consuming more power in stop 2 mode

Sumukha
Associate II

The LCD Driver in stm32u083rc is consuming more power in stop 2 mode, it is taking more current at every interval (interval is of refresh rate , if refresh rate is 128Hz then the spikes come at  (1/128 = 7.8ms))

currently we are entering low power mode like this 

void lowpwrmode_EnterLowPowerMode (void)
{
// LOG_INFO_UART("Entering Stopmode2 \r \n");
HAL_CRC_MspDeInit(&hcrc); //CRC
HAL_SPI_MspDeInit(&hspi1); //SPI
HAL_CRYP_MspDeInit(&hcryp); //AES
HAL_UART_MspDeInit(&hlpuart2); //LPUART
HAL_LPTIM_MspDeInit(&hlptim3); //Buzzer
HAL_DAC_MspDeInit(&hdac1); //DAC
HAL_I2C_MspDeInit(&hi2c2); //I2C
 
//SysTick Timer
HAL_SuspendTick();
 
//CLear Wakeup Flags
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
    
HAL_PWREx_EnablePullUpPullDownConfig();
 
//Disable Debug
HAL_DBGMCU_DisableDBGStopMode();
HAL_PWREx_EnableUltraLowPowerMode();
 
//Enter Stop2 Mode
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
 
HAL_ResumeTick();
// HAL_I2C_MspInit(&hi2c2);
custom_StopGpioInit();
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET); // LDO Enable
 
// HAL_GPIO_WritePin(GPIOA, Flash_PWR_Pin, GPIO_PIN_SET); // Flash PWR
// HAL_GPIO_WritePin(GPIOB, WP_Pin, GPIO_PIN_SET); // WP Pin
 
}  
 
the below i have attached the power consumption in graph we can see the spikes clearly
 
4 REPLIES 4

Hey — that’s an interesting issue with LCD driver consuming power even in Stop-2 mode. Here are a few ideas to check:

 

1. LCD Controller Clock Supply

Ensure the LCD peripheral clock is turned off in Stop-2 mode (or properly gated). Sometimes the clock isn’t disabled and keeps drawing power.

Check if there are backup domain or display refresh features that keep the LCD active.

 

2. Display Duty/Backlight

If the LCD backlight or any LED driver is still running, that can consume power. Turn off or reduce backlight in low power mode.

Also check duty cycle or frame refresh timers — periodic refresh could keep hardware active.

 

3. Segment Multiplexing / Drain Path

Some LCDs use multiplexing that needs certain pins toggled or floats in low power; an overlap path might leak current.

Check pin states of segments/com commons — sometimes leaving them floating or wrongly driven causes leakage.

 

4. GPIO / Pads State

In Stop-2 mode, ensure all unused GPIOs or LCD pins not in use are in a defined state (analog / pull-down) to avoid leakage.

Drive necessary pins to known levels.

 

5. Power Domain Isolation / Regulator

If your MCU has multiple power domains, see if LCD domain remains powered or regulated.

Use power domain gating if supported.

 

If you tell me your MCU model (series) and your low-power config (which clocks off, backlight settings etc.), I can help you narrow it down and recommend a configuration that keeps LCD off until needed.

I am using stm32u083rc and using stop2 mode, clock for LCD is LSE (32.768 KHz) no backlight, and we need LCD to be On all the time, we cannot disable it , currently in stop2 mode the base average current with LCD enabled is 5.7uA, and with LCD Disabled the current is 2uA. so because of those spikes when LCD is enabled it is increasing the base current to 5.7uA. we are keeping LSE on during stop2 mode. we are putting unused GPIO to analog mode and driving necessary pins to known levels using pullup or pulldown during stop mode .

The major doubt is regarding the current spikes going up-to 20-25uA based on the refresh rate interval selected for LCD ( though the average current is 5-6uA only)

 

the current configuration of LCD is 

void MX_LCD_Init(void)
{

/* USER CODE BEGIN LCD_Init 0 */

/* USER CODE END LCD_Init 0 */

/* USER CODE BEGIN LCD_Init 1 */

/* USER CODE END LCD_Init 1 */
hlcd.Instance = LCD;
hlcd.Init.Prescaler = LCD_PRESCALER_16;
hlcd.Init.Divider = LCD_DIVIDER_16;
hlcd.Init.Duty = LCD_DUTY_1_4;
hlcd.Init.Bias = LCD_BIAS_1_3;
hlcd.Init.VoltageSource = LCD_VOLTAGESOURCE_INTERNAL;
hlcd.Init.Contrast = LCD_CONTRASTLEVEL_0;
hlcd.Init.DeadTime = LCD_DEADTIME_0;
hlcd.Init.PulseOnDuration = LCD_PULSEONDURATION_1;
hlcd.Init.BlinkMode = LCD_BLINKMODE_OFF;
hlcd.Init.BlinkFrequency = LCD_BLINKFREQUENCY_DIV1024;
hlcd.Init.MuxSegment = LCD_MUXSEGMENT_DISABLE;
if (HAL_LCD_Init(&hlcd) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN LCD_Init 2 */

/* USER CODE END LCD_Init 2 */

}

Screenshot 2025-09-30 101723.png

Screenshot 2025-09-30 101935.png

  

Hello @Sumukha ,

If you are using a STM32U0 device why are you posting it in MPU forum?

This thread needs to be moved to the correct forum board.

And please use </> to share your code.

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.