#include <stdint.h>
#include "stm32f4xx.h"
#include "stm32f4xx_hal.h"
#include "stm32f4xx_hal_rcc.h"
#include "stm32f4xx_hal_gpio.h"
#define ONBOARD_PUSH_BTN GPIO_PIN_0
#define ONBOARD_GREEN_LED GPIO_PIN_12
#define ONBOARD_ORANGE_LED GPIO_PIN_13
#define ONBOARD_RED_LED GPIO_PIN_14
#define ONBOARD_BLUE_LED GPIO_PIN_15
void EXTI0_IRQHandler(void);
static void EXTILine0_Config(void);
static void configLEDS(void);
int main(void)
{
configLEDS();
EXTILine0_Config();
HAL_GPIO_WritePin(GPIOD, ONBOARD_GREEN_LED, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, ONBOARD_ORANGE_LED, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, ONBOARD_RED_LED, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, ONBOARD_BLUE_LED, GPIO_PIN_RESET);
while(1){
}
}
static void configLEDS(void){
__HAL_RCC_GPIOD_CLK_ENABLE();
GPIO_InitTypeDef LEDs_InitStructure;
LEDs_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
LEDs_InitStructure.Pull = GPIO_NOPULL;
LEDs_InitStructure.Pin = ONBOARD_GREEN_LED
| ONBOARD_ORANGE_LED
| ONBOARD_RED_LED
| ONBOARD_BLUE_LED;
HAL_GPIO_Init(GPIOD, &LEDs_InitStructure);
}
static void EXTILine0_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
__HAL_RCC_GPIOA_CLK_ENABLE();
/* Configure PA0 pin as input floating */
GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Pin = ONBOARD_PUSH_BTN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Enable and set EXTI Line0 Interrupt to the lowest priority */
HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
void EXTI0_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(0x01);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
HAL_GPIO_TogglePin(GPIOD, ONBOARD_GREEN_LED);
HAL_GPIO_TogglePin(GPIOD, ONBOARD_ORANGE_LED);
HAL_GPIO_TogglePin(GPIOD, ONBOARD_RED_LED);
HAL_GPIO_TogglePin(GPIOD, ONBOARD_BLUE_LED);
}