Skip to main content
KV_it
Visitor II
June 13, 2019
Question

IDD measurement in STM32L4R9AI

  • June 13, 2019
  • 1 reply
  • 654 views

I am trying to measure the IDD on the STM32L4R9AI-EVAL board by connecting a hand-held meter to the jumper JP4 in different low power modes. I am seeing a current of about 220 uA in all of the three stop modes (0, 1 and 2). This seems to be higher than the advertised value. This is the code I am running to put the CPU in low power mode.

Can you assist what could be wrong?

int main ( void )
{
 OS_ERR err; 
 
 HAL_Init();
 // Initialize CPU clock
 BSP_SystemClkCfg();
 
 /* -2- Configure EXTI13 (connected to PC.13 pin) in interrupt mode */
 // EXTI15_10_IRQHandler_Config();
 
 while(1)
 {
 HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
 }
}
 
 
void BSP_SystemClkCfg (void)
{
 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 
 /* Enable voltage range 1 boost mode for frequency above 80 Mhz */
 __HAL_RCC_PWR_CLK_ENABLE();
 HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
 __HAL_RCC_PWR_CLK_DISABLE();
 
 /* Enable MSI Oscillator and activate PLL with MSI as source */
 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
 RCC_OscInitStruct.MSIState = RCC_MSI_ON;
 RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
 
 // Following settings generate a system and core clock of 24 MHz
 RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_7; /*!< MSI = 8 MHz. Do not modify this value used as SAI Source, MMC */
 RCC_OscInitStruct.PLL.PLLM = 1;
 RCC_OscInitStruct.PLL.PLLN = 12;
 RCC_OscInitStruct.PLL.PLLP = 7;
 RCC_OscInitStruct.PLL.PLLQ = 4;
 RCC_OscInitStruct.PLL.PLLR = 4;
 
 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 {
 /* Initialization Error */
 while(1);
 }
 
 /* To avoid overshoot due to maximum frequency, select PLL as system clock source */
 /* with prescaler dividers 2 as first step */
 RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2;
 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
 {
 /* Initialization Error */
 while(1);
 }
 
 /* Pprescaler dividers at 1 as second step */
 RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
 {
 /* Initialization Error */
 while(1);
 }
}

This topic has been closed for replies.

1 reply

Mohamed Aymen HZAMI
ST Employee
June 14, 2019

Hello,

You must put all GPIOs in the analog state.

Best Regards,

Mohamed Aymen.