Skip to main content
backy baek
Associate
December 11, 2017
Question

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

  • December 11, 2017
  • 3 replies
  • 693 views
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);

}

    This topic has been closed for replies.

    3 replies

    Uwe Bonnes
    Chief
    December 12, 2017
    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.

    Tesla DeLorean
    Guru
    December 12, 2017
    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 VenmoUp vote any posts that you find helpful, it shows what's working..
    backy baek
    Associate
    December 12, 2017
    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.