中断子程序模板
// 启用 GPIOA 外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 启用 AFIO 外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
// 定义 GPIO 初始化结构体
GPIO_InitTypeDef GPIO_InitStructure;
// 配置 GPIO 初始化结构体参数
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 设置为引脚 0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 设置输入上拉模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置 GPIO 速度为 50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); // 初始化 GPIOC
// 配置外部中断线连接
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
// 定义外部中断初始化结构体
EXTI_InitTypeDef EXTI_InitStructure;
// 配置外部中断初始化结构体参数
EXTI_InitStructure.EXTI_Line = EXTI_Line0; // 设置外部中断线为 0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // 设置为中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 设置触发方式为下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能外部中断线
EXTI_Init(&EXTI_InitStructure); // 初始化外部中断
// 配置 NVIC 的优先级分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
// 定义 NVIC 初始化结构体
NVIC_InitTypeDef NVIC_InitStructure;
// 配置 NVIC 初始化结构体参数
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; // 设置外部中断的中断通道为 EXTI0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; // 设置抢占优先级为 1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; // 设置子优先级为 1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断通道
NVIC_Init(&NVIC_InitStructure); // 初始化 NVIC
中断程序调用
// 定义外部中断0的中断处理函数
void EXTI0_IRQHandler(void)
{
// 检查外部中断0的中断状态是否被触发
if (EXTI_GetITStatus(EXTI_Line0) == SET)
{
// 在这里执行需要在外部中断触发时执行的程序
// 清除外部中断0的中断挂起位
EXTI_ClearITPendingBit(EXTI_Line0);
}
}