打印
[STM32F0]

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

[复制链接]
12690|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 | 只看该作者

使用特权

评论回复
5
ranqingfa| | 2016-3-14 14:21 | 只看该作者
mmuuss586 发表于 2014-11-26 20:39
if(EXTI_GetITStatus(EXTI_Line6) != RESET)
if(EXTI_GetITStatus(EXTI_Line7) != RESET)
中断里如上判断即 ...

这样貌似不行啊  貌似只有一个能用?

使用特权

评论回复
6
hugo0chen| | 2016-3-28 12:30 | 只看该作者
ranqingfa 发表于 2016-3-14 14:21
这样貌似不行啊  貌似只有一个能用?

解决了吗,我也是这样的问题,PB5、6、7,使用时,只有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);
}

使用特权

评论回复
8
ranqingfa| | 2016-4-6 19:43 | 只看该作者
hugo0chen 发表于 2016-3-28 14:54
我的问题找到了,我使用的是stm32l151rct6,需要将PA15、PB5\6\7进行中断设置。

特别注意

谢谢,我后来也是这样的

使用特权

评论回复
9
wang1jie| | 2016-4-22 13:06 | 只看该作者
谢谢学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

506

主题

2446

帖子

8

粉丝