中级会员
 
- 积分
- 270
- 金钱
- 270
- 注册时间
- 2019-9-1
- 在线时间
- 61 小时
|
请教大家一个问题,我设置的这个中断,只有第一个中断可以进入正常,后面两个中断也能进入执行if前面的语句,youxianchu=!youxianchu;这个语句,这个对外指的是一个led,当中断次数超过4次,要求执行if里面的语句,但是把youxianchu=!youxianchu;放入if里面却不能执行,请问这是哪里设置的不对,
void chuanganEXTIX_Init(void)//只配置chuangan1,chuangan3,chuangan5端口
{
EXTI_InitTypeDef EXTI_InitStructure;//定义初始化结构体
NVIC_InitTypeDef NVIC_InitStructure;//定义结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟
chuangan_Init(); // 按键端口初始化
//GPIOB.9 中断线以及中断初始化配置 下降沿触发
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9); //将GPIO管脚与外部中断线连接
EXTI_InitStructure.EXTI_Line=EXTI_Line9;//中断线选择
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;////EXTI为中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//下降沿出发 EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;// //使能中断
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键WK_UP所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x05; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
//GPIOB.7 中断线以及中断初始化配置 下降沿触发 yaokong1
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource7); //将GPIO管脚与外部中断线连接
EXTI_InitStructure.EXTI_Line=EXTI_Line7;//中断线选择
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;////EXTI为中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//下降沿出发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;// //使能中断
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键WK_UP所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04; //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
//GPIOB.5 中断线以及中断初始化配置 下降沿触发
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5); //将GPIO管脚与外部中断线连接
EXTI_InitStructure.EXTI_Line=EXTI_Line5;//中断线选择
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;////EXTI为中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//下降沿出发 Falling
EXTI_InitStructure.EXTI_LineCmd = ENABLE;// //使能中断
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键WK_UP所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x06; //子优先级4
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
}
void EXTI9_5_IRQHandler(void)
{
////上行传感器中断 正常
// if(EXTI_GetITStatus(EXTI_Line9) != RESET)
// {
// TIM_Cmd(TIM2, ENABLE); //开定时器2//开定时器
// biaozhi1++;
// youxianchu=!youxianchu;
//// delay_ms(20);//消抖
// if(biaozhi1>4)
// {
// TIM_Cmd(TIM2, DISABLE); //关闭定时器2,取消误触发
// TIM_SetCounter(TIM2, 0);//定时器2清零
// TIM_SetCounter(TIM3, 0);//定时器3清零
// TIM_Cmd(TIM3, ENABLE); //使能TIM3 开定时器3.延时3分钟
// key=2;
// }
// EXTI_ClearITPendingBit(EXTI_Line9); //清除EXTI9线路挂起位
// }
//下行传感器中断
if(EXTI_GetITStatus(EXTI_Line5) != RESET)
{
TIM_Cmd(TIM2, ENABLE); //开定时器2//开定时器
biaozhi5++;
// youxianchu=!youxianchu;
// delay_ms(20);//消抖
if(biaozhi5>4)
{
youxianchu=!youxianchu;
TIM_Cmd(TIM2, DISABLE); //关闭定时器2,取消误触发
TIM_SetCounter(TIM2, 0);//定时器2清零
TIM_SetCounter(TIM3, 0);//定时器3清零
TIM_Cmd(TIM3, ENABLE); //使能TIM3 开定时器3.延时3分钟
key=2;
}
EXTI_ClearITPendingBit(EXTI_Line5); //清除EXTI5线路挂起位
}
|
|