[STM32F0] PA6,PA7产生的EXTI在 Void EXTI9_5_IRQHandler(Void) 是怎么区分的呢

[复制链接]
13174|8
 楼主| huangfeng33 发表于 2014-11-26 10:37 | 显示全部楼层 |阅读模式
PA6产生的EXTI在 Void EXTI9_5_IRQHandler(Void) 是直接写在函数体里面就可以了。那如果是PA6,PA7产生的EXTI在 Void EXTI9_5_IRQHandler(Void) 是怎么区分的呢?该怎么写呢?
谢谢大家了、
lei129210 发表于 2014-11-26 11:54 | 显示全部楼层
在中断里面判断标志位
mmuuss586 发表于 2014-11-26 20:39 | 显示全部楼层
if(EXTI_GetITStatus(EXTI_Line6) != RESET)
if(EXTI_GetITStatus(EXTI_Line7) != RESET)
中断里如上判断即可
夕照 发表于 2015-4-21 20:22 | 显示全部楼层
ranqingfa 发表于 2016-3-14 14:21 | 显示全部楼层
mmuuss586 发表于 2014-11-26 20:39
if(EXTI_GetITStatus(EXTI_Line6) != RESET)
if(EXTI_GetITStatus(EXTI_Line7) != RESET)
中断里如上判断即 ...

这样貌似不行啊  貌似只有一个能用?
hugo0chen 发表于 2016-3-28 12:30 | 显示全部楼层
ranqingfa 发表于 2016-3-14 14:21
这样貌似不行啊  貌似只有一个能用?

解决了吗,我也是这样的问题,PB5、6、7,使用时,只有7可以使用
hugo0chen 发表于 2016-3-28 14:54 | 显示全部楼层
我的问题找到了,我使用的是stm32l151rct6,需要将PA15、PB5\6\7进行中断设置。

特别注意
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource5);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource6);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource7);
不能够合并成一句
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource5|EXTI_PinSource6|EXTI_PinSource7);
合并后只有7有效,原因可以按该库函数的定义。
在中断处理函数中,IRQHandler()中使用if(EXTI_GetITStatus(EXTI_Linex != RESET)  进行区分(x=5/6/7)
void EXTI9_5_IRQHandler(void)
{
  uint8_t data;
               
        if(EXTI_GetITStatus(EXTI_Line5) != RESET)  
  {         
                BOARD_LED_OFF(LED1);
                BOARD_LED_OFF(LED3);
                data='2';
                usart1_sendbyte(&data,1);
                EXTI_ClearITPendingBit(EXTI_Line5);    // Clear the EXTI line 5 pending bit   
  }
        if(EXTI_GetITStatus(EXTI_Line6) != RESET)  
  {         
                BOARD_LED_ON(LED1);
                BOARD_LED_OFF(LED3);
                data='3';
                usart1_sendbyte(&data,1);
               
                EXTI_ClearITPendingBit(EXTI_Line6);    // Clear the EXTI line 5 pending bit   
  }
        if(EXTI_GetITStatus(EXTI_Line7) != RESET)  
  {         
                BOARD_LED_OFF(LED1);
                BOARD_LED_ON(LED3);
                data='4';
                usart1_sendbyte(&data,1);
                EXTI_ClearITPendingBit(EXTI_Line7);    // Clear the EXTI line 5 pending bit   
  }
}
void BoardInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable GPIOs clock */        
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);

        //init GPIOA.13  ÉÏÀ­ÊäÈë Key_1
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
        // Connect Button EXTI Line to  GPIO Pin 15
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource15);
       
        EXTI_InitStructure.EXTI_Line = EXTI_Line15 ;  
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
       
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn ;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
        // exti9_5 pb5 pb6 pb7       
        GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource5);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource6);
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource7);
       
        EXTI_InitStructure.EXTI_Line = EXTI_Line5|EXTI_Line6|EXTI_Line7;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_Init(&EXTI_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn ;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
ranqingfa 发表于 2016-4-6 19:43 | 显示全部楼层
hugo0chen 发表于 2016-3-28 14:54
我的问题找到了,我使用的是stm32l151rct6,需要将PA15、PB5\6\7进行中断设置。

特别注意

谢谢,我后来也是这样的
wang1jie 发表于 2016-4-22 13:06 | 显示全部楼层
谢谢学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

506

主题

2446

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部