2165|15

1025

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

GPIO意外中断及处理 [复制链接]

 

芯片:STM32G030,  GPIO:PA12 ,功能:中断后LCD菜单选择

现象:每10秒左右就发生1-3次中断,至少一次不固定。

原因:GPIO外部中断输入方式,上拉,按钮将此PIN接地,产生FALLING中断。

           猜测由于上拉电阻(内部10k)较大,引脚未接电容降噪,导致悬空不稳定。

处理:中断后10mS防抖动确认(未能消除误动),然后增加了延时按键释放确认,结果“中断”非常准确。

遗憾:只是应急软件处理了,但不知道原因。这个引线长度只有25mm 长度 PCB引线,并且4周都包围在GND中,没有外部干扰源,

           电源为5VDC-3.3V,47uF+0.1+0.1,不应该有问题,想不通。望高人指点。

此帖出自stm32/stm8论坛

最新回复

加入延时释放,其实进行了降噪处理,说明软件没问题,试试用示波器打打GPIO:PA12的波形。  详情 回复 发表于 2024-9-30 14:37
点赞 关注
个人签名چوآن شـين
 

回复
举报

6069

帖子

4

TA的资源

版主

沙发
 

按键处理最好用定时中断。定时器设为10ms中断一次,每次扫描一下按键,连续N次,比如8次为0则肯定为0

连续N次为1肯定为1.这样抖动自然消除。而且非常稳定。

此帖出自stm32/stm8论坛

点评

非常感谢!方法可以。 但实际的按键较快的操作在8-12ms,也就是说做个3ms中断读GPIO,读到约2-4次,如果不是PCB面积紧张,我宁愿选择价格0.01的电容,加上简单的防抖软件即可。 换句还说,对于“开关&rdq  详情 回复 发表于 2024-7-18 16:08
 
 

回复

2939

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 

楼上的是一种方法,你这个问题大概率是软件的毛病,硬件的话就是开关有毛病。

软件的话IO配置,也要仔细看看。因为程序运行过程中IO配置有可能改动。

此帖出自stm32/stm8论坛
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

4
 

每10秒左右就发生1-3次中断 ?

是不是哪里把噪声或者干扰引进去了

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

1025

帖子

0

TA的资源

纯净的硅(高级)

5
 
damiaa 发表于 2024-7-18 12:26 按键处理最好用定时中断。定时器设为10ms中断一次,每次扫描一下按键,连续N次,比如8次为0则肯定为0 连 ...

非常感谢!方法可以。

但实际的按键较快的操作在8-12ms,也就是说做个3ms中断读GPIO,读到约2-4次,如果不是PCB面积紧张,我宁愿选择价格0.01的电容,加上简单的防抖软件即可。

换句还说,对于“开关”的中断方式输入,最好是软硬结合,否则意外太多,关键是使用了较多的资源。要不是低电平触发,我一定会修改为上升沿触发中断,应该更稳定一点。

此帖出自stm32/stm8论坛

点评

按键一般没那么快,手的动作最快也是零点几秒,也就是几百毫秒。最快0.1秒。这是一 其二 如果按键实在快,你担心一次扫不到那么多次,你可以把定时中断搞成1毫秒,2毫秒一次。也可以减少采用次数判断的那个N  详情 回复 发表于 2024-7-18 16:15
 
个人签名چوآن شـين
 
 

回复

6069

帖子

4

TA的资源

版主

6
 
Gen_X 发表于 2024-7-18 16:08 非常感谢!方法可以。 但实际的按键较快的操作在8-12ms,也就是说做个3ms中断读GPIO,读到约2-4次,如 ...

按键一般没那么快,手的动作最快也是零点几秒,也就是几百毫秒。最快0.1秒。这是一

其二 如果按键实在快,你担心一次扫不到那么多次,你可以把定时中断搞成1毫秒,2毫秒一次。也可以减少采用次数判断的那个N。

反正一句话,足够你怎么弄得稳定。不用担心。 外加电容什么的是没得用处的。

 

此帖出自stm32/stm8论坛

点评

这个方法可以,在资源充足的情况下软件能实现的肯定用软件最好。 我自己测量过我的手按键最快速度是11ms,偶尔能到9ms,多数人在16以上; 一般电子类微动开关都在15-30之间(最快); 中间继电器机电类产品  详情 回复 发表于 2024-7-24 07:57
 
 
 

回复

6069

帖子

4

TA的资源

版主

7
 

以前又个帖子,看看有没有用https://bbs.eeworld.com.cn/thread-501060-1-1.html

