芯片:STM32G030, GPIO:PA12 ,功能:中断后LCD菜单选择
现象:每10秒左右就发生1-3次中断,至少一次不固定。
原因:GPIO外部中断输入方式,上拉,按钮将此PIN接地,产生FALLING中断。
猜测由于上拉电阻(内部10k)较大,引脚未接电容降噪,导致悬空不稳定。
处理:中断后10mS防抖动确认(未能消除误动),然后增加了延时按键释放确认,结果“中断”非常准确。
遗憾:只是应急软件处理了,但不知道原因。这个引线长度只有25mm 长度 PCB引线,并且4周都包围在GND中,没有外部干扰源,
电源为5VDC-3.3V,47uF+0.1+0.1,不应该有问题,想不通。望高人指点。
引用: damiaa 发表于 2024-7-18 12:26 按键处理最好用定时中断。定时器设为10ms中断一次,每次扫描一下按键,连续N次,比如8次为0则肯定为0 连 ...
非常感谢!方法可以。
但实际的按键较快的操作在8-12ms,也就是说做个3ms中断读GPIO,读到约2-4次,如果不是PCB面积紧张,我宁愿选择价格0.01的电容,加上简单的防抖软件即可。
换句还说,对于“开关”的中断方式输入,最好是软硬结合,否则意外太多,关键是使用了较多的资源。要不是低电平触发,我一定会修改为上升沿触发中断,应该更稳定一点。
引用: Gen_X 发表于 2024-7-18 16:08 非常感谢!方法可以。 但实际的按键较快的操作在8-12ms,也就是说做个3ms中断读GPIO,读到约2-4次,如 ...
按键一般没那么快,手的动作最快也是零点几秒,也就是几百毫秒。最快0.1秒。这是一
其二 如果按键实在快,你担心一次扫不到那么多次,你可以把定时中断搞成1毫秒,2毫秒一次。也可以减少采用次数判断的那个N。
反正一句话,足够你怎么弄得稳定。不用担心。 外加电容什么的是没得用处的。
以前又个帖子,看看有没有用https://bbs.eeworld.com.cn/thread-501060-1-1.html
每10秒左右就发生1-3次中断,至少一次不固定。是软件的现象嘛?可以拿示波器抓一下这个中断引脚,看看情况
硬软件都没有修改,只在防抖动延时后加了一句:
__HAL_GPIO_EXTI_CLEAR_FALLING_IT(GPIO_Pin);
就好了,真不知道什么原因。
我习惯认为HAL库在每个中断的入口都执行了“CLEAR”(实际是这样),所以一般中断CALLBACK里我都不加“CLEAR”,这样是HAL库的有点,但这回改了我的认知:
如果不是时间资源绝对紧张,看样子“CLEAR”可以再加,不要怕多余,最少能防止中断后的“意外"残余中断触发。当然,要承认误触发是存在的,但通过防抖可以排除。
总结原因:是个人习惯,CALLBACK中一般都不加中断标志的“CLEAR”,致使多次不稳定终断残余(毛刺)引起多次引发中断。
感谢@wangerxian 以及其他网友的耐心解答和分析。
本帖最后由 Gen_X 于 2024-7-19 08:38 编辑通过这个小小的”项目“,本人领教了STM32G030做的小系统在220VAC-3.3vDC的回路里还是可以使用的,稳定性超过了我的认知,过去用过PIC16和51做的变压器+线性稳压的测控回路,吃尽了苦头,一至于很长一段时间认为单片机用在工控里有点可怕。
也许使以前器件的原因,CPU手都不能靠近,轻则死机,重则程序跑飞,所以才有软硬兼施的WDT的刚需。现在的32ARM运行中像猫一样温顺,从不发脾气。
本帖最后由 Gen_X 于 2024-7-19 09:07 编辑电源为5VDC-3.3V,47uF+0.1+0.1,不应该有问题,想不通。望高人指点。
上逻辑分析仪,或者示波器,抓一下IO的波形。
不相关的一个PWM,是每10秒一个的,虽然PCB不在同一层,并且没有平行段,
但因为有立体交叉,导致有不想要的中断产生(10秒周期可以证明,但中断次数每周期次数1-3次不定)。
这个“无关”的PWM每次产生是上沿会有感应中断,有时下沿也会有,所以感觉中断次数比较多,并且10ms“消抖”都能穿越,本人也想不通!
本帖最后由 Gen_X 于 2024-7-22 09:50 编辑引用: damiaa 发表于 2024-7-18 16:15 按键一般没那么快,手的动作最快也是零点几秒,也就是几百毫秒。最快0.1秒。这是一 其二 如果按键 ...
这个方法可以,在资源充足的情况下软件能实现的肯定用软件最好。
我自己测量过我的手按键最快速度是11ms,偶尔能到9ms,多数人在16以上;
一般电子类微动开关都在15-30之间(最快);
中间继电器机电类产品一般大概在10-30ms;
接触器和大部分的机械开关在35~50ms以上,有大到150ms以上,
所以大家防抖时间根据开关实际情况,一般选在8-23内。