先看一段代码:
while (1)
{
if(EXTI_Sign ==1)
{
HAL_Delay(Period);
HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
EXTI_Sign =0;
。。。。。。
}
}
有人使用STM32G0系列的芯片开发产品,有段功能测试验证代码如上所示,相同的函数必须调用2次才能正常运行,调用2次倒也罢了,关键是必须!颇为纳闷。
这里开启了PA3的外部中断功能,上下沿均可触发。PA3接收外来报警信号,类似于烟感报警器。报警信号是一串脉冲信号,报警信号过来时存在多次抖动问题。客户想了个方法消抖,只要报警端口有电平变化就触发中断然后把中断Disable,并设置报警标志再回到主程序。
主程序里识别到报警有效标志后延时几分钟再 Enable 刚才 Disable 掉的外部中断。但是,他发现再次使能外部中断时需要连续两次调用使能中断的代码才可以响应新的报警信号。【此处文字依据反馈者的文字描述组织而成】 下面MX_GPIO_Init(void) 是 经 CubeMx 配置后自动生成的,里面有 EXTI 相关 NVIC