NVIC中断的库函数:
GPIO剩下的函数:
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //锁定GPIO配置
//配置AFIO事件输出功能
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); //引脚重映射
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); //配置 GPIO对应的AFIO引脚选择 **
EXTI函数:
void EXTI_DeInit(void); //复位EXTI
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); //EXTI初始化 **
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct); //EXTI结构体赋予默认值
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); //软件触发外部中断
FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line); //获取标志位
void EXTI_ClearFlag(uint32_t EXTI_Line); //清除标志位
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); //中断函数里获取标志位 **
void EXTI_ClearITPendingBit(uint32_t EXTI_Line); //中断函数里清除标志位 **
NVIC misc.h:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); //中断分组 **
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); //NVIC初始化 **
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);

NVIC中断:
1.打开使用的GPIO和AFIO时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
2.GPIO初始化:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
3.配置GPIO对应的AFIO引脚选择:
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12);
4.配置EXTI:
EXTI_InitTypeDef EXTI_InitTypeDefStructure;
EXTI_InitTypeDefStructure.EXTI_Line=EXTI_Line12;
EXTI_InitTypeDefStructure.EXTI_LineCmd=ENABLE; //EXTI状态
EXTI_InitTypeDefStructure.EXTI_Mode=EXTI_Mode_Interrupt; //中断模式
EXTI_InitTypeDefStructure.EXTI_Trigger=EXTI_Trigger_Falling; //触发方式
EXTI_Init(&EXTI_InitTypeDefStructure);
5.配置NVIC:
NVIC_InitTypeDef NVIC_InitTypeDefStructure;
NVIC_InitTypeDefStructure.NVIC_IRQChannel=EXTI15_10_IRQn;
NVIC_InitTypeDefStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitTypeDefStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitTypeDefStructure.NVIC_IRQChannelSubPriority=1;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_Init(&NVIC_InitTypeDefStructure);
6.在启动文件选择对应的中断函数名:
void EXTI15_10_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line12)==SET){
EXTI_ClearITPendingBit(EXTI_Line12);
}
}
