cancel
Showing results for 
Search instead for 
Did you mean: 

i can't understand current consumption of STM32's stop mode.

backy baek
Associate
Posted on December 11, 2017 at 11:59

hello.

i used STM32F103 MCU, and hope to stop mode with wake-up by EXTI.

By googling, i could operating stop mode and wake-up. BUT...

i confirmed that STM32 dissipated over 40mA at stop mode, without any other hardware.

when i disabled PC6 GPIO, i saw a reducing current.

let me know what i have to check the source or hardware.

i don't know what is problem. plz help me.

void main(void)

{

  SystemInit();                                                 // Setup STM32 System

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); // power interface clock, backup interface clock

  Interface_Init();                                             // Interface Initialize

  EXTI0_Config();

  while (1)

  {

    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

  }

}

void EXTI0_IRQHandler(void)

{

  if(EXTI_GetITStatus(EXTI_Line0) != RESET)

  {

    /* do something */

    SYSCLKConfig_STOP_Run();

       

    GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_SET);

    updatePacket();

    GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_RESET);

    /* Clear the  EXTI line 0 pending bit */

    EXTI_ClearITPendingBit(EXTI_Line0);

  }

}

void Interface_Init (void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  USART_InitTypeDef USART_InitStructure;

  GPIO_InitTypeDef GPIO_InitStructure;

  ADC_InitTypeDef ADC_InitStructure;

  DMA_InitTypeDef DMA_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); 

  RCC_ADCCLKConfig(RCC_PCLK2_Div6); //clock for ADC (max 14MHz, 72/6=12MHz)

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //enable ADC clock

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

  /* Configure PC output */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//GPIO_Speed_50MHz;

  GPIO_Init(GPIOC, &GPIO_InitStructure);

  

   /* Configure UART Tx */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

 

  /* Configure UART Rx */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

 

  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

 

  USART_InitStructure.USART_BaudRate = 115200;

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  USART_InitStructure.USART_StopBits = USART_StopBits_1;

  USART_InitStructure.USART_Parity = USART_Parity_No;

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

 

  USART_Init(USART1, &USART_InitStructure);

  USART_Cmd(USART1, ENABLE);

}

3 REPLIES 3
Uwe Bonnes
Principal III
Posted on December 12, 2017 at 18:26

You must care for each GPIO. GPIO may only float when configureds as 'analog'. Otherwise provide Pull UP or down.

Posted on December 12, 2017 at 18:58

>>without any other hardware

So what's PC6 connected too? And how about PA9/PA10?

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
backy baek
Associate
Posted on December 13, 2017 at 00:19

PC6 is used as GPIO, and PA9/PA10 are USART ports.

Any other GPIO ports was set to Analog-in.

I doubt that I was wrong about code of EXTI0_IRQHandler.

How about your thought.