进入外部中断后读取PB9发现一次进入这个外部中断两次if语句都会执行,调试发现两个if都是成立的,这是为什么啊

2019-08-29 08:38发布

void EXTI9_5_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line9) != RESET)
        {
          EXTI_ClearITPendingBit(EXTI_Line9);
                if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==RESET)
                {
                  coinnumber++;
                        Voice_Out(1, 18);
                }
                if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)!=RESET)
                {
                  coinnumber--;
                        Voice_Out(1, 17);
                }
        }         
}

进入外部中断后读取PB9发现一次进入这个外部中断两次if语句都会执行,调试发现两个if都是成立的,这是为什么啊,应该低脉冲出发的

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
zyx
1楼-- · 2019-08-29 11:00
自顶
lycreturn
2楼-- · 2019-08-29 16:48
一个是中断状态,一个是IO状态,没必然关系。比如你PB9设置下降沿(或则低电平)中断,PB9拉低,进入中断:SET,然后读取PB9状态 RESET. 并没什么问题
gsndragon
3楼-- · 2019-08-29 17:19
 精彩回答 2  元偷偷看……
zyx
4楼-- · 2019-08-29 19:00
gsndragon 发表于 2017-3-24 09:56
你在两个if前去读取IO电平,把值付给一个变量,然后在两个if中对这个变量判断试试看,或是直接用if+else; ...

我之前试过用else,还是一样的,而且我读的是20ms的低脉冲,应该不会是高电平啊
gsndragon
5楼-- · 2019-08-29 23:02
zyx 发表于 2017-3-24 12:30
我之前试过用else,还是一样的,而且我读的是20ms的低脉冲,应该不会是高电平啊

用else一样?什么意思?if和else都进去了??
xfdr0805
6楼-- · 2019-08-30 04:58
我也碰到过if  else  都执行情况,楼主还是检查一下硬件电路吧

一周热门 更多>