野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10530|回复: 3

关于外部中断的问题

[复制链接]
发表于 2020-1-20 10:39:18 | 显示全部楼层 |阅读模式
火哥你好以下代码是我买了你们的开发板的关于外部中断的程序#include "bsp_exti.h"
/**
  * @brief  配置嵌套向量中断控制器NVIC
  * @param  无
  * @retval 无
  */
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* 配置NVIC为优先级组1 */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  /* 配置中断源:按键1 */
  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;
  /* 配置抢占优先级 */
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* 配置子优先级 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  /* 使能中断通道 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  /* 配置中断源:按键2,其他使用上面相关配置 */  
  NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;
  NVIC_Init(&NVIC_InitStructure);
}

/**
  * @brief  配置 IO为EXTI中断口,并设置中断优先级
  * @param  无
  * @retval 无
  */
void EXTI_Key_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;

        /*开启按键GPIO口的时钟*/
        RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE);
                                                                                               
        /* 配置 NVIC 中断*/
        NVIC_Configuration();
       
/*--------------------------KEY1配置-----------------------------*/
        /* 选择按键用到的GPIO */       
  GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;
  /* 配置为浮空输入 */       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);

        /* 选择EXTI的信号源 */
  GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE);
  EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;
       
        /* EXTI为中断模式 */
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        /* 上升沿中断 */
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  /* 使能中断 */       
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
       
  /*--------------------------KEY2配置-----------------------------*/
        /* 选择按键用到的GPIO */       
  GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;
  /* 配置为浮空输入 */       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure);

        /* 选择EXTI的信号源 */
  GPIO_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE);
  EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE;
       
        /* EXTI为中断模式 */
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        /* 下降沿中断 */
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  /* 使能中断 */       
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}
/*********************************************END OF FILE**********************/
现在有几个问题,第一为什么key1的时钟开通了,没找到key2时钟开通但是key2依然能检测到中断,按键按下led还是会翻转,第二就是我把key1的时钟开启语句屏蔽掉但是key2不能中断了key1却还可以中断,请火哥帮我看看这个时钟的问题



回复

使用道具 举报

发表于 2020-1-21 15:35:43 | 显示全部楼层
之前也发现这个比较神奇,先按正确的流程来吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-22 20:04:58 | 显示全部楼层
WishWish 发表于 2020-1-21 15:35
之前也发现这个比较神奇,先按正确的流程来吧

好的,那个key2的时钟还是开一下好些吧
回复 支持 反对

使用道具 举报

发表于 2020-2-1 23:03:13 | 显示全部楼层
我也发现这个问题了,在ExTI章节中,教程里源码里好像没有开通AFIO时钟,而视频中的源码里开通了,我测试了一下,开通AFIO时钟肯定俩KEY都没问题,不开AFIO只有一个可以,另一个不起作用。我也搞不清为啥,所以,还是都开通一下吧。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 04:26 , Processed in 0.043306 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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