1:初始化外部中断(配置GPIO触发模式,上下拉,速度 ,IO口),配置中断号
static void APP_ConfigureExti(void)
{
/* Configuration pins */
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOB_CLK_ENABLE(); /* Enable GPIOA clock */
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; /* GPIO mode is a falling edge interrupt */
GPIO_InitStruct.Pull = GPIO_PULLDOWN; /* pull up */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; /* The speed is high */
GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* Enable EXTI interrupt */
HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
/* Configure interrupt priority */
HAL_NVIC_SetPriority(EXTI2_3_IRQn, 0, 0);
}
2:处理中断
void EXTI2_3_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
}
3:重新定义callback 运行函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin)
{
case GPIO_PIN_2: HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0); break;
case GPIO_PIN_3: HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1); break;
// default:printf("错误 !\r\n\r\n");
}
}