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

2019-08-17 09:50发布

在同一个板子上,stm32f103rct6最多可以连接使用多少个外部中断?EXTI0~4有独立的中断服务函数、EXTI5~9共用一个、EXTI10~14共用一个,那么怎么样使用尽可能多的外部中断,而且不会出现几个外部中断占用一个中断函数的情况呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
正点原子
1楼-- · 2019-08-17 12:26
7个,也就是0~4,5_9,10_15。
共7个中断服务函数。所以最多同时7个。
xuande
2楼-- · 2019-08-17 14:20
即使公用一个中断函数,也可以区分开。没什么可怕的。
zhu2006
3楼-- · 2019-08-17 20:03
 精彩回答 2  元偷偷看……
小温
4楼-- · 2019-08-17 23:52
具体情况具体分析啊,中断函数里面有标志位可以区分开是哪条线发生中断的
xuande
5楼-- · 2019-08-18 00:53
如果占用同一个中断,那就查几个端口的输入电平,IDR 寄存器。
zhu2006
6楼-- · 2019-08-18 04:47
回复【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);

  }

}

一周热门 更多>