/** * @brief Configures Button GPIO and EXTI Line. * @param Button: Specifies the Button to be configured. * This parameter should be: BUTTON_KEY * @param Mode: Specifies Button mode. * This parameter can be one of following parameters: * @arg BUTTON_MODE_GPIO: Button will be used as simple IO * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt * generation capability * @retval None */ void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Mode) { GPIO_InitTypeDef GPIO_InitStruct; /* Enable the BUTTON Clock */ BUTTONx_GPIO_CLK_ENABLE(Button); if (Mode == BUTTON_MODE_GPIO) { /* Configure Button pin as input */ GPIO_InitStruct.Pin = BUTTON_PIN[Button]; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStruct); } if (Mode == BUTTON_MODE_EXTI) { /* Configure Button pin as input with External interrupt */ GPIO_InitStruct.Pin = BUTTON_PIN[Button]; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStruct); /* Enable and set Button EXTI Interrupt to the lowest priority */ HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0); HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); } }
/** * @brief Configures Button GPIO and EXTI Line. * @param Button: Specifies the Button to be configured. * This parameter should be: BUTTON_USER * @param ButtonMode: Specifies Button mode. * This parameter can be one of following parameters: * @arg BUTTON_MODE_GPIO: Button will be used as simple IO * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt * generation capability * @retval None */ void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode) { GPIO_InitTypeDef gpioinitstruct = {0}; /* Enable the BUTTON Clock */ BUTTONx_GPIO_CLK_ENABLE(Button); if (ButtonMode == BUTTON_MODE_GPIO) { /* Configure Button pin as input */ gpioinitstruct.GPIO_Pin = BUTTON_PIN[Button]; gpioinitstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; gpioinitstruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BUTTON_PORT[Button], &gpioinitstruct); } if (ButtonMode == BUTTON_MODE_EXTI) { /* Configure Button pin as input with External interrupt */ gpioinitstruct.GPIO_Pin = BUTTON_PIN[Button]; gpioinitstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; gpioinitstruct.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(BUTTON_PORT[Button], &gpioinitstruct); /* Enable and set Button EXTI Interrupt to the lowest priority */ //NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 1<<3); NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); } }
/** * @brief Configures push button GPIO and EXTI Line. * @param Button: Button to be configured. * This parameter can be one of the following values: * @arg BUTTON_KEY: Key Push Button * @arg BUTTON_SEL : Sel Push Button on Joystick * @arg BUTTON_LEFT : Left Push Button on Joystick * @arg BUTTON_RIGHT : Right Push Button on Joystick * @arg BUTTON_DOWN : Down Push Button on Joystick * @arg BUTTON_UP : Up Push Button on Joystick * @param Button_Mode: Button mode requested. * This parameter can be one of the following values: * @arg BUTTON_MODE_GPIO: Button will be used as simple IO * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line * with interrupt generation capability * @retval None */ void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable the corresponding Push Button clock */ BUTTONx_GPIO_CLK_ENABLE(Button); /* Configure Push Button pin as input */ GPIO_InitStructure.Pin = BUTTON_PIN[Button]; GPIO_InitStructure.Pull = GPIO_PULLDOWN; GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; if (Button_Mode == BUTTON_MODE_GPIO) { /* Configure Button pin as input */ GPIO_InitStructure.Mode = GPIO_MODE_INPUT; HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure); } if (Button_Mode == BUTTON_MODE_EXTI) { if(Button == BUTTON_KEY) { /* Configure Key Push Button pin as input with External interrupt, falling edge */ GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING; } else { /* Configure Joystick Push Button pin as input with External interrupt, rising edge */ GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING; } HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure); /* Enable and set Button EXTI Interrupt to the lowest priority */ HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0); HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); } }