西奥伟 发表于 2018-12-5 18:04:24

STM32 外部中断按键控制问题

本帖最后由 西奥伟 于 2018-12-12 15:15 编辑

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



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


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

按键最好不要用外部中断模式,因为按一次按键会触发多次中断处理起来很麻烦。不妨试试我的驱动。

五哥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函数的延时可能根本比起作用。
在你确认按键事件之后,再开按键的中断。

页: [1] 2
查看完整版本: STM32 外部中断按键控制问题