为什么我的中断程序就是进不去呢?我对照原子发的样板《外部中断实验》和视频好几遍,怎么也找不到问题。希望能帮我解决一下。
在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上的中断标志位
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>