E
Member
按键或传感器信号进外部中断后偶发误触发,是嵌入式里很典型的坑,软件消抖和硬件滤波要配合着查。
一、先看信号本身。用示波器抓中断引脚的波形,重点看上升沿有没有毛刺和振铃。机械触点抖动是毫秒级,电磁干扰毛刺是微秒级,两者处理方式完全不同,只看代码是分不出来的。
二、硬件滤波先行。RC 滤波加施密特触发输入能挡掉大部分高频毛刺,滤波时间常数按信号最快有效边沿来选,滤得太狠会把正常窄脉冲也吃掉。上拉电阻阻值也要核对,阻值太大抗干扰能力会变差。
三、中断里只做标记。外部中断服务程序里不要做延时消抖,只置标志位,主循环里再做时间窗口判断。两次有效边沿间隔小于消抖窗口的直接丢弃,这个窗口按实测抖动时间取 1.5~2 倍。
四、极性与边沿要复核。上升沿还是下降沿触发、引脚复用有没有冲突、调试器复位后中断标志有没有清掉,这些低级错误在换芯片或改板后最容易复发,改板后第一件事就是复核中断配置表。
你们项目里外部中断误触发最后查出来最多是硬件问题还是软件问题?
一、先看信号本身。用示波器抓中断引脚的波形,重点看上升沿有没有毛刺和振铃。机械触点抖动是毫秒级,电磁干扰毛刺是微秒级,两者处理方式完全不同,只看代码是分不出来的。
二、硬件滤波先行。RC 滤波加施密特触发输入能挡掉大部分高频毛刺,滤波时间常数按信号最快有效边沿来选,滤得太狠会把正常窄脉冲也吃掉。上拉电阻阻值也要核对,阻值太大抗干扰能力会变差。
三、中断里只做标记。外部中断服务程序里不要做延时消抖,只置标志位,主循环里再做时间窗口判断。两次有效边沿间隔小于消抖窗口的直接丢弃,这个窗口按实测抖动时间取 1.5~2 倍。
四、极性与边沿要复核。上升沿还是下降沿触发、引脚复用有没有冲突、调试器复位后中断标志有没有清掉,这些低级错误在换芯片或改板后最容易复发,改板后第一件事就是复核中断配置表。
你们项目里外部中断误触发最后查出来最多是硬件问题还是软件问题?
