STM32 PB8 PB9外部中断问题

配置外部中断步骤

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);     
}  
}

 

 

 

你可能感兴趣的:(STM32)