stm32l4 外部中断按键会卡死_stm32设置两个按键外部中断,只有一个有效

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

把两个按键设置中断,分别是Line2和Line4,现在只有Line2有效,把Line2删了,Line4也会有效,但怎么才能让两个都有效呢?是哪里设置错了,还是内部冲突了?

下面是程序:

main()函数已设置:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

#include "exti.h"

void exti_init()

{

GPIO_InitTypeDef GPIO_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);

GPIO_InitStructure.GPIO_Pin=k_left;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitStructure);

EXTI_InitStructure.EXTI_Line=EXTI_Line2;

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);

EXTI_InitStructure.EXTI_Line=EXTI_Line4;

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4);

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

下面是中断入口函数:

void EXTI2_IRQHandler()

{

if(EXTI_GetITStatus(EXTI_Line2)==SET)

{

EXTI_ClearITPendingBit(EXTI_Line2);

delay_ms(10);

if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==Bit_RESET)

{

key=0.1;

}

while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0);

}

}

void EXTI4_IRQHandler()

{

if(EXTI_GetITStatus(EXTI_Line4)==SET)

{

EXTI_ClearITPendingBit(EXTI_Line4);

delay_ms(10);

if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==Bit_RESET)

{

key=0.2;

}

while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值