最近在调试stm32f4的UCOSIII操作系统中,外部中断的使用。发现当触发了相应的外部输入中断,会多次进入外部中断处理函数。(测试方式是在外部中断函数中写下代码t++,然后用windows窗口查看变量t的变化情况,发现每次外部中断输入,t会++很多次)从网上也找了很多资料,应用到实际工程中,问题未得到解决。因此改变思路,即不再用外部中断检测上升沿或下降沿,而是采用之前工程用到的,检测变量前后变化的方式来检测上升沿或下降沿。具体的说明代码如下:
while(1)
{
//检测外部下降沿
switch_flag_pa1=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
if((switch_flag_pa1==0)&&(switch_flag_old_pa1==1))
{
//处理逻辑
}
switch_flag_old_pa1=switch_flag_pa1;
//检测外部上升沿
switch_flag_pb1=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1);
if((switch_flag_pb1==1)&&(switch_flag_old_pb1==0))
{
//处理逻辑
}
switch_flag_old_pb1=switch_flag_pb1;
}
从实际的测试效果来看,采用变量前后变化的方式可以采集到上升沿或下降沿,从而替代外部输入中断处理。至于在操作系统中,外部中断进入多次的原因,有待以后进一步查明。