硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4010|回复: 12
收起左侧

[技术讨论] 硬汉 按键检测逻辑,疑惑

[复制链接]

3

主题

16

回帖

25

积分

新手上路

积分
25
发表于 2019-12-25 14:23:01 | 显示全部楼层 |阅读模式
本人刚学习STM32编程,看了几个星期其它厂家的教程,感觉非常肤浅,后来我朋友告诉我,看咱们硬汉的教程,非常专业,
我看了2天,确实非常的佩服,软件写的很专业,移植性强,执行效率高,逻辑思路也非常的高端,真的是非常硬!!!佩服佩服!

下面有几个疑惑的地方,希望群友或者大神一起交流,多谢!!!

1:按键检测滤波,初始化赋值“s_tBtn.Count = KEY_FILTER_TIME / 2”

按键按下滤波过程-01.png
按键弹起滤波过程-01.png

按键检测说明-01.png



PDF教程中说明:
注意下一下 Count 这个成员变量,没有设置为 0。为了避免主板上电的瞬间,检测到一个无效的按键按下或弹起事件。

疑问1:
          上电,发生无效的   按键按下  检测滤波时,检测时间是从 KEY_FILTER_TIME,到2倍的 KEY_FILTER_TIME,跟初始值(s_tBtn.Count = KEY_FILTER_TIME / 2)没有关系
          上电,发生无效的   按键弹起  滤波检测时,检测时间是从初始值(s_tBtn.Count = KEY_FILTER_TIME / 2)到0,这个时候会用到这个初始值。
所以:初始化的时候,这个初始值是不是要改成“s_tBtn.Count = KEY_FILTER_TIME ”,这样的话,无论是异常的按键按下,还是异常的按键弹起,检测滤波时间都是KEY_FILTER_TIME 的值。

2:全局运行时间,g_iRunTime,
全局毫秒计数器变量类型.png

疑问1:
          g_iRunTime为啥定义成有符号的,为啥不定成无符号的,这样处理起来也简单,不用判断是否溢出,表示的总时间还长

我理解的可能不是很专业,也可能是愚人自扰,哈哈,欢迎指正!

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2019-12-25 15:29:56 | 显示全部楼层
1、这个是个初始化值,设置的数值只要满足扫描数值即可。按下是从KEY_FILTER_TIME到KEY_FILTER_TIME*2检测,弹起是从KEY_FILTER_TIME 到 0。
     按下和松手都保证KEY_FILTER_TIME这么长的滤波时间即可。

2、可以设置成无符号的。现在DWT时钟周期计数器是采用的32bit无符号处理。
回复

使用道具 举报

3

主题

16

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2019-12-25 15:44:03 | 显示全部楼层
正常程序,对于按键按下,或者弹起,滤波时间都是50ms,但是如果初始化设置成25ms,
那么上电发生按键异常弹起的话,滤波时间就变成25到0,总滤波时间是25ms了,跟我们的设计50ms不统一了。
回复

使用道具 举报

3

主题

16

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2019-12-25 15:45:42 | 显示全部楼层
如果初始化设置成25ms,上电发生异常按键按下,我们检测滤波时间是50ms,但是如果发生异常按键弹起,滤波时间却变成了25ms,两种情况下的滤波时间不统一。设置成50ms,就统一了,哈哈
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2019-12-25 16:53:39 | 显示全部楼层
czm_hyt@163.com 发表于 2019-12-25 15:44
正常程序,对于按键按下,或者弹起,滤波时间都是50ms,但是如果初始化设置成25ms,
那么上电发生按键异常 ...


不是,你理解有偏差,这个初始值仅仅是赋一个初始值而已,程序运行运行中方便做各种状态的判断。
按下检测:
111.png

松手检索:
QQ截图20191225165556.png

回复

使用道具 举报

3

主题

16

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2019-12-25 17:30:32 | 显示全部楼层
程序正常运行没有问题,就说上电异常的情况系,如果是异常检测到松手,松手检测,初始值从25ms开始,递减,滤波时间是25ms,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2019-12-25 17:35:12 | 显示全部楼层
czm_hyt@163.com 发表于 2019-12-25 17:30
程序正常运行没有问题,就说上电异常的情况系,如果是异常检测到松手,松手检测,初始值从25ms开始,递减, ...

明白你的意思了,松手检测这里有个关键的标识 pBtn->State。
QQ截图20191225174817.png
回复

使用道具 举报

3

主题

16

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2019-12-25 18:41:05 | 显示全部楼层
那就是说初始化的时候,这个值可是设置成0,也没问题啊,哈哈
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2019-12-25 19:47:04 | 显示全部楼层
czm_hyt@163.com 发表于 2019-12-25 18:41
那就是说初始化的时候,这个值可是设置成0,也没问题啊,哈哈

对啊,方便判断各种状态用的。
回复

使用道具 举报

3

主题

16

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2019-12-25 21:19:31 | 显示全部楼层
我觉得初始化,还是设置成50ms比较好吧,哈哈
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2019-12-25 21:40:11 | 显示全部楼层
czm_hyt@163.com 发表于 2019-12-25 21:19
我觉得初始化,还是设置成50ms比较好吧,哈哈

结帖
后面学习新驱动了,继续交流。
回复

使用道具 举报

3

主题

16

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2019-12-26 09:01:26 | 显示全部楼层
好的,新驱动,我昨晚也看了一下,还没看完,也有一些疑惑,多谢回复!
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
QQ
发表于 2020-1-14 15:45:32 | 显示全部楼层
czm_hyt@163.com 发表于 2019-12-26 09:01
好的,新驱动,我昨晚也看了一下,还没看完,也有一些疑惑,多谢回复!

新驱动在哪?
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 22:07 , Processed in 0.199435 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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