聊聊一个STM32中断处理问题

本文探讨了一位开发者在STM32G0系列芯片上遇到的问题,即在处理中断时,需要调用HAL_NVIC_EnableIRQ()函数两次才能正常响应新的报警信号。问题源于中断服务程序中关闭中断响应后,外部中断请求仍可能悬而未决。解决方案是在主循环中开启中断响应前,先清除中断请求标志,以消除不必要的中断启用重复调用。
摘要由CSDN通过智能技术生成

390b9de1cf9000d24535c66ce7ac0236.jpeg

先看一段代码:

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值