官方例程描述的并不详细。
且我感觉写的有问题,所以我就修改了一下。
EXIT外部中断的使用:
1.初始化用于中断的引脚。(和初始化普通IO差不多)
2.使能中断。
3.配置中断优先级。
4.中断函数中,清除中断标志位。
该代码,在GPIO_A_PIN12上有下降沿发生的时候,GPIO_B_PIN1上会有电平翻转。
#include "main.h"
static void APP_ConfigureExti(void);
int main(void)
{/* 复位所有外设,初始化flash接口和systick */HAL_Init();/* 配置外部中断 */APP_ConfigureExti();//-----gpio-b的第一个引脚,输出高电平HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,1);while (1){}
}/*** @brief 配置EXTI* @param 无* @retval 无*/
static void APP_ConfigureExti(void)
{/* 配置中断引脚 */GPIO_InitTypeDef GPIO_InitStruct;__HAL_RCC_GPIOA_CLK_ENABLE(); /* 使能GPIOA时钟 */GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; /* GPIO模式为下降沿中断 */GPIO_InitStruct.Pull = GPIO_PULLUP; /* 上拉 */GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; /* 速度为高速 */GPIO_InitStruct.Pin = GPIO_PIN_12;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/* 初始化IO引脚---作为中断的观测 */GPIO_InitTypeDef LEDD;__HAL_RCC_GPIOB_CLK_ENABLE(); /* 使能GPIOB时钟 */LEDD.Mode = GPIO_MODE_OUTPUT_PP; /* GPIO模式为下降沿中断 */LEDD.Pull = GPIO_PULLUP; /* 上拉 */LEDD.Speed = GPIO_SPEED_FREQ_HIGH; /* 速度为高速 */LEDD.Pin = GPIO_PIN_1;HAL_GPIO_Init(GPIOB, &LEDD);/* 使能EXTI中断 */HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);/* 配置中断优先级 */HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);
}//--------------中断事件发生的时候,就执行这个函数
void EXTI4_15_IRQHandler(void)
{// BSP_LED_Toggle(LED_GREEN);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
}