硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3950|回复: 1
收起左侧

[MDK] 外部IO中断问题

[复制链接]

4

主题

19

回帖

31

积分

新手上路

积分
31
QQ
发表于 2016-3-10 23:36:45 | 显示全部楼层 |阅读模式
static void EXTI_Config(void)
{
    /* 配置PI8 -K1 键- 外部中断 */
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;    /* 中断优先级 */
        
        /* 使能 GPIO 时钟 */
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI, ENABLE);
        /* Enable SYSCFG clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
        
        /* Configure PI8 pin as input floating */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;            /* 引脚号 */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;        /* 引脚输入/输出模式 */
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;    /*  */
        GPIO_Init(GPIOI, &GPIO_InitStructure);


         /* Connect EXTI Line8 to PI8 pin */
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOI, EXTI_PinSource8);


        /* Configure EXTI8 line */
        EXTI_InitStructure.EXTI_Line = EXTI_Line8;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;      /* 上升沿触发 */
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);


        /* Enable and set EXTI8 Interrupt to the lowest priority */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    }
   
    /* 配置 PC13 -K2 键- 外部中断 */
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        /* 使能 GPIO 时钟 */
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);


        /* 配置 PC13 为输入浮空模式 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOC, &GPIO_InitStructure);


        /* Connect EXTI13 Line to PA.00 pin */
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13);
        
        /* Configure EXTI13 line */
        EXTI_InitStructure.EXTI_Line = EXTI_Line13;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;      /* 上升沿触发 */
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);


        /* Enable and set EXTI13 Interrupt to the lowest priority */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    }


    /* 配置 PH4 -K3 键- 外部中断 */
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;            
        
        /* 使能 GPIO 时钟 */
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH, ENABLE);
        
        /* 配置 PH4 为输入浮空模式 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOH, &GPIO_InitStructure);


        /* Connect EXTI4 Line to PH4 pin */
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOH, EXTI_PinSource4);
        
        /* Configure EXTI4 line */
        EXTI_InitStructure.EXTI_Line = EXTI_Line4;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;      /* 上升沿触发 */
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);


        /* Enable and set EXTI4 Interrupt to the lowest priority */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    }


    /* 配置PH15 -摇杆OK键- 外部中断 */
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;            
        
        /* 使能 GPIO 时钟 */
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH, ENABLE);
        
        /* 配置 PH15 为输入浮空模式 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOH, &GPIO_InitStructure);


        /* Connect EXTI15 Line to PH15 pin */
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOH, EXTI_PinSource15);
        
        /* Configure EXTI15 line */
        EXTI_InitStructure.EXTI_Line = EXTI_Line15;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        //EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;      /* 下降沿触发 */
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;      /* 上升沿触发 */
        //EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;        /* 上升沿/下降沿触发 */
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);


        /* Enable and set EXTI15 Interrupt to the lowest priority */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    }
}

/* 中断服务程序 */
void EXTI15_10_IRQHandler(void)
{
   /* PC13, K2按键按下 */
   if (EXTI_GetITStatus(EXTI_Line13) != RESET)
   {
      bsp_LedToggle(2);
      
      EXTI_ClearITPendingBit(EXTI_Line13);
      
      printf(&quotC13 中断,K2按键按下!\r\n");
   }
   //else
      
   /* PH15,摇杆OK键按下 */
   if (EXTI_GetITStatus(EXTI_Line15) != RESET)
   {
      bsp_LedToggle(4);
      
      EXTI_ClearITPendingBit(EXTI_Line15);
      
      printf(&quotH15 中断,摇杆OK键按下!\r\n");
   }
   
}





K1  K2  K3按键按下后是能产生中断的,但是按了OK键后中断程序没有反应的,  谁能帮我看下是什么问题呢,谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2016-3-11 01:09:22 | 显示全部楼层
但看配置,应该没问题的。

另外楼主用的是那个板子,我们的V5板子的K3按键是PI11.
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-15 16:13 , Processed in 0.437886 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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