OpenEdv-开源电子网

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

用中断服务函数实现按键控制LED灯实验现象出错

[复制链接]

4

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2017-12-24
在线时间
40 小时
发表于 2018-1-22 18:41:02 | 显示全部楼层 |阅读模式
5金钱
在中断服务函数中
void EXTI0_IRQHandler(void)
{
        delay_ms(10);
        //if(EXTI_GetITStatus(EXTI_Line0)){
                if(WK_UP){
                LED0=!LED0;
                EXTI_ClearITPendingBit(EXTI_Line0);
       
        }
       
       
       
}

将该处代码:if(WK_UP)改成是if(EXTI_GetITStatus(EXTI_Line0))
实验现象 看到 WK_UP 控制 LEDO 的状态 并不灵敏 有时 是键按下 状态不翻转 有时是键按下 状态翻转  
而 代码写成是if(WK_UP) 时就不会
请问是什么原因导致的呢?

最佳答案

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

因为判断中断标志位,并不具备消抖功能。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-22 18:41:03 | 显示全部楼层
因为判断中断标志位,并不具备消抖功能。
回复

使用道具 举报

4

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2017-12-24
在线时间
40 小时
 楼主| 发表于 2018-1-23 22:10:04 | 显示全部楼层
正点原子 发表于 2018-1-22 18:41
因为判断中断标志位,并不具备消抖功能。

如果if(EXTI_GetITStatus(EXTI_Line0))不具备消抖功能的话,那为什么  if(WK_UP) 就具备了呢? 消抖功能的实现不在于中断函数自身,而是靠delay_ms(10)实现的吧。
回复

使用道具 举报

4

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2017-12-24
在线时间
40 小时
 楼主| 发表于 2018-1-23 22:19:57 | 显示全部楼层
PS:除了上者两种方案之外,第三种方案:  if(KEY_Scan(0)==WKUP_PRES)实验现象也是 控制 LEDO 的状态 并不灵敏 有时 是键按下 状态不翻转 有时是键按下 状态翻转   
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 05:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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