wallwall1111 发表于 2015-6-9 14:22:04

STM32F103 设置6个外部按键中断 相互干扰

本帖最后由 wallwall1111 于 2015-6-9 17:35 编辑

如题。
我设置GPIOG 0-5一共6个按键做外部中断,5K电阻上拉到3.3V。现在的问题是按下其中一个按键时,除了该按键的中断响应以外,其他按键的中断有时候也被响应,求大师指导!


程序:
void EXTI_SetupNVIC(void)
{
      NVIC_InitTypeDef NVIC_InitStructure;

      NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);

      /*Configureonebitforpreemptionpriority*/
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);// 1bitsforpre-emptionpriority //3bitsforsubpriority*/)      
      /*EnabletheEXTI9_5Interrupt*/
      NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
      NVIC_Init(&NVIC_InitStructure);
      
//      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
      /*EnabletheEXTI15_10Interrupt*/
      NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
      NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
      NVIC_Init(&NVIC_InitStructure);
      
      
      /*EnabletheEXTI15_10Interrupt*/
      NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
      NVIC_Init(&NVIC_InitStructure);      
      
      
      /*EnabletheEXTI15_10Interrupt*/
      NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
      NVIC_Init(&NVIC_InitStructure);      
      
      
      /*EnabletheEXTI15_10Interrupt*/
      NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
      NVIC_Init(&NVIC_InitStructure);

      /*EnabletheEXTI15_10Interrupt*/
      NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
      NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
      NVIC_Init(&NVIC_InitStructure);
      
}


void EXTI_SetupGPIO(void)
{
      GPIO_InitTypeDef GPIO_InitStructure;/* ¶¨ÒåÒ»¸öGPIO³õʼ»¯½á¹¹Ìå */
/*ConfigurePB9asinputfloating(EXTILine9)*/
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOG,&GPIO_InitStructure);
      
      /*ConfigurePC13asinputfloating(EXTILine13)*/
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOG,&GPIO_InitStructure);

      /*ConfigurePC13asinputfloating(EXTILine13)*/
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOG,&GPIO_InitStructure);      
      
      /*ConfigurePC13asinputfloating(EXTILine13)*/
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOG,&GPIO_InitStructure);      
      
      /*ConfigurePC13asinputfloating(EXTILine13)*/
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOG,&GPIO_InitStructure);      
      
      /*ConfigurePC13asinputfloating(EXTILine13)*/
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOG,&GPIO_InitStructure);      

}
void EXTI_Configure(void)
{
      EXTI_InitTypeDef EXTI_InitStructure;

      GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource0);      
      EXTI_InitStructure.EXTI_Line=EXTI_Line0;
      EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
      EXTI_InitStructure.EXTI_LineCmd=ENABLE;
      EXTI_Init(&EXTI_InitStructure);
      
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource1);         
      EXTI_InitStructure.EXTI_Line=EXTI_Line1;
      EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
      EXTI_InitStructure.EXTI_LineCmd=ENABLE;
      EXTI_Init(&EXTI_InitStructure);
      
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource2);
      EXTI_InitStructure.EXTI_Line=EXTI_Line2;
      EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
      EXTI_InitStructure.EXTI_LineCmd=ENABLE;
      EXTI_Init(&EXTI_InitStructure);      
      
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource3);
      EXTI_InitStructure.EXTI_Line=EXTI_Line3;
      EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
      EXTI_InitStructure.EXTI_LineCmd=ENABLE;
      EXTI_Init(&EXTI_InitStructure);      
      
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource4);
      EXTI_InitStructure.EXTI_Line=EXTI_Line4;
      EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
      EXTI_InitStructure.EXTI_LineCmd=ENABLE;
      EXTI_Init(&EXTI_InitStructure);      
      
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource5);
      EXTI_InitStructure.EXTI_Line=EXTI_Line5;
      EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
      EXTI_InitStructure.EXTI_LineCmd=ENABLE;
      EXTI_Init(&EXTI_InitStructure);      
}
void EXTI_SETUP(void)
{
      EXTI_Clock();
      EXTI_SetupNVIC();
      EXTI_SetupGPIO();
      EXTI_Configure();
}







wallwall1111 发表于 2015-6-9 14:48:09

请教是否有在线的高手可以解决啊!

wallwall1111 发表于 2015-6-9 17:36:14

大家来讨论一下啊!

jacobfeng 发表于 2015-6-9 20:06:50

上拉输入,不是浮空输入:lol

wallwall1111 发表于 2015-6-10 09:51:55

jacobfeng 发表于 2015-6-9 20:06
上拉输入,不是浮空输入

1.硬件上面,外部接了5K的上拉电阻。
2.软件上面我设置成上拉,同样也是没有效果。
3.我换了几个STM32,都有同样的问题。
求指导!

wallwall1111 发表于 2015-6-10 09:53:17

jacobfeng 发表于 2015-6-9 20:06
上拉输入,不是浮空输入

请教,这个问题是不是STM32的BUG啊!

jacobfeng 发表于 2015-6-10 10:41:23

你这里设置成浮空输入了,
不是设置上拉输入么?

发表于 2015-6-10 10:55:26

楼主,在按下按键的时候,测一下其他引脚的波形。

黑皮男 发表于 2015-6-10 10:59:07

安 发表于 2015-6-10 10:55
楼主,在按下按键的时候,测一下其他引脚的波形。

说的对,设置一下其他脚的电平

为什么是EEFOCUS小白 发表于 2015-6-10 17:29:51

wallwall1111 发表于 2015-6-10 09:53
请教,这个问题是不是STM32的BUG啊!

不要随口说人家BUG,自己好好找问题吧
页: [1] 2
查看完整版本: STM32F103 设置6个外部按键中断 相互干扰