此帖出自stm32/stm8论坛
 
 
 

回复

6773

帖子

2

TA的资源

版主

8
 

每10秒左右就发生1-3次中断,至少一次不固定。是软件的现象嘛?可以拿示波器抓一下这个中断引脚,看看情况

此帖出自stm32/stm8论坛
 
 
 

回复

1025

帖子

0

TA的资源

纯净的硅(高级)

9
 
本帖最后由 Gen_X 于 2024-7-19 08:38 编辑

硬软件都没有修改,只在防抖动延时后加了一句:

__HAL_GPIO_EXTI_CLEAR_FALLING_IT(GPIO_Pin);

就好了,真不知道什么原因。

我习惯认为HAL库在每个中断的入口都执行了“CLEAR”(实际是这样),所以一般中断CALLBACK里我都不加“CLEAR”,这样是HAL库的有点,但这回改了我的认知:

如果不是时间资源绝对紧张,看样子“CLEAR”可以再加,不要怕多余,最少能防止中断后的“意外"残余中断触发。当然,要承认误触发是存在的,但通过防抖可以排除。

总结原因:是个人习惯,CALLBACK中一般都不加中断标志的“CLEAR”,致使多次不稳定终断残余(毛刺)引起多次引发中断。

感谢@wangerxian 以及其他网友的耐心解答和分析。

此帖出自stm32/stm8论坛
 
个人签名چوآن شـين
 
 

回复

1025

帖子

0

TA的资源

纯净的硅(高级)

10
 
本帖最后由 Gen_X 于 2024-7-19 09:07 编辑

通过这个小小的”项目“,本人领教了STM32G030做的小系统在220VAC-3.3vDC的回路里还是可以使用的,稳定性超过了我的认知,过去用过PIC16和51做的变压器+线性稳压的测控回路,吃尽了苦头,一至于很长一段时间认为单片机用在工控里有点可怕。

也许使以前器件的原因,CPU手都不能靠近,轻则死机,重则程序跑飞,所以才有软硬兼施的WDT的刚需。现在的32ARM运行中像猫一样温顺,从不发脾气。

此帖出自stm32/stm8论坛
 
个人签名چوآن شـين
 
 

回复

1582

帖子

0

TA的资源

五彩晶圆(初级)

11
 

学习了,谢谢分享,对软件滤波的应用理解更深了

此帖出自stm32/stm8论坛
 
 
 

回复

6841

帖子

11

TA的资源

版主

12
 

 电源为5VDC-3.3V,47uF+0.1+0.1,不应该有问题,想不通。望高人指点。

上逻辑分析仪,或者示波器,抓一下IO的波形。

此帖出自stm32/stm8论坛
 
 
 

回复

161

帖子

3

TA的资源

一粒金砂(高级)

13
 

问题解决了吗? 是什么造成的?

此帖出自stm32/stm8论坛
 
 
 

回复

1025

帖子

0

TA的资源

纯净的硅(高级)

14
 
本帖最后由 Gen_X 于 2024-7-22 09:50 编辑

不相关的一个PWM,是每10秒一个的,虽然PCB不在同一层,并且没有平行段,

但因为有立体交叉,导致有不想要的中断产生(10秒周期可以证明,但中断次数每周期次数1-3次不定)。

这个“无关”的PWM每次产生是上沿会有感应中断,有时下沿也会有,所以感觉中断次数比较多,并且10ms“消抖”都能穿越,本人也想不通!

此帖出自stm32/stm8论坛
 
个人签名چوآن شـين
 
 

回复

1025

帖子

0

TA的资源

纯净的硅(高级)

15
 
damiaa 发表于 2024-7-18 16:15 按键一般没那么快,手的动作最快也是零点几秒,也就是几百毫秒。最快0.1秒。这是一 其二 如果按键 ...

这个方法可以,在资源充足的情况下软件能实现的肯定用软件最好。

我自己测量过我的手按键最快速度是11ms,偶尔能到9ms,多数人在16以上;

一般电子类微动开关都在15-30之间(最快);

中间继电器机电类产品一般大概在10-30ms;

接触器和大部分的机械开关在35~50ms以上,有大到150ms以上,

所以大家防抖时间根据开关实际情况,一般选在8-23内。

此帖出自stm32/stm8论坛
 
个人签名چوآن شـين
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

16
 
加入延时释放,其实进行了降噪处理,说明软件没问题,试试用示波器打打GPIO:PA12的波形。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表