配置外部中断步骤
1. 配置需要中断引脚模式
2.配置外部中断
2.1 配置外部中断结构体
注意 这里所有中断公用一个结构体,所以初始化的时候需要一起初始化
EXTI_InitStructure.EXTI_Line = EXTI_Line8|EXTI_Line9;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
2.2添加中断源
//出入库引脚
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
3. 配置NVIC优先级
因为STM32里面所有的中断配置都是这个东西管理的。所以配置的时候必须要添加。而且 5_9引脚共用一条中断线
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
4. 编写中断服务函数
同理 引脚5-9共用一个中断服务函数,判断哪条线再判断哪个引脚即可知道是哪个产生了中断。
void EXTI9_5_IRQHandler ()
{
if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
/**add your programe here+**/
EXTI_ClearITPendingBit(EXTI_Line8);
}
else if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
/**add your programe here**/
EXTI_ClearITPendingBit(EXTI_Line9);
}
}