打印

用HAL库写的一个STM32的中断程序,为什么会发生两次中断

[复制链接]
3849|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yesiqiu|  楼主 | 2018-6-15 00:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用stm32的HAL库写的一个按键中断的程序,
按键接在PC13,LED接在PB5,想要实现的功能是,PC13有下降沿输入的时候PB5的状态翻转

目前的现象是按键按下的时候LED点亮一段时间会熄灭7
但是用JTAG单步仿真的时候就没有这样的现象,程序中已经做了防抖处理,而且防抖的延时时间还挺长



完成的代码超过了五兆,传不上来,贴一部分代码,帮忙分析下,谢谢

PING.png (20.59 KB )

PING.png

相关帖子

沙发
山东电子小菜鸟| | 2018-6-15 08:29 | 只看该作者
有关时间的调试 用仿真不太合适 不建议仿真

使用特权

评论回复
板凳
ayb_ice| | 2018-6-15 11:30 | 只看该作者
没有看到什么防抖

使用特权

评论回复
地板
ayb_ice| | 2018-6-15 11:32 | 只看该作者
一次按键会产生多个边沿,

所有需要在中断里关掉边沿触发,过段时间再打开,这才叫去抖

使用特权

评论回复
5
dirtwillfly| | 2018-6-15 22:06 | 只看该作者
仿真里时间不靠普的,还是用实际硬件运行看看吧

使用特权

评论回复
6
kingkits| | 2018-6-22 13:25 | 只看该作者
你如果是IO触发中断,那么就要在中断函数里关掉这个中断,在延时一段时间后,再尝试打开中断
有一个比较可靠的方法,下降沿触发中断后,关中断,4毫秒后改为上升沿中断,触发后,再关中断,4毫秒后再恢复成为下降沿触发,但这需要一个时钟

使用特权

评论回复
7
dirtwillfly| | 2018-6-23 08:33 | 只看该作者
觉得很多人还是习惯用标准库,不过hal是发展趋势,官方也在推

使用特权

评论回复
8
yesiqiu|  楼主 | 2018-7-1 17:46 | 只看该作者
当前这个情况下把程序下载到板子上运行的时候,按下按键,LED的状态会翻转两次,后来尝试改了一下软件生成的代码,将清中断标志位那条语句放到调用中断回调函数之后就可以了

使用特权

评论回复
9
yesiqiu|  楼主 | 2018-7-1 17:51 | 只看该作者
ayb_ice 发表于 2018-6-15 11:32
一次按键会产生多个边沿,

所有需要在中断里关掉边沿触发,过段时间再打开,这才叫去抖 ...

这里因为时间要求并不是很精确,就在中断回调函数里面加了一个简单的延时,在按键状态稳定之后再去执行翻转LED状态的操作,

使用特权

评论回复
10
yesiqiu|  楼主 | 2018-7-1 17:54 | 只看该作者
dirtwillfly 发表于 2018-6-23 08:33
觉得很多人还是习惯用标准库,不过hal是发展趋势,官方也在推

刚开始接触的是标准库,所以还是比较习惯标准库,看过正点原子HAL库的代码,基本上相当于是把标准库和HAL库兼容了,感觉还不错

使用特权

评论回复
11
gujiamao12345| | 2018-7-1 20:41 | 只看该作者
解决了吗

使用特权

评论回复
12
yesiqiu|  楼主 | 2018-7-2 22:40 | 只看该作者

这样改了之后可以了



当前这个情况下把程序下载到板子上运行的时候,按下按键,LED的状态会翻转两次,后来尝试改了一下软件生成的代码,将清中断标志位那条语句放到调用中断回调函数之后就可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

56

帖子

3

粉丝