为什么我的EXTI4_IRQHandler这个中断进不去呢

2019-08-17 04:24发布

为什么我的中断程序就是进不去呢?我对照原子发的样板《外部中断实验》和视频好几遍,怎么也找不到问题。希望能帮我解决一下。
在main函数中我也设置了中断分组。

int main(void)
{       
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
   
   LedInit();
   KeyInterrupt_Init();
   
   LED0=0;
   while(1);      
}


下面是KEY0的中断设置
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "KeyInterrupt.h"

void KeyInterrupt_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStr;
   EXTI_InitTypeDef EXTI_InitStr;
   NVIC_InitTypeDef NVIC_InitStr;
   
   //        ① 按键PE端口初始化
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能PORTE时钟
   GPIO_InitStr.GPIO_Mode=GPIO_Mode_IPU;                                 //上拉输入
   GPIO_InitStr.GPIO_Pin= GPIO_Pin_4;                                               //PE4(key0)
   //GPIO_InitStr.GPIO_Speed=GPIO_Speed_50MHz;
   GPIO_Init(GPIOE,&GPIO_InitStr);
   
   //② 开启IO口复用时钟,这个是中断设置必须要的
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
   
   //③ 设置IO口与中断线的映射关系
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
   
   //④ GPIOE.4          中断线以及中断初始化配置  下降沿触发        //KEY0
   EXTI_InitStr.EXTI_Line=EXTI_Line4;                              //PE4对应中断线4         
   EXTI_InitStr.EXTI_Mode=EXTI_Mode_Interrupt;       //中断模式是event or interrupt
   EXTI_InitStr.EXTI_Trigger=EXTI_Trigger_Falling;      //下降沿触发中断
   EXTI_InitStr.EXTI_LineCmd=ENABLE;                          //中断线使能
   EXTI_Init(&EXTI_InitStr);
   
   //⑤ 配置中断分组 针对中断设置抢占优先级和响应优先级
   NVIC_InitStr.NVIC_IRQChannel=EXTI4_IRQn;                     //使能按键KEY0所在的外部中断通道
   NVIC_InitStr.NVIC_IRQChannelPreemptionPriority=2;    //抢占优先级2
   NVIC_InitStr.NVIC_IRQChannelSubPriority=2;                  //子优先级2
   NVIC_InitStr.NVIC_IRQChannelCmd=ENABLE;
   NVIC_Init(&NVIC_InitStr);
}

   //⑥ 写当前中断处理程序
void EXTI4_IRQHandler(void)
{
   delay_ms(10);      //消抖
        if(KEY0==0)          //按键KEY0
        {
                LED0=!LED0;
        }       

   //⑦ 手动清除中断标志位   
        EXTI_ClearITPendingBit(EXTI_Line4);  //清除LINE4上的中断标志位  
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
halsl
1楼-- · 2019-08-17 05:17
终于找到原因了,原来是delay_init()没有在主函数中定义。
FantaSy_
2楼-- · 2019-08-17 10:44
 精彩回答 2  元偷偷看……

一周热门 更多>