OpenEdv-开源电子网

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

分享一个遇到的问题和它的解决方案。

[复制链接]

31

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
723
金钱
723
注册时间
2020-4-30
在线时间
109 小时
发表于 3 天前 | 显示全部楼层 |阅读模式
本帖最后由 2721978231 于 2025-2-19 09:04 编辑

最近遇到一个很奇特的问题,最开始的想法是实现在GPIO的外部中断中实现长按、短按的判断,于是在GPIO的外部中断中触发定时器的中断,设定的值是400ms后对引脚电平进行再次检测,通过检测到的电平值判断是长按或短按。
此时问题出现了,在第一次进GPIO的外部中断时,没有经过400ms的延时,立马就对IO电平进行了读取(打断点调试的方式,按下按键立马跳转到了IO电平读取那一行),并且读取到的数据永远是低电平(原理图与代码我会贴在后面)。然后第二次开始,读取到的值就没问题了。后续的解决办法是,在进while循环前,先进一次定时器中断,后续再次进中断就是“第二次”了,也就跳过了“第一次”的错误。耍了个小聪明
这次问题过程中使用CubeMX生成工程,GPIO引脚设置为上拉,因此不做操作时,IO引脚电平为高电平,按下按键后,IO电平为低电平。
想问问各位大佬,有没有遇到过相同的问题。
引脚.png 引脚中断.png 代码.png

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3343

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8458
金钱
8458
注册时间
2020-5-11
在线时间
3899 小时
发表于 昨天 14:50 | 显示全部楼层
本帖最后由 LcwSwust 于 2025-2-21 14:52 编辑

能及时检测到按键放开吗?快速多次点击按键,响应是否延迟400ms?
考虑极端情况,比如以间隔400ms的时间双击按键,是否有可能识别成长按。
专治疑难杂症
回复 支持 反对

使用道具 举报

31

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
723
金钱
723
注册时间
2020-4-30
在线时间
109 小时
 楼主| 发表于 昨天 15:01 | 显示全部楼层
LcwSwust 发表于 2025-2-21 14:50
能及时检测到按键放开吗?快速多次点击按键,响应是否延迟400ms?
考虑极端情况,比如以间隔400ms的时间双 ...

暂时的需求只是长按和短按,所以就只做了这么一个简单的设计   后续需求做修改的话可能会再做修改 只是这次的经历确实是以前没经历过的
回复 支持 反对

使用道具 举报

12

主题

3343

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8458
金钱
8458
注册时间
2020-5-11
在线时间
3899 小时
发表于 昨天 16:04 | 显示全部楼层
本帖最后由 LcwSwust 于 2025-2-21 16:07 编辑
2721978231 发表于 2025-2-21 15:01
暂时的需求只是长按和短按,所以就只做了这么一个简单的设计   后续需求做修改的话可能会再做修改 只 ...

你那函数...Start_IT是开启定时中断是吧,怎么确保开启后是400ms中断呢?有没有对计数值清零?
假如点击按键,隔300ms后再次按下,那定时器什么时候中断?
假如第二次按下持续110ms后放开,是否会识别成长按?
按键有投抖动,可能按下一次会进多次EXTI中断,可查一下“按键消抖”。
专治疑难杂症
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-22 02:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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