This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Config Low power sleep mode in STM32

Dear Friends,

I am very interested to achieve low power consumption in STM32L152VD. So far, I followed the STM32L-Discovery board program written in Keil. My board which has only MCU soldered on it consumes 330 uA in low power sleep mode. I want to achieve consumption of few uA. I put the program code in below:

RCC_Configuration();
PWR_VoltageScalingConfig(PWR_VoltageScaling_Range1);
 /* Wait Until the Voltage Regulator is ready */
 while (PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET) ;
  /* Init I/O ports */
  Init_GPIOs();
GPIO_LowPower_Config();
PWR_FastWakeUpCmd(DISABLE);
Config_RCC(&SavRCC);
SysTick->CTRL = 0;
SetHSICLKToMSI(RCC_MSIRange_0,DIV2,NoRTC) ;
disableInterrupts();
EnterLPSLEEPModeRAM();
enableInterrupts();
PWR_EnterSleepMode(PWR_Regulator_LowPower,PWR_SLEEPEntry_WFI);

void GPIO_LowPower_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  /* Configure all GPIO port pins in Analog Input mode (floating input trigger OFF) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

  GPIOA->MODER   = 0xFFFFFFFF;
  GPIOB->MODER   = 0xFFFFFFFF;
  GPIOC->MODER   = 0xFFFFFFFF;
        GPIOD->MODER   = 0xFFFFFFFF;
  GPIOE->MODER   = 0xFFFFFFFF;
  GPIOH->MODER   = 0xFFFFFFFF;

        GPIOA->PUPDR=0x0;
  GPIOB->PUPDR=0x0;
  GPIOC->PUPDR=0x0;
  GPIOD->PUPDR=0x0;
  GPIOE->PUPDR=0x0;
  GPIOH->PUPDR=0x0;

  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_Init(GPIOE, &GPIO_InitStructure);

}

void Config_RCC(RCC_TypeDef *sav_RCC)
{
  /* To save the RCC configuration registers */
  sav_RCC->AHBENR   = RCC->AHBENR;
  sav_RCC->APB1ENR  = RCC->APB1ENR;
  sav_RCC->APB2ENR  = RCC->APB2ENR;
  sav_RCC->AHBLPENR   = RCC->AHBLPENR;
  sav_RCC->APB1LPENR  = RCC->APB1LPENR;
  sav_RCC->APB2LPENR  = RCC->APB2LPENR;


/* And set low power configuration */ RCC->AHBENR = 0x0;//0x05; // Ports A and C enable RCC->AHBLPENR =0x0;// 0x05; RCC->APB1ENR = RCC_APB1ENR_PWREN; // PWR management enable RCC->APB2ENR = 0;
}

RAMFUNC void EnterLPSLEEPModeRAM(void)
{
  uint32_t tmpreg = 0;

  RAM_FLASH_RUNPowerDownCmd(ENABLE);
  RAM_PWR_LowPowerRunModeCmd(ENABLE);

  /* The application Run with delay */
 // GPIO_LOW(CTN_GPIO_PORT,CTN_CNTEN_GPIO_PIN);

  /* Select the regulator state in Sleep mode ---------------------------------*/
  tmpreg = PWR->CR;

  /* Clear PDDS and LPDSR bits */
  tmpreg &= CR_DS_MASK;

  /* Set LPDSR bit according to PWR_Regulator value */
  tmpreg |= PWR_Regulator_LowPower;

  /* Store the new value */
  PWR->CR = tmpreg;

   /* Clear SLEEPDEEP bit of Cortex System Control Register */
  SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);

    /* Request Wait For Event */
   __WFE(); /* __ASM ("wfe"); */                  /* __TEST   KEIL */

  RAM_FLASH_RUNPowerDownCmd(DISABLE);
  RAM_PWR_LowPowerRunModeCmd(DISABLE);
}


where do you think 300uA is being consumed?