OpenEdv-开源电子网

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

外部中断处理函数会不会出现不够用的情况?

[复制链接]

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-18
在线时间
11 小时
发表于 2019-9-21 10:01:14 | 显示全部楼层 |阅读模式
1金钱
比如我使用GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2)语句,使得GPIOE.2 与 EXTI2 中断线连接了,这样当GPIOE.2有激励触发时,就会转到中断处理函数EXTI2_IRQHandler;这是没有问题的。但是如果我又使用GPIO_EXTILineConfig函数,使得GPIOA.2与EXTI2中断线连接,这样不管是GPIOE.2还是GPIOA.2收到触发,都会转到EXTI2_IRQHandler函数,那这不就出现矛盾了吗?万一我所想的GPIOE.2收到触发时所要处理的函数与GPIOA.2所要处理的函数不一样,我该怎么解决?

最佳答案

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

同一个中短线,后配置的有效,前面的被覆盖
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-9-21 10:01:15 | 显示全部楼层
同一个中短线,后配置的有效,前面的被覆盖
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-18
在线时间
11 小时
 楼主| 发表于 2019-9-21 10:04:13 | 显示全部楼层
我自己所考虑的一种解决方法是在中断处理函数中设置标志位,检查到底是GPIOE.2触发还是GPIOA.2触发,从而转入不同的处理语句中。不知道还有没有其它方法
回复

使用道具 举报

6

主题

412

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2718
金钱
2718
注册时间
2019-8-14
在线时间
415 小时
发表于 2019-9-21 12:15:44 | 显示全部楼层
不会不够用的,中断发生后就会调用中断处理函数,外部io口会调用相应的中断处理函数,在中断处理函数里面设置判断语句不就可以选择不同的io口处理不同的语句了吗。执行的语句就可以分析触发的是那一个了呀
臭妹妹,冲冲冲
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-18
在线时间
11 小时
 楼主| 发表于 2019-9-24 15:42:41 | 显示全部楼层
EVahl 发表于 2019-9-21 12:15
不会不够用的,中断发生后就会调用中断处理函数,外部io口会调用相应的中断处理函数,在中断处理函数里面设 ...

你这个思想就和我想的一样,就是在中断处理函数里设置判断语句,条件执行相应的IO口对应的中断处理功能
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-18
在线时间
11 小时
 楼主| 发表于 2019-9-24 15:46:29 | 显示全部楼层
nashui_sx 发表于 2019-9-21 10:01
同一个中短线,后配置的有效,前面的被覆盖

也就是是,如果先设置了GPIOE.2的中断,再配置GPIOA.2的中断,那GPIOE.2的配置就被覆盖,换句话说,就是GPIOE.2收到触发时,不会触发中断处理函数EXTI2_IRQHandler是吗?这不对吧。。。手册里没提到过啊
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-9-24 17:37:40 | 显示全部楼层
本帖最后由 nashui_sx 于 2019-9-24 17:39 编辑
密码很简单 发表于 2019-9-24 15:46
也就是是,如果先设置了GPIOE.2的中断,再配置GPIOA.2的中断,那GPIOE.2的配置就被覆盖,换句话说,就是G ...

是的 手册有说 你没注意吧
A B C D E F G
0-15 中断线理解成16个单刀7掷开关就好了
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-18
在线时间
11 小时
 楼主| 发表于 2019-9-28 15:28:50 | 显示全部楼层
nashui_sx 发表于 2019-9-24 17:37
是的 手册有说 你没注意吧
A B C D E F G
0-15 中断线理解成16个单刀7掷开关就好了

那如果遇到同时需要配置GPIOA.2和GPIOE.2的情况怎么办?
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-9-28 16:31:00 | 显示全部楼层
密码很简单 发表于 2019-9-28 15:28
那如果遇到同时需要配置GPIOA.2和GPIOE.2的情况怎么办?

你就不该有这想法,又想上课又想宿舍睡觉
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-18
在线时间
11 小时
 楼主| 发表于 2019-9-29 12:27:00 | 显示全部楼层
nashui_sx 发表于 2019-9-28 16:31
你就不该有这想法,又想上课又想宿舍睡觉

我亲手验证了一下,原来中断真的会覆盖,验证过程如下:
设置PA1与PB1为普通IO口上拉输入,当检测到下降沿的时候,如果是A1下降沿触发,则LED0亮;如果检测到下降沿是B1触发的,那么LED1亮。中断配置B1在A1之后。结果当我手动将PA1用杜邦线接地产生下降沿的时候,我发现LED0并没有亮,而在将PB1用杜邦线接地产生下降沿的时候,我发现LED1却亮了。然后我调换了中断配置的顺序,A1配置在B1之后,这样就是A1亮,而B1不亮。具体代码如下
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-18
在线时间
11 小时
 楼主| 发表于 2019-9-29 12:27:37 | 显示全部楼层
        RCC->APB2ENR|=1<<2;
        RCC->APB2ENR|=1<<3;
        GPIOA->CRL&=0XFFFFFFF0F;
        GPIOA->CRL|=0X000000080;
        GPIOB->CRL&=0XFFFFFFF0F;
        GPIOB->CRL|=0X000000080;
        GPIOA->ODR|=1<<1;
        GPIOB->ODR|=1<<1;
       
       
        LED1 = 1;
        LED0 = 1;
       
        Stm32_Clock_Init(9);
        delay_init(72);
        EXTI_Init();
        LED_Init();
        while(1);







void  EXTI1_IRQHandler(void)
{
delay_ms(10); //消抖
if((GPIOA->IDR | 0XFFFD) == 0XFFFD)
{
        LED0 = !LED0;
}
if((GPIOB->IDR & 0XFFFD) == 0XFFFD)
{
         LED1 = !LED1;
}
EXTI->PR = 1<<0;
}


void EXTI_Init()
{
Ex_NVIC_Config(GPIO_B,1,FTIR);
Ex_NVIC_Config(GPIO_A,1,FTIR);

       
MY_NVIC_Init(2,2,EXTI1_IRQn,2);
}
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-18
在线时间
11 小时
 楼主| 发表于 2019-9-29 12:40:14 | 显示全部楼层
EVahl 发表于 2019-9-21 12:15
不会不够用的,中断发生后就会调用中断处理函数,外部io口会调用相应的中断处理函数,在中断处理函数里面设 ...

事实证明,会覆盖
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-9-29 16:05:45 | 显示全部楼层

哪里用到事实证明,手册说这么明白
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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