OpenEdv-开源电子网

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

stm32f103rct6最多能同时使用多少个外部中断?

[复制链接]

28

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2014-9-8
在线时间
23 小时
发表于 2014-12-3 21:25:09 | 显示全部楼层 |阅读模式
5金钱
在同一个板子上,stm32f103rct6最多可以连接使用多少个外部中断?EXTI0~4有独立的中断服务函数、EXTI5~9共用一个、EXTI10~14共用一个,那么怎么样使用尽可能多的外部中断,而且不会出现几个外部中断占用一个中断函数的情况呢?

最佳答案

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

7个,也就是0~4,5_9,10_15。 共7个中断服务函数。所以最多同时7个。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-3 21:25:10 | 显示全部楼层
7个,也就是0~4,5_9,10_15。
共7个中断服务函数。所以最多同时7个。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

6296

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11601
金钱
11601
注册时间
2014-4-1
在线时间
1326 小时
发表于 2014-12-3 21:41:27 | 显示全部楼层
即使公用一个中断函数,也可以区分开。没什么可怕的。
回复

使用道具 举报

28

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2014-9-8
在线时间
23 小时
 楼主| 发表于 2014-12-3 21:51:10 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
请问怎么区分?谢谢
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2014-12-3 21:52:08 | 显示全部楼层
具体情况具体分析啊,中断函数里面有标志位可以区分开是哪条线发生中断的
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

58

主题

6296

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11601
金钱
11601
注册时间
2014-4-1
在线时间
1326 小时
发表于 2014-12-3 21:57:07 | 显示全部楼层
如果占用同一个中断,那就查几个端口的输入电平,IDR 寄存器。
回复

使用道具 举报

28

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2014-9-8
在线时间
23 小时
 楼主| 发表于 2014-12-3 22:02:10 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
今天做了这样的实验 将PC6 C7 C8都连接一个按键作为外部中断输入端,结果出现这样的情况:按三个中的任意一个按键,都会进中断,但是进中断函数后  无法判断是哪个触发了中断,有时按PC6按键 结果程序跳进了if(EXTI_GetITStatus(EXTI_Line7) != RESET)这里 或者if(EXTI_GetITStatus(EXTI_Line8) != RESET)   请问这是什么问题?我的程序是不是哪里错了?  请有经验的大指点一下   谢谢
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);

   EXTI_InitStructure.EXTI_Line=EXTI_Line6|EXTI_Line7|EXTI_Line8;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);   //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键所在的外部中断通道
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, 
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
   NVIC_Init(&NVIC_InitStructure); 

 void EXTI9_5_IRQHandler(void)
{
/*
delay_ms(10);   //消抖  
if(KEY0==0) {
LED0=!LED0;
}
   EXTI_ClearITPendingBit(EXTI_Line5);    //清除LINE5上的中断标志位  
*/
  if(EXTI_GetITStatus(EXTI_Line6) != RESET)
  {
  
 EXTI_ClearFlag(EXTI_Line6);
     EXTI_ClearITPendingBit(EXTI_Line6);

  }
  if(EXTI_GetITStatus(EXTI_Line7) != RESET)
  {
  
    EXTI_ClearFlag(EXTI_Line7);
    EXTI_ClearITPendingBit(EXTI_Line7);

  }
  if(EXTI_GetITStatus(EXTI_Line8) != RESET)
  {
  
EXTI_ClearFlag(EXTI_Line8);
    EXTI_ClearITPendingBit(EXTI_Line8);

  }

}
回复

使用道具 举报

58

主题

6296

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11601
金钱
11601
注册时间
2014-4-1
在线时间
1326 小时
发表于 2014-12-3 22:24:52 | 显示全部楼层
难道是几个按键联动了?查一下。

另外,只留一个按钮的判断,其他 if 都屏蔽,试试。
回复

使用道具 举报

28

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2014-9-8
在线时间
23 小时
 楼主| 发表于 2014-12-3 22:47:34 | 显示全部楼层
回复【7楼】xuande:
---------------------------------
按键没有联动
只留一个按钮判断  其它if都屏蔽   也是这情况   比如我屏蔽了if(EXTI_GetITStatus(EXTI_Line7) != RESET) 和if(EXTI_GetITStatus(EXTI_Line8) != RESET)   留任何一个按键 按下后都触发了中断  并且进入if(EXTI_GetITStatus(EXTI_Line6) != RESET)
回复

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2013-4-27
在线时间
3 小时
发表于 2015-2-3 08:34:12 | 显示全部楼层
楼主问题是否解决?
平凡的有点不正常
回复

使用道具 举报

starwars 该用户已被删除
发表于 2017-1-15 16:40:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

12

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2017-2-21
在线时间
49 小时
发表于 2017-2-27 17:16:44 | 显示全部楼层
我也遇到了,照理说分别判断中断标志,不应该1个中断触发所有中断服务函数
有朋友能解决吗
回复

使用道具 举报

leeybin 该用户已被删除
发表于 2017-3-10 10:53:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-8-19
在线时间
13 小时
发表于 2017-6-2 16:48:36 | 显示全部楼层

STM32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能够再使用了,在此情况下,我们智能使用类似于PB1,PC2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0 – EXTI4这5个外部中断有着自己的单独的中断响应函数,EXTI5-9共用一个中断响应函数,EXTI10-15共用一个中断响应函数。
希望与更多的电子爱好者交朋友
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-18 15:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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