OpenEdv-开源电子网

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

大神们,外部中断服务函数,5以上怎么用?

[复制链接]

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
发表于 2015-4-7 22:36:38 | 显示全部楼层 |阅读模式
5金钱

比如说外部中断2的服务函数,很简单:
void EXTI2_IRQHandler(void)

{  

delay_ms(10); //消抖

       if(KEY2==0)   

       {  LED0=!LED0;

       }           

        EXTI_ClearITPendingBit(EXTI_Line2);//清除LINE2上的中断标志位

}

0~4的服务函数都很简单,他们都是独立的,直接往里写就行。但是到了5以上就变成公用函数,我就不太明白怎么用了。

大大们能不能举个例子,比如我想用外部中断5,这时候:
void EXTI9_5_IRQHandler(void)
{    }
这时候里面怎么写?

最佳答案

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

里面可以这样写    if((EXTI->R & 0x20)==0x20)  //说明中断线5发生了中断     {   //中断内容 } EXTI->R|=1<<5;//清除中断挂起
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5769
金钱
5769
注册时间
2013-11-22
在线时间
1210 小时
发表于 2015-4-7 22:36:39 | 显示全部楼层
里面可以这样写  
 if((EXTI->R & 0x20)==0x20)  //说明中断线5发生了中断    
{
  //中断内容
}
EXTI->R|=1<<5;//清除中断挂起
回复

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
 楼主| 发表于 2015-4-7 22:45:27 | 显示全部楼层
大神们,我顺道问一下,首先这个帖子里讲了,F4的引脚和中断线是对应的:http://www.openedv.com/posts/list/43327.htm

也就是说,F4探索者的开发板上,独立按键分别是PA^0、PE^2/3/4,所以他们就只能对应中断0、2、3、4,没法对应其他的,对吧?也没法做中断1,以及中断5~15的实验?

我这么理解没错吧?

当然了,我还是很好奇0~15的服务函数,里面怎么写…………
回复

使用道具 举报

5

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-10-28
在线时间
14 小时
发表于 2015-4-7 22:55:36 | 显示全部楼层
后面的是复用的一个中断函数,所以进去了就自己判断啊
如果5-9 你本来就只打开了中断5你就直接操作不用管了
如果你开了5 6 你就自己去调用函数检查是5 触发还是6触发
成功必然有成功的原因,
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5769
金钱
5769
注册时间
2013-11-22
在线时间
1210 小时
发表于 2015-4-7 23:01:36 | 显示全部楼层
直接读取EXTI_PR,判断哪条中断线发生了中断
回复

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
 楼主| 发表于 2015-4-7 23:07:07 | 显示全部楼层
回复【3楼】simplelifeNick:
---------------------------------
三个问题哈大大:

1.是不是如果我是用了PA^0作为外部中断,那么PB^0/PC^0等这时候就不能设为外部中断了,因为他们用的是一条中断线?

2.如果我现在按下PA^0作为中断,那么调用的中断服务函数就只能是void EXTI0_IRQHandler(void),在void EXTIX_Init(void)里面做初始化也只能初始化0,其他的都不管用?

3.判断复用函数实验里没见到哦,亲你是在哪看的?
回复

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
 楼主| 发表于 2015-4-7 23:13:17 | 显示全部楼层
回复【4楼】lycreturn:
---------------------------------
这么说太模糊了呀大神~~

比如我现在用的就是PA^5做中断,
void EXTI9_5_IRQHandler(void)
{    }
里面怎么写呢?菜鸟真心求教~~~
回复

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
 楼主| 发表于 2015-4-8 10:37:24 | 显示全部楼层
回复【7楼】lycreturn:
---------------------------------
赞美大神!!一下子就懂了~~~~

大神我在2楼、4楼对外部中断的理解正确吗?菜鸟想确认一下…………不然不安心…………
回复

使用道具 举报

5

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-10-28
在线时间
14 小时
发表于 2015-4-8 13:15:42 | 显示全部楼层
1.是不是如果我是用了PA^0作为外部中断,那么PB^0/PC^0等这时候就不能设为外部中断了,因为他们用的是一条中断线? 
这个和后面复用的原理一样的,PA0 B0都卡的话会进同一个中断线,中断函数里面自己去判断是哪一个

2.如果我现在按下PA^0作为中断,那么调用的中断服务函数就只能是void EXTI0_IRQHandler(void),在void EXTIX_Init(void)里面做初始化也只能初始化0,其他的都不管用? 
你没有开其他的中断,那自然是不会进入的,可以看下C51的微机原理,从电路上知道中断时怎么来和唤醒的

3.判断复用函数实验里没见到哦,亲你是在哪看的?
这个我用的库函数,不用库函数就直接去看寄存器,你可以看库函数的h文件啊,接口都在里面,原子的手册不可能把每个都讲到,不然累死了,再说自己也要培养学习的能力
成功必然有成功的原因,
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5769
金钱
5769
注册时间
2013-11-22
在线时间
1210 小时
发表于 2015-4-8 22:41:39 | 显示全部楼层
回复【8楼】kittyhoney:
---------------------------------
1.同一条中断线,只能用一个
2.中断函数在启动文件里配置好了,每个中断和中断函数都是对应的
3.至于何如复用,可以stm32看参考书册   第九章  中断和事件
回复

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-1-27
在线时间
0 小时
 楼主| 发表于 2015-4-9 16:02:53 | 显示全部楼层
回复【10楼】lycreturn:
---------------------------------
嗯,谢谢大大,我面包板上搭了个电路试了下,确实一条中断线上只能有一个响应。如果有多个中断指向同一个中断服务函数,只有最后一个起效,之前的就被覆盖了。
回复

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2015-4-22
在线时间
16 小时
发表于 2015-5-7 16:00:51 | 显示全部楼层
回复【7楼】lycreturn:
---------------------------------
 if((EXTI->R & 0x20)==0x20)  //说明中断线5发生了中断     

  //中断内容 

 if((EXTI->R & 0x20)==0x40)  //说明中断线6发生了中断      
{  
  //中断内容  

 if((EXTI->R & 0x20)==0x80)  //说明中断线7发生了中断      
{  
  //中断内容  

EXTI->R|=1<<5;//清除中断挂起
EXTI->R|=1<<6;//清除中断挂起
EXTI->R|=1<<7;//清除中断挂起

这个里面要是几个呢?比如有PA5/PA6/PA7如上。是不是只要随便有一个中断进来了,就得把这5、6、7的所有中断清除中断挂起呀?这样岂不是5、6、7都不能同时产生?
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5769
金钱
5769
注册时间
2013-11-22
在线时间
1210 小时
发表于 2015-5-7 16:31:10 | 显示全部楼层
回复【12楼】xiaojianjian:
---------------------------------
可以全部清除,也可以只清除发生中断线的中断挂起,这个几个同时开启,每次只能响应一个
回复

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2015-4-22
在线时间
16 小时
发表于 2015-5-7 16:36:05 | 显示全部楼层
回复【13楼】lycreturn:
---------------------------------
那我像11楼那样写那三个,正确吗?
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5769
金钱
5769
注册时间
2013-11-22
在线时间
1210 小时
发表于 2015-5-7 16:39:37 | 显示全部楼层
回复【14楼】xiaojianjian:
---------------------------------
 if((EXTI->R & 0x20)==0x40)  //说明中断线6发生了中断   
if((EXTI->R & 0x20)==0x80)  //说明中断线7发生了中断 
这2个有点问题   没改完
 if(EXTI->R & 0x40) 
 if(EXTI->R & 0x80)
回复

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2015-4-22
在线时间
16 小时
发表于 2015-5-8 10:42:16 | 显示全部楼层
回复【15楼】lycreturn:
---------------------------------
 if((EXTI->R & 0x20)==0x20)  //说明中断线5发生了中断      
{  
  //中断内容  
}  
 if((EXTI->R & 0x40)==0x40)  //说明中断线6发生了中断      
{  
  //中断内容  

 if((EXTI->R & 0x80)==0x80)  //说明中断线7发生了中断      
{  
  //中断内容  

EXTI->R|=1<<5;//清除中断挂起 
EXTI->R|=1<<6;//清除中断挂起 
EXTI->R|=1<<7;//清除中断挂起

这样子对了
回复

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2015-4-22
在线时间
16 小时
发表于 2015-5-11 11:43:54 | 显示全部楼层
回复【15楼】lycreturn:
---------------------------------
哥,我想请教下,想做<1K的脉冲计数器,软件里面用计数器做好,还是用中断做好呢?像迷你板这种芯片一般可以做几路呢?
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5769
金钱
5769
注册时间
2013-11-22
在线时间
1210 小时
发表于 2015-5-11 11:54:48 | 显示全部楼层
回复【17楼】xiaojianjian:
---------------------------------
都可以,用定时器的话,mini板  4个定时器  一个定时器4路  理论上可以搞16路
回复

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2015-4-22
在线时间
16 小时
发表于 2015-5-11 22:23:18 | 显示全部楼层
回复【18楼】lycreturn:
---------------------------------
想问下,为什么是16路呢?还有像用定时器和中断哪个好呢?用中断的话可以带多少路呢?
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5769
金钱
5769
注册时间
2013-11-22
在线时间
1210 小时
发表于 2015-5-11 22:24:55 | 显示全部楼层
回复【19楼】xiaojianjian:
---------------------------------
中断用IO口  0~15最多也只有16路
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 11:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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