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

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-10 09:51:55
jacobfeng 发表于 2015-6-9 20:06
上拉输入,不是浮空输入

1.硬件上面,外部接了5K的上拉电阻。
2.软件上面我设置成上拉,同样也是没有效果。
3.我换了几个STM32,都有同样的问题。
求指导!
wallwall1111 回答时间:2015-6-10 17:48:16
jacobfeng 发表于 2015-6-10 10:41
你这里设置成浮空输入了,
不是设置上拉输入么?

我内部上拉下拉都测试过,外部我用5K电阻上拉了。。都是随机进入其他引脚的中断函数。。。。
111key.png
wallwall1111 回答时间:2015-6-10 17:44:09
安 发表于 2015-6-10 10:55
楼主,在按下按键的时候,测一下其他引脚的波形。

我用示波器捕捉过其他引脚 ,,都是3.3V  很平稳的3.3V
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: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,自己好好找问题吧
wallwall1111 回答时间:2015-6-10 17:43:36
jacobfeng 发表于 2015-6-10 10:41
你这里设置成浮空输入了,
不是设置上拉输入么?

在这里我设置上拉或者下拉都不行。。。。我都试过了。。。
wallwall1111 回答时间:2015-6-10 17:44:40
黑皮男 发表于 2015-6-10 10:59
说的对,设置一下其他脚的电平

设置电平什么意思?
wallwall1111 回答时间:2015-6-10 17:45:18
为什么是EEFOCUS小白 发表于 2015-6-10 17:29
不要随口说人家BUG,自己好好找问题吧

   o(︶︿︶)o 唉
不知道问题出在哪里。。。
12下一页

所属标签

相似问题

官网相关资源

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