中断子程序模板

// 启用 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);
    }
}

往事堪堪亦澜澜,前路漫漫亦灿灿。