野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10556|回复: 1

按键无法实时触发

[复制链接]
发表于 2017-4-21 14:38:39 | 显示全部楼层 |阅读模式
本帖最后由 龙王三太子 于 2017-4-21 14:46 编辑

有没有人帮忙看一下,为何按键中断触发了延时函数后,就不能事实的打断延时函数呢,反而每次都是等到延时函数完了以后,才可以进入下一次中断,我把延时函数放到野火的按键例程里面去试,反而是实时的进入中断,对比也没有看出啥问题,请教高人帮忙分析一下。

int main(void)  
{        
        SystemInit();
        Button_GPIO_Init();
        while (1)
        {        
                ;
        }
}



bool PassiveButton = true;

void  Button_GPIO_Init(void)
{        
                EXTI_InitTypeDef  EXTI_InitStructure;
                GPIO_InitTypeDef  GPIO_InitStructure;
                NVIC_InitTypeDef  NVIC_InitStructure;

                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
        
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOC, &GPIO_InitStructure);
                GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource14);
               
                EXTI_InitStructure.EXTI_Line    =EXTI_Line14;
                EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;
                EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
                EXTI_InitStructure.EXTI_LineCmd = ENABLE;
                EXTI_Init(&EXTI_InitStructure);

                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
                NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                NVIC_Init(&NVIC_InitStructure);
}



void EXTI15_10_IRQHandler(void)
{
                if(EXTI_GetITStatus(EXTI_Line14) != RESET) //è·±£êÇ·ñ2úéúáËEXTI LineÖD¶Ï
        {
                        EXTI_ClearITPendingBit(EXTI_Line14);     //Çå3yÖD¶Ï±ê־λ
                        delay_ms(1000);
                        delay_ms(1000);
                        delay_ms(1000);
                        delay_ms(1000);
        }
}

void delay_ms(unsigned int time)
{
        unsigned int i=0;
        while(time--)
        {
                i=12000;
                if(PassiveButton == true)
                {
                 while(i--);
                }
                else
                {
                        return;
                }
        }
}

按键.rar

5.9 MB, 下载次数: 13

回复

使用道具 举报

发表于 2017-4-21 17:48:26 | 显示全部楼层
不清楚,中断是可以打断这些的啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-15 21:38 , Processed in 0.052670 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表