野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 29070|回复: 14

关于exti中断,设置KEY2按键未按下就直接跳到中断

[复制链接]
回帖奖励 3 火花 回复本帖可获得 3 火花奖励! 每人限 1 次
发表于 2020-7-15 07:26:57 | 显示全部楼层 |阅读模式
烧入程序后单片机绿灯亮(猜测是直接跳入了中断),找了好久不知道那个地方除了问题,希望能得到大佬们的指点。谢谢bsp_exti.c

野火论坛202007150721557698..png

野火论坛202007150723431019..png
it.c
野火论坛202007150724335533..png
main.c
野火论坛202007150725082994..png

回复

使用道具 举报

发表于 2020-7-15 09:19:59 | 显示全部楼层

回帖奖励 +3 火花

https://www.firebbs.cn/forum.php?mod=attachment&aid=MjcwNjl8NzMxM2U0ZjRhYWQ5NTg1MTJiZjQ1NGEyYThjMDQyZGV8MTczMjUyNTA3Ng%3D%3D&request=yes&_f=.png
有没有在GPIO初始化的时候把灯关掉?
野火论坛202007150919106556..png
回复 支持 反对

使用道具 举报

发表于 2020-7-15 11:58:03 | 显示全部楼层

回帖奖励 +3 火花

似乎GPIO的模式不对,应该是GPIO_Mode_IN_FLOATING,GPIO_Mode_AIN是模拟输入。怀疑上电进中断可以在线调试一下,进DEBUG,在中断函数里打断点然后全速运行,看看不碰按键的时候会不会停在断点的位置。
回复 支持 反对

使用道具 举报

发表于 2020-7-15 14:01:44 | 显示全部楼层

回帖奖励 +3 火花

中断源应该是EXTI_Line0,中断函数是EXTI0_IRQn
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-15 19:13:31 | 显示全部楼层
Wangwwd 发表于 2020-7-15 09:19
https://www.firebbs.cn/forum.php?mod=attachment&aid=MjcwNjl8NzMxM2U0ZjRhYWQ5NTg1MTJiZjQ1NGEyYThjMDQyZGV8MTczMjUyNTA3Ng%3D%3D&request=yes&_f=.png
有没有在GPIO初始化的时候把灯关掉?

谢谢,我看了以下在LED初始化的时候的确关闭了所有灯
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-15 19:17:59 | 显示全部楼层
瞎眼灯 发表于 2020-7-15 11:58
似乎GPIO的模式不对,应该是GPIO_Mode_IN_FLOATING,GPIO_Mode_AIN是模拟输入。怀疑上电进中断可以在线调试 ...

GPIO模式我改了过来还是不行,我没想到要用debug去设置断点,谢谢你给我提了一下。不碰按键烧入程序就直接跳到中断函数里面。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-15 19:20:53 | 显示全部楼层
还有梦与你 发表于 2020-7-15 14:01
中断源应该是EXTI_Line0,中断函数是EXTI0_IRQn

谢谢,我控制的是PC13设置的中断源应该是EXTI_Line13,中断函数EXTI0_IRQn,我这样理解应该没错吧?我也试了按照你说的办法来,还是一样的情况
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-15 19:29:06 | 显示全部楼层
下班回宿舍我发现我代码有错误修改了一下,结果还是一样。烧入程序没有碰按键就立马跳入中断函数中。
野火论坛202007151928126483..png
然后我把KEY1那部分可以实现中断的函数保留下来,去掉GPIO的初始化,PA0为什么还是可以检测我是否按下?

野火论坛202007151927216219..png


野火论坛202007151926446831..png
野火论坛202007151921455514..png
回复 支持 反对

使用道具 举报

发表于 2020-7-15 20:56:34 | 显示全部楼层

回帖奖励 +3 火花

是不是清除中断标志位的函数应该放在判断语句中?
野火论坛202007152055338124..png
回复 支持 反对

使用道具 举报

发表于 2020-7-15 20:59:38 | 显示全部楼层
点不着的火 发表于 2020-7-15 20:56
是不是清除中断标志位的函数应该放在判断语句中?

额 不对,与这个关系好像不大,怎么把火花返回给你呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-15 21:37:06 | 显示全部楼层
点不着的火 发表于 2020-7-15 20:59
额 不对,与这个关系好像不大,怎么把火花返回给你呢

没事,没事。
回复 支持 反对

使用道具 举报

发表于 2020-7-16 14:07:27 | 显示全部楼层
GWWWWW 发表于 2020-7-15 19:13
谢谢,我看了以下在LED初始化的时候的确关闭了所有灯

看微信群你好像搞出来了?怎么弄的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-17 07:42:02 | 显示全部楼层
Wangwwd 发表于 2020-7-16 14:07
看微信群你好像搞出来了?怎么弄的?

是的,我知道怎么会出现这种情况,但是找不到出现问题的实际原因。先挖个坑,后面再填上。问题主要发生再打开时钟这一步。再原来的程序中我先打开了GPIO时钟,在后面才打开AFIO时钟。
就是这个原因导致程序烧入时候直接进入中断。
野火论坛202007170735552099..png
后面我把打开AFIO的时钟也放到前面来就没有发生这样的情况。


我做个试验,前面先不写AFIO时钟,看看放在那个位置会导致这样的情况。
我发现放在我main函数的57行,程序烧入就会进入中断且不能出来。用debug也没看出是说明原因。
野火论坛202007170740208847..png

总结:AFIO时钟要在初始化GPIO之前打开
回复 支持 反对

使用道具 举报

发表于 2020-7-17 09:10:35 | 显示全部楼层
奥,这样啊,我编程喜欢把AFIO在GPIOInit那里一起打开了,如果很多的话,单拉一个rcc文件,把所有时钟都打开,然后main函数会先打开始终,再去初始化其他外设,所以没遇到过这样的问题,感谢科普,以后有bug就知道了
回复 支持 反对

使用道具 举报

发表于 2020-7-17 23:00:30 | 显示全部楼层

谢谢你,有在你这个帖子里学到(白嫖)些奇奇怪怪的知识,并且解决了自己之前遇到的问题!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 16:57 , Processed in 0.038975 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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