使用引脚 PC9,开启外部中断EXTI9_5_IRQHandler。
if(EXTI_GetITStatus(EXTI_Line9) != RESET){//反转中断
mmmm++;
EXTI_ClearITPendingBit(EXTI_Line9);
}
每次进外部中断,mmmm这个值有时显示正常,每点动按钮,进入一次中断,但有时会接连增加好几个数。
说明点击一次按钮,中间进入了不止一次中断。
因为是沿触发,我先前猜测,是不是按钮导致有杂波,误入了中断。
随后,我用示波器监测发现并没有杂波存在,很干净的高低电平。
这真是奇了怪了。
随后我查阅资料,有网友说与硬件有关。
网友回复:
这是CORTEX-M3内核的缺陷,清除中断标志不会马上生效,需要一段时间,如果你的中断服务程序时间很短,就会出现中断重入。
大概意思就是和硬件有关。后面还给出了一个解决办法(和去抖动类似),弄一个延时操作在前面。
之前是为了方便,我是将FEELER_OUT和com短接,直接产生回路的,这样中断会误入。
后来,我安照 以前的方式,通过光耦,导通了然后形成回路,这样子,外部中断并没有误入的现象。
总结:使用外部中断的时候,信号尽量避免按钮,或者需额外添加一个延时函数。类似去抖动。