Skip to main content
Leo Leo
Associate II
December 8, 2016
Solved

BUTTON MODE EXTI

  • December 8, 2016
  • 5 replies
  • 2092 views
Posted on December 08, 2016 at 09:42

Hi,

I'm trying to wake up my device from the sleep mode and i'm asking this question : 

What's the difference between BUTTON MODE EXTI and BUTTON MODE GPIO ? 

Thank you ! 

Have a nice day ! 
    This topic has been closed for replies.
    Best answer by Walid FTITI_O
    Posted on December 08, 2016 at 12:50

    Hi

    Michel.Leo

    ,

    EXTI mode and GPIO mode are a software designationused in the driver to configure the GPIO pin in possible available mode :

    BUTTON MODE GPIO : used to configure the IO in output mode (PP or OD) or in alternate function AF (PP or OD)

    BUTTON MODE EXTI: used to configure the IO in interruptionsensitive mode ( in driver SYSCFG and EXTI register are configured )

    IF this response is helpful , pushh correct buttom.

    -Walid F-

    5 replies

    Nesrine M_O
    Associate
    December 8, 2016
    Posted on December 08, 2016 at 12:17

    Hi

    Michel.Leo

    ‌,

    • BUTTON_MODE_GPIO: Button will be used as simple IO

    • BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt generation capability

    -Nesrine-

    Ifmy suggestanswers your question, please mark it as correct.

    Leo Leo
    Leo LeoAuthor
    Associate II
    December 8, 2016
    Posted on December 08, 2016 at 13:34

    Thank you ! 

    Walid FTITI_O
    Walid FTITI_OBest answer
    Visitor II
    December 8, 2016
    Posted on December 08, 2016 at 12:50

    Hi

    Michel.Leo

    ,

    EXTI mode and GPIO mode are a software designationused in the driver to configure the GPIO pin in possible available mode :

    BUTTON MODE GPIO : used to configure the IO in output mode (PP or OD) or in alternate function AF (PP or OD)

    BUTTON MODE EXTI: used to configure the IO in interruptionsensitive mode ( in driver SYSCFG and EXTI register are configured )

    IF this response is helpful , pushh correct buttom.

    -Walid F-

    Leo Leo
    Leo LeoAuthor
    Associate II
    December 8, 2016
    Posted on December 08, 2016 at 13:55

    If I understand, when i push the button in the MODE EXTI, I generate an interruption.

    So for exemple in the below code, normally if I'm in the sleep mode and I press on the user button, i should wake up the device from the sleep. But it doesn't work ... I do the following steps :

    - I press the reset Button, - I press the user button to enter in the sleep mode (as it programmed in the main) - The LED4 is blinking. - I press the user button - The LED4 continues to blink. I think that normally I should wake up the device from the sleep mode and then go back to the main programm and on this main, the code should switch on the LED3...

    /* Configure User Button */
     STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI);
    /* Request to enter SLEEP mode */
     __WFI();
    /* Initialize LED4 on STM32F0-Discovery board */
     STM_EVAL_LEDInit(LED4);
    /* Infinite loop */
     while (1)
     {
     /* Toggle The LED4 */
     STM_EVAL_LEDToggle(LED4);
    /* Inserted Delay */
     for(index = 0; index < 0x7FFFF; index++);
     }
    }�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?

    Here is the entire code :

    void SleepMode_Measure(void)
    {
     __IO uint32_t index = 0;
     GPIO_InitTypeDef GPIO_InitStructure;
    /* Configure all GPIO as analog to reduce current consumption on non used IOs */
     /* Enable GPIOs clock */
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC |
     RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOF , ENABLE);
     
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
     GPIO_Init(GPIOC, &GPIO_InitStructure);
     GPIO_Init(GPIOD, &GPIO_InitStructure);
     GPIO_Init(GPIOF, &GPIO_InitStructure);
     GPIO_Init(GPIOA, &GPIO_InitStructure); 
     GPIO_Init(GPIOB, &GPIO_InitStructure);
    /* Disable GPIOs clock */
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC |
     RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOF, DISABLE);
    /* Configure User Button */
     STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI);
    /* Request to enter SLEEP mode */
     __WFI();
    /* Initialize LED4 on STM32F0-Discovery board */
     STM_EVAL_LEDInit(LED4);
    /* Infinite loop */
     while (1)
     {
     /* Toggle The LED4 */
     STM_EVAL_LEDToggle(LED4);
    /* Inserted Delay */
     for(index = 0; index < 0x7FFFF; index++);
     }
    }�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?
    int main(void)
    {
     /*!< At this stage the microcontroller clock setting is already configured, 
     this is done through SystemInit() function which is called from startup
     file (startup_stm32f0xx.s) before to branch to application main.
     To reconfigure the default setting of SystemInit() function, refer to
     system_stm32f0xx.c file
     */
     /* Configure User Button */
     STM_EVAL_PBInit(BUTTON_USER,BUTTON_MODE_GPIO);
     
     /* Loop while User button is maintained pressed */
     while(STM_EVAL_PBGetState(BUTTON_USER) != RESET)
     {
     }
     
     /* Enable PWR APB1 Clock */
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
     
     /* Allow access to Backup */
     PWR_BackupAccessCmd(ENABLE);
     
     /* Reset RTC Domain */
     RCC_BackupResetCmd(ENABLE);
     RCC_BackupResetCmd(DISABLE);
     
     /* Loop while User button is maintained pressed */
     while(STM_EVAL_PBGetState(BUTTON_USER) == RESET)
     {
     }
     /* Loop while User button is maintained pressed */
     while(STM_EVAL_PBGetState(BUTTON_USER) != RESET)
     {
     }
     
    #if defined (SLEEP_MODE)
     /* Sleep Mode Entry 
     - System Running at PLL (48MHz)
     - Flash 3 wait state
     - Prefetch and Cache enabled
     - Code running from Internal FLASH
     - All peripherals disabled.
     - Wakeup using EXTI Line (User Button PA.00)
     */ 
     SleepMode_Measure();
    }�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?

    Nesrine M_O
    Associate
    December 8, 2016
    Posted on December 08, 2016 at 14:23

    Hi

    Michel.Leo

    I recommend you to start from the PWR examples under the

    http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32html

    :

    • STM32F0xx_StdPeriph_Lib_V1.5.0\Projects\STM32F0xx_StdPeriph_Examples\PWR\PWR_Standby: This example shows how to enter the system to STANDBY mode and wake-up from this mode either with the RESET or using RTC Alarm.

    • STM32F0xx_StdPeriph_Lib_V1.5.0\Projects\STM32F0xx_StdPeriph_Examples\PWR\PWR_CurrentConsumption: This example shows how to configure the STM32F0xx system to measure different Low Power modes current consumption. The Low Power modes are:

    - Sleep Mode

    - STOP mode with RTC

    - STANDBY mode without RTC

    - STANDBY mode with RTC

    -Nesrine-

    Ifmy suggestanswers your question, please mark it as correct.