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

[复制链接]
560|11
 楼主 | 2018-6-15 00:09 | 显示全部楼层 |阅读模式
用stm32的HAL库写的一个按键中断的程序,
按键接在PC13,LED接在PB5,想要实现的功能是,PC13有下降沿输入的时候PB5的状态翻转

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



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-6-15 08:29 | 显示全部楼层
有关时间的调试 用仿真不太合适 不建议仿真
| 2018-6-15 11:30 | 显示全部楼层
没有看到什么防抖
| 2018-6-15 11:32 | 显示全部楼层
一次按键会产生多个边沿,

所有需要在中断里关掉边沿触发,过段时间再打开,这才叫去抖
| 2018-6-15 22:06 | 显示全部楼层
仿真里时间不靠普的,还是用实际硬件运行看看吧
| 2018-6-22 13:25 | 显示全部楼层
你如果是IO触发中断,那么就要在中断函数里关掉这个中断,在延时一段时间后,再尝试打开中断
有一个比较可靠的方法,下降沿触发中断后,关中断,4毫秒后改为上升沿中断,触发后,再关中断,4毫秒后再恢复成为下降沿触发,但这需要一个时钟
| 2018-6-23 08:33 | 显示全部楼层
觉得很多人还是习惯用标准库,不过hal是发展趋势,官方也在推
 楼主 | 2018-7-1 17:46 | 显示全部楼层
当前这个情况下把程序下载到板子上运行的时候,按下按键,LED的状态会翻转两次,后来尝试改了一下软件生成的代码,将清中断标志位那条语句放到调用中断回调函数之后就可以了
 楼主 | 2018-7-1 17:51 | 显示全部楼层
ayb_ice 发表于 2018-6-15 11:32
一次按键会产生多个边沿,

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

这里因为时间要求并不是很精确,就在中断回调函数里面加了一个简单的延时,在按键状态稳定之后再去执行翻转LED状态的操作,
 楼主 | 2018-7-1 17:54 | 显示全部楼层
dirtwillfly 发表于 2018-6-23 08:33
觉得很多人还是习惯用标准库,不过hal是发展趋势,官方也在推

刚开始接触的是标准库,所以还是比较习惯标准库,看过正点原子HAL库的代码,基本上相当于是把标准库和HAL库兼容了,感觉还不错
| 2018-7-1 20:41 | 显示全部楼层
解决了吗
 楼主 | 2018-7-2 22:40 | 显示全部楼层

这样改了之后可以了



当前这个情况下把程序下载到板子上运行的时候,按下按键,LED的状态会翻转两次,后来尝试改了一下软件生成的代码,将清中断标志位那条语句放到调用中断回调函数之后就可以了
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /5 下一条

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