你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
wallwall1111 提问时间:2015-6-9 14:22 /
本帖最后由 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();
}







<
收藏 评论18 发布时间:2015-6-9 14:22

举报

18个回答
wallwall1111 回答时间:2015-6-9 14:48:09
请教是否有在线的高手可以解决啊!
wallwall1111 回答时间:2015-6-9 17:36:14
大家来讨论一下啊!
jacobfeng 回答时间:2015-6-9 20:06:50
上拉输入,不是浮空输入
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
你这里设置成浮空输入了,
不是设置上拉输入么?
无标题.png
回答时间: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,自己好好找问题吧
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版