OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6770|回复: 9

EXTI15_10_IRQHandler

[复制链接]

13

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2013-1-4
在线时间
1 小时
发表于 2015-9-2 21:24:53 | 显示全部楼层 |阅读模式
5金钱

使用EXTI15_10_IRQHandler这个中断, 中断经常误入。。。

IO 连的是触摸键盘的接口。是由于IO上的干扰吗?



IO的初始化如下。。

 GPIOB->CRH&=0XF000FFFF;//PB12, 13,14设置成输入 for keyboard input
 GPIOB->CRH|=0X08880000;
 GPIOB->ODR|=1<<12;    //PB12上拉
 GPIOB->ODR|=1<<13;    //PB13上拉
 GPIOB->ODR|=1<<14;    //PB14上拉

最佳答案

查看完整内容[请看2#楼]

回复【7楼】正点原子: --------------------------------- 谢谢各位老大提示。。。 用的是EXTI15_10_IRQ 的中断, io中断源是PB11-15, 仔细查了一下, 发现PA15上有串入干扰导致误触发。 想求教一下,可以单独屏蔽这个IO的信号使之不作为中断源吗?这个IO有用, 但只是信号检测,不列入中断触发。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2013-1-4
在线时间
1 小时
 楼主| 发表于 2015-9-2 21:24:54 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
谢谢各位老大提示。。。
用的是EXTI15_10_IRQ 的中断, io中断源是PB11-15, 仔细查了一下, 发现PA15上有串入干扰导致误触发。
想求教一下,可以单独屏蔽这个IO的信号使之不作为中断源吗?这个IO有用, 但只是信号检测,不列入中断触发。
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2015-6-2
在线时间
4 小时
发表于 2015-9-2 22:14:03 | 显示全部楼层
误入是指在没有按下按键就会进入中断呢,还是指按一下按键会多次进入中断?
回复

使用道具 举报

13

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2013-1-4
在线时间
1 小时
 楼主| 发表于 2015-9-2 22:41:53 | 显示全部楼层
回复【2楼】yangzhen86:
---------------------------------
没按键,误入中断。。。
谢谢
回复

使用道具 举报

10

主题

81

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1502
金钱
1502
注册时间
2013-8-28
在线时间
28 小时
发表于 2015-9-3 09:11:43 | 显示全部楼层
回复【2楼】yangzhen86:
---------------------------------
按键消抖了吗
STM32软硬件相关项目外包开发 QQ:83029775
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-9-4 09:44:57 | 显示全部楼层
你的程序里是不是有其他的管脚也配置成中断了呀。
void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line10)) {
EXTI_ClearITPendingBit(EXTI_Line10);
}
if (EXTI_GetITStatus(EXTI_Line11)) {
EXTI_ClearITPendingBit(EXTI_Line11);
}
if (EXTI_GetITStatus(EXTI_Line12)) {
EXTI_ClearITPendingBit(EXTI_Line12);
}
if (EXTI_GetITStatus(EXTI_Line13)) {
EXTI_ClearITPendingBit(EXTI_Line13);
}
if (EXTI_GetITStatus(EXTI_Line14)) {
EXTI_ClearITPendingBit(EXTI_Line14);
}
if (EXTI_GetITStatus(EXTI_Line15)) {
EXTI_ClearITPendingBit(EXTI_Line15);
user_kk++;
}
}
还有就是管脚要启用复用,关闭jtag和swd功能。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2014-11-25
在线时间
0 小时
发表于 2015-9-4 16:47:54 | 显示全部楼层
可以进入中断后先判断中断源,再执行相应程序,前提是不能同一映射。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-9-4 22:06:24 | 显示全部楼层
估计是被外设干扰了,搞个示波器,看看IO上面的波形吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-9-13 23:11:57 | 显示全部楼层
回复【8楼】Jack:
---------------------------------
当然可以
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-12-3
在线时间
0 小时
发表于 2019-12-3 16:02:45 | 显示全部楼层
增加一个if 试试。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{

  if (GPIO_Pin == GPIO_PIN_13)
  {
                        /* Toggle LED2 */
                BSP_LED_Toggle(LED2);
  }
       
}
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 03:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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