[STM32F1] f103的PB5和PB6外部中断问题

[复制链接]
1028|0
 楼主| 胡斯哲 发表于 2017-3-15 21:08 | 显示全部楼层 |阅读模式
本帖最后由 胡斯哲 于 2017-3-15 21:53 编辑

按键按PB6,只有PB6的中断标志为1;而按PB5 ,PB5和PB6的中断标志位都为1,就奇怪了。而且进行仿真的时候是先判断中端的第二个if,在执行第一个if。咋回事,不解啊电路
捕获.PNG
按键初始化程序如下:
  1. void key_init(void)
  2. {
  3.         
  4.         GPIO_InitTypeDef GPIO_InitStructure;
  5.         EXTI_InitTypeDef EXTI_InitStructure;
  6.         NVIC_InitTypeDef NVIC_InitStructure;
  7.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  9.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//|GPIO_Pin_6|GPIO_Pin_7;
  10.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  11.         GPIO_Init(GPIOB, &GPIO_InitStructure);

  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  13.         
  14. //  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource6);
  15.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5);
  16.   EXTI_InitStructure.EXTI_Line = EXTI_Line5;
  17.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  18.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //ϽµÑØÖжÏ
  19.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  20.   EXTI_Init(&EXTI_InitStructure);
  21.         
  22.   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  23.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  24.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  25.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  26.         NVIC_Init(&NVIC_InitStructure);

  27.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  28.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  29.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  31.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  32.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource6);
  33.   EXTI_InitStructure.EXTI_Line = EXTI_Line6;
  34.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  35.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØÖжÏ
  36.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  37.   EXTI_Init(&EXTI_InitStructure);
  38.         
  39. //        NVIC_Configuration();
  40.         NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  41.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  42.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
  43.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  44.   NVIC_Init(&NVIC_InitStructure);
  45.         
  46.         
  47.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  48.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  49.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  50.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  51.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  52.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource7);
  53.   EXTI_InitStructure.EXTI_Line = EXTI_Line7;
  54.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  55.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ϽµÑØÖжÏ
  56.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  57.   EXTI_Init(&EXTI_InitStructure);
  58.         
  59. //        NVIC_Configuration();
  60.         NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  61.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  62.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  63.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  64.   NVIC_Init(&NVIC_InitStructure);
  65. }


中断程序如下:
  1. void EXTI9_5_IRQHandler(void)
  2. {
  3.         if(EXTI_GetITStatus(EXTI_Line5) != RESET) //È·±£ÊÇ·ñ²úÉúÁËEXTI LineÖжÏ
  4.         {               
  5.     counter++;
  6.                 EXTI_ClearITPendingBit(EXTI_Line5);     //Çå³ýÖжϱê־λ
  7.         }  
  8.         if(EXTI_GetITStatus(EXTI_Line6) != RESET) //È·±£ÊÇ·ñ²úÉúÁËEXTI LineÖжÏ
  9.         {               
  10.                counter--;
  11.                 EXTI_ClearITPendingBit(EXTI_Line6);     //Çå³ýÖжϱê־λ
  12.         }
  13.         if(EXTI_GetITStatus(EXTI_Line7) != RESET) //È·±£ÊÇ·ñ²úÉúÁËEXTI LineÖжÏ
  14.         {
  15.                                 
  16.                counter--;
  17.                 EXTI_ClearITPendingBit(EXTI_Line7);     //Çå³ýÖжϱêÖ¾
  18.         }
  19. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

141

主题

1431

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部