野火电子论坛

 找回密码
 注册

扫一扫,访问微社区

查看: 27|回复: 1

[F1-霸道] EXTI中断KEY1正常,KEY2不正常,请帮忙看一下是程序哪里有问题?

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式
/*bsp_exti.c文件*/
#include "bsp_exti.h"
static void EXIT_NVIC_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStruct;

   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
   
   NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;
   NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
   NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
   NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
   NVIC_Init(&NVIC_InitStruct);
   
   NVIC_InitStruct.NVIC_IRQChannel=EXTI15_10_IRQn;
   NVIC_Init(&NVIC_InitStruct);
}
void EXIT_Key_Config(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;

   /*配置中断优先级*/
   EXIT_NVIC_Config();
   
   /*初始化KEY1要连接到EXTI的GPIO*/
   RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE);
  
   GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;
  
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   
   
   GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);
    /*初始化KEY2要连接到EXTI的GPIO*/
   RCC_APB2PeriphClockCmd(KEY2_INT_GPIO_CLK,ENABLE);
   
   GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;
  
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
  
  GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure);
   
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  EXTI_InitStructure.EXTI_Line=EXTI_Line0;
   EXTI_InitStructure.EXTI_LineCmd=ENABLE;
   EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
  
  EXTI_Init(&EXTI_InitStructure);

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
   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);
}
/*bsp_exti.h文件*/
#ifndef _BSP_EXTI_H
#define _BSP_EXTI_H
#include "stm32f10x.h"
/*KEY1有关的接口宏定义*/
#define KEY1_INT_GPIO_PORT     GPIOA                 
#define KEY1_INT_GPIO_CLK      RCC_APB2Periph_GPIOA  
#define KEY1_INT_GPIO_PIN      GPIO_Pin_0         

#define KEY2_INT_GPIO_PORT     GPIOC               
#define KEY2_INT_GPIO_CLK      RCC_APB2Periph_GPIOC  
#define KEY2_INT_GPIO_PIN      GPIO_Pin_13         
void EXIT_Key_Config(void);
#endif /* _BSP_EXTI_H*/
/*stm32F10x_it.c文件*/
void SysTick_Handler(void)
{
}

void EXTI0_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
  {
         LED1_TOGGLE;
  
  }
  EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI15_10_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line13)!=RESET)
  {
        LED2_TOGGLE;
  
  }
  EXTI_ClearITPendingBit(EXTI_Line13);
}

程序运行KEY1正常,KEY2无响应,请问是为什么?


回复

使用道具 举报

发表于 3 天前 | 显示全部楼层
NVIC_InitStruct.NVIC_IRQChannel=EXTI15_10_IRQn;
这句之后,少了一句使能。
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;

这样才会让NVIC里的ISER[]数组的对应位使能。
回复 支持 反对

使用道具 举报

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

本版积分规则

野火电子公众号

手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 大学生ARM嵌入式2群

GMT+8, 2020-3-29 02:00 , Processed in 0.123102 second(s), 29 queries , Gzip On.

野火电子论坛

© 2014-2016 www.firebbs.cn

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