OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5063|回复: 8

把按钮中断设置上升沿触发,有时候按下去触发一次抬起来又触发一次。

[复制链接]

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-1-20
在线时间
5 小时
发表于 2018-3-26 15:27:27 | 显示全部楼层 |阅读模式
1金钱
我的中断不知道为什么有时候就是按下去执行一次,放开手又执行一次。不知道是我中断的问题还是什么,我设置上升沿触发。设置为下降沿更是这种乱跳,我没有设置边沿触发啊,为什么会这样啊。

最佳答案

查看完整内容[请看2#楼]

按照原子的例程10ms的延迟用来消抖,我发现了问题,当我写if(KEY_PRES)时就会出现乱跳,而且好像跟手的静电有关系,我改为if(KEY==1)时就没问题了。具体为什么还不太清楚,现在改过来就没事了,找了好久的问题,真的难受啊。 void EXTI3_IRQHandler(void) { delay_ms(10); //消抖 //key=KEY_Scan(0); if(KEY1==0) { flag++; if(flag>52) flag=49; LED1=!LED1; } EXTI_Clea ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-1-20
在线时间
5 小时
 楼主| 发表于 2018-3-26 15:27:28 | 显示全部楼层
augustedward 发表于 2018-3-26 20:24
你不会是在中断里面加了10s的延时吧?这样做可是大错特错的。

按照原子的例程10ms的延迟用来消抖,我发现了问题,当我写if(KEY_PRES)时就会出现乱跳,而且好像跟手的静电有关系,我改为if(KEY==1)时就没问题了。具体为什么还不太清楚,现在改过来就没事了,找了好久的问题,真的难受啊。
void EXTI3_IRQHandler(void)
{
        delay_ms(10);        //消抖
        //key=KEY_Scan(0);
            if(KEY1==0)         
            {       
                 flag++;
                 if(flag>52)
                 flag=49;
                 LED1=!LED1;
             }         
             EXTI_ClearITPendingBit(EXTI_Line3);//清除LINE4上的中断标志位
}
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-3-26 16:14:04 | 显示全部楼层
看看程序设置的是双边沿触发还是单边沿触发,或者用示波器看看按键按下的波形是否有抖动。
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12064
金钱
12064
注册时间
2013-3-8
在线时间
1283 小时
发表于 2018-3-26 17:28:09 | 显示全部楼层
估计是波形抖动
回复

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-1-20
在线时间
5 小时
 楼主| 发表于 2018-3-26 19:04:41 | 显示全部楼层

我有10秒的消抖啊,不用中断按键就特别好使,用了中断就抽,按着按着就变成了按下执行一次,抬起执行一次。
回复

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-1-20
在线时间
5 小时
 楼主| 发表于 2018-3-26 19:08:36 | 显示全部楼层
HXYDJ 发表于 2018-3-26 16:14
看看程序设置的是双边沿触发还是单边沿触发,或者用示波器看看按键按下的波形是否有抖动。

程序是单边沿触发,示波器看了感觉没什么毛病啊,同样的按键放在中断里和中断外就不一样,放了中断里就用着用着乱跳,中断外就没事。
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12064
金钱
12064
注册时间
2013-3-8
在线时间
1283 小时
发表于 2018-3-26 20:24:34 | 显示全部楼层
nmsdclm 发表于 2018-3-26 19:04
我有10秒的消抖啊,不用中断按键就特别好使,用了中断就抽,按着按着就变成了按下执行一次,抬起执行一次 ...

你不会是在中断里面加了10s的延时吧?这样做可是大错特错的。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-3-27 01:21:42 | 显示全部楼层
nmsdclm 发表于 2018-3-26 20:49
按照原子的例程10ms的延迟用来消抖,我发现了问题,当我写if(KEY_PRES)时就会出现乱跳,而且好像跟手的静 ...

必须KEY==1,不要写KEY这样子的。 判断标准不一样。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-5-11
在线时间
7 小时
发表于 2019-12-13 12:01:01 | 显示全部楼层
楼主的问题解决了吗,我也遇到了这个问题
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 05:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表