Nvic.h
#ifndef __Nvic_h
#define __Nvic_h
void NVIC_Configuration(void);
void EXTI9_5_IRQHandler(void);//配置中断 5-9口
void EXTI15_10_IRQHandler(void);//配置中断 10-15口
#endif
Nvic.c
#include <stdio.h>
#include "Nvic.h"
#include "stm32f10x.h"
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;//开启独立按键的4个端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource8);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource9);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource10);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource11);
//配置群组
//群组1为8个响应优先级2个抢占优先级
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
//响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
EXTI_InitStructure.EXTI_Line = EXTI_Line8 | EXTI_Line9 | EXTI_Line10 | EXTI_Line11;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}