你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 外部中断按键控制问题

[复制链接]
西奥伟 提问时间:2018-12-5 18:04 /
本帖最后由 西奥伟 于 2018-12-12 15:15 编辑

最近在做一个电源有关的项目,通过按键控制开关机,按键是使用的外部中断,但是,为什么我Debug在线调试时,按键能够正常实现其功能,如果我取消Debug调试,正常运行,按键能够控制,但是,始终不能保持我的电源GPIO的引脚置高,按键按一下,电源指示灯闪烁一下,不能稳定亮起来。
这是我的程序,请教一下各位,看看我的代码写的是否有问题。

1

1

2

2

3

3

4

4

5

5



首先,感谢所有坛友对我提出的问题进行耐心的解答。然后,我已经找到最终导致出现问题的原因了,总结了一下是由于硬件设计的原因,我的项目是通过按键来实现短按开机,长按关机,短按时,需要把对应的GPIO置为高电平,才能够开机供电,但是,我使用的外部中断,还未等对应的GPIO置为高电平,单片机的CPU的时间戳就已经过了这一步。(也就是说正常工作模式下,根本就没有电源,给外设供电)这也是为什么我调试的时候,能够成功的原因,因为Debug会一直持续为单片机供电,让单片机有电源。

问题的出处

问题的出处


评分

参与人数 1 ST金币 +20 收起 理由
STMCU + 20

查看全部评分

收藏 1 评论18 发布时间:2018-12-5 18:04

举报

18个回答
jeffhe1 回答时间:2018-12-12 09:29:44
按鍵是否有 做 debounce , 會不會這影響的
tanic 回答时间:2018-12-12 09:51:18
本帖最后由 tanic 于 2018-12-12 10:03 编辑

最好把原理图拿上来看看
chenyang601 回答时间:2018-12-12 10:05:20
做过按键采集程序,是一定要做消抖处理的。除非你外部配有触发器,不然,中断处理的时候,读到的电平是有问题的。而且还会反复。
qinlu123 回答时间:2018-12-12 10:36:41
按键最好不要用外部中断模式,因为按一次按键会触发多次中断处理起来很麻烦。不妨试试我的驱动。

Key_Test-V1.1.rar

下载

5.2 MB, 下载次数: 19, 下载积分: ST金币 -1

五哥1 回答时间:2018-12-12 10:41:36
HAL库的,程序不完整,看的很累,分析,在DEBUG中能正常,但是在运行中又有问题,我认为有串口类的程序,执行到这,没有了,程序不报错,但是程序会不正常,不是你想要的结果,或者你的相应位置的延时不足,在DEBUG中完美的躲过这个,但是一运行就出问题。完全是根据多次工作实践瞎猜的。
toofree 回答时间:2018-12-12 10:41:44
本帖最后由 toofree 于 2018-12-12 10:45 编辑

没有工程的代码不看,因为无法验证。手敲代码太累,也没有在纸上写程序的习惯。
ST的样例中,无论是上沿、下沿、上下沿触发外部中断,在中断服务中都会判断IO当前状态,你这里没有。
至于去抖,除了软件去抖外,按键IO一般会加RC,纯属个人习惯。

队长shiwo 回答时间:2018-12-12 10:42:29
按键按下不消抖的话,不知道按了多少下的了,一般加个软件延时消抖
strang 回答时间:2018-12-12 11:07:22
除了软件去抖外,按键IO一般会加RC,赞成!
watershade 回答时间:2018-12-12 12:12:41
我看了一下逻辑上应该没问题。代码也很工整。如果一直按着按键超过5秒,就认为是一次假的按键事件。如果短按的话就会让电源引脚保持高电平。
但是不妨先在中断处理的地方加上一个延时,做一下软件滤波。然后关闭中断,不要让它反复进中断。
我认为是反复进了中断,尽管你的中断处理函数已经做了一些处理。但是我们知道按键抖动的话,你的main函数的延时可能根本比起作用。
在你确认按键事件之后,再开按键的中断。

logic.JPG
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版