初级会员

- 积分
- 71
- 金钱
- 71
- 注册时间
- 2020-7-14
- 在线时间
- 19 小时
|
关于外部中断的问题,请大佬指教一下。
void EXTIX_Init(void)
{
EXTI_InitTypeDef EXTI_InitSturcture;
NVIC_InitTypeDef NVIC_InitSturcture;
KEY_Init();//°´¼ü³õʼ»¯
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//¿ªÆôAFIOʱÖÓ
//GPIOE.2ÖжÏÏßÒÔ¼°Öжϳõʼ»¯ÅäÖã¬Ï½µÑØ´¥·¢
//ÉèÖÃÖжÏÏß2
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);//3
EXTI_InitSturcture.EXTI_Line=EXTI_Line2;//ÉèÖÃÖжÏÏßΪÏß2
EXTI_InitSturcture.EXTI_Mode=EXTI_Mode_Interrupt;//ÉèÖô¥·¢Ä£Ê½ÎªÖжÏ
EXTI_InitSturcture.EXTI_Trigger=EXTI_Trigger_Falling;//ϽµÑØ´¥·¢
EXTI_InitSturcture.EXTI_LineCmd=ENABLE;//ʹÄÜÖжÏÏß
EXTI_Init(&EXTI_InitSturcture);//³õʼ»¯ÖжÏÏß²ÎÊý
NVIC_InitSturcture.NVIC_IRQChannel=EXTI2_IRQn;//ʹÄܰ´¼üÍⲿÖжÏͨµÀ
NVIC_InitSturcture.NVIC_IRQChannelCmd=0;//ÇÀÕ¼ÓÅÏȼ¶Îª0
NVIC_InitSturcture.NVIC_IRQChannelPreemptionPriority=1;//ÇÀÕ¼×ÓÓÅÏȼ¶Îª2
NVIC_InitSturcture.NVIC_IRQChannelSubPriority=ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
NVIC_Init(&NVIC_InitSturcture);//³õʼ»¯NVIC
//ÉèÖÃÖжÏÏß3
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);//3
EXTI_InitSturcture.EXTI_Line=EXTI_Line3;//ÉèÖÃÖжÏÏßΪÏß2
EXTI_InitSturcture.EXTI_Mode=EXTI_Mode_Interrupt;//ÉèÖô¥·¢Ä£Ê½ÎªÖжÏ
EXTI_InitSturcture.EXTI_Trigger=EXTI_Trigger_Falling;//ϽµÑØ´¥·¢
EXTI_InitSturcture.EXTI_LineCmd=ENABLE;//ʹÄÜÖжÏÏß
EXTI_Init(&EXTI_InitSturcture);//³õʼ»¯ÖжÏÏß²ÎÊý
NVIC_InitSturcture.NVIC_IRQChannel=EXTI3_IRQn;//ʹÄܰ´¼üÍⲿÖжÏͨµÀ
NVIC_InitSturcture.NVIC_IRQChannelCmd=1;//ÇÀÕ¼ÓÅÏȼ¶Îª1
NVIC_InitSturcture.NVIC_IRQChannelPreemptionPriority=0;//ÇÀÕ¼×ÓÓÅÏȼ¶Îª2
NVIC_InitSturcture.NVIC_IRQChannelSubPriority=ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
NVIC_Init(&NVIC_InitSturcture);//³õʼ»¯NVIC
//ÉèÖÃÖжÏÏß4
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);//3
EXTI_InitSturcture.EXTI_Line=EXTI_Line4;//ÉèÖÃÖжÏÏßΪÏß2
EXTI_InitSturcture.EXTI_Mode=EXTI_Mode_Interrupt;//ÉèÖô¥·¢Ä£Ê½ÎªÖжÏ
EXTI_InitSturcture.EXTI_Trigger=EXTI_Trigger_Falling;//ϽµÑØ´¥·¢
EXTI_InitSturcture.EXTI_LineCmd=ENABLE;//ʹÄÜÖжÏÏß
EXTI_Init(&EXTI_InitSturcture);//³õʼ»¯ÖжÏÏß²ÎÊý
NVIC_InitSturcture.NVIC_IRQChannel=EXTI4_IRQn;//ʹÄܰ´¼üÍⲿÖжÏͨµÀ
NVIC_InitSturcture.NVIC_IRQChannelCmd=2;//ÇÀÕ¼ÓÅÏȼ¶Îª2
NVIC_InitSturcture.NVIC_IRQChannelPreemptionPriority=0;//ÇÀÕ¼×ÓÓÅÏȼ¶Îª2
NVIC_InitSturcture.NVIC_IRQChannelSubPriority=ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
NVIC_Init(&NVIC_InitSturcture);//³õʼ»¯NVIC
//ÉèÖÃÖжÏÏß0
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//3
EXTI_InitSturcture.EXTI_Line=EXTI_Line0;//ÉèÖÃÖжÏÏßΪÏß0
EXTI_InitSturcture.EXTI_Mode=EXTI_Mode_Interrupt;//ÉèÖô¥·¢Ä£Ê½ÎªÖжÏ
EXTI_InitSturcture.EXTI_Trigger=EXTI_Trigger_Rising;//ÉÏÉýÑØ´¥·¢
EXTI_InitSturcture.EXTI_LineCmd=ENABLE;//ʹÄÜÖжÏÏß
EXTI_Init(&EXTI_InitSturcture);//³õʼ»¯ÖжÏÏß²ÎÊý
NVIC_InitSturcture.NVIC_IRQChannel=EXTI0_IRQn;//ʹÄܰ´¼üÍⲿÖжÏͨµÀ
NVIC_InitSturcture.NVIC_IRQChannelCmd=3;//ÇÀÕ¼ÓÅÏȼ¶Îª3
NVIC_InitSturcture.NVIC_IRQChannelPreemptionPriority=0;//ÇÀÕ¼×ÓÓÅÏȼ¶Îª2
NVIC_InitSturcture.NVIC_IRQChannelSubPriority=ENABLE;//ʹÄÜÍⲿÖжÏͨµÀ
NVIC_Init(&NVIC_InitSturcture);//³õʼ»¯NVIC
}
void EXTI2_IRQHandler(void)
{
delay_ms(20);
if (KEY2==0)
{
LED0 = !LED0;
}
EXTI_ClearITPendingBit(EXTI_Line2);//Çå³ýLINE2ÉϵÄÖжϱê־λ
}
void EXTI3_IRQHandler(void)
{
delay_ms(20);
if(KEY1 == 0)
{
LED1 = !LED1;
}
EXTI_ClearITPendingBit(EXTI_Line3);
}
void EXTI4_IRQHandler(void)
{
delay_ms(20);
if(KEY0 == 0)
{
LED0 = !LED0;
LED1 = !LED1;
}
EXTI_ClearITPendingBit(EXTI_Line4);
}
void EXTI0_IRQHandler(void)
{
delay_ms(20);
if(WK_UP == 1)
{
BEEP = !BEEP;
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
这里我设置了抢占优先级分别为0,1,2,3.按视频讲解的优先级顺序应该是KEY2>KEY1>KEY0>WK_UP。但是为什么实验的时候,KEY2的按键没有作用呢?
更改优先级后还是总有一个按键无法作用其相应功能。求分析。
|
|