打印

普通delay函数与外部中断,请大神看下!!!

[复制链接]
425|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
遇到了一个问题,请各位大神看下。
主函数中,在while循环时,不论我按何时下按键中断,总是在循环显示(SendGroupData_TA6932该函数是去控制数码管显示)结束后,才进入外部中断函数,百思不得其解呀!!!
难道普通的delay函数比外部中断的优先级高吗????????
还请各位大神指导下

uint8_t   key1_int_flag = 0;//按键中断标志位

delay函数void Delay( uint32_t count)
{
        for(;count!=0;count--);
}

void   EXTI7_GPIOB7_Config(void);
void   key_steup_scan(void);//按键设置函数,按键按下后才进入此函数
void   SendGroupData_TA6932(unsigned char addr,unsigned char* arr,unsigned char len);//发送显示内容到TA6932
主函数大致如下:
main()
{
        EXTI7_GPIOB7_Config();
            while(1)
        {
                if(key1_int_flag == 1)
                {
                        key_steup_scan();
                }
                else
                {
                        SendGroupData_TA6932(0,TA6932_Data_Un,9);
                        Delay(0xFFFFFF);
                        SendGroupData_TA6932(0,TA6932_Data_An,9);
                        Delay(0xFFFFFF);
                        SendGroupData_TA6932(0,TA6932_Data_Tem,9);
                        Delay(0xFFFFFF);
                }
        }
}

//中断配置函数
void EXTI7_GPIOB7_Config(void)
{
        NVIC_InitTypeDef  NVIC_InitStruct;
        GPIO_InitTypeDef  GPIO_InitStruct;
        EXTI_InitTypeDef  EXTI_InitStruct;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        
        //EXTI9_5中断配置,按键1
        NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_IRQn;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStruct);
        
        //配置按键引脚
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOB, &GPIO_InitStruct);
        
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);
        EXTI_InitStruct.EXTI_Line = EXTI_Line7;
        EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStruct.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStruct);
}


//中断函数
void EXTI9_5_IRQHandler(void)
{
        if(EXTI_GetFlagStatus(EXTI_Line7)!=RESET)
        {
                if(key1_int_flag == 0)
                {
                        key1_int_flag = 1;
                }
                else
                {
                        key1_int_flag =0;
                }
                EXTI_ClearITPendingBit(EXTI_Line7);
        }
}

使用特权

评论回复

相关帖子

沙发
21iscolor| | 2020-4-22 20:35 | 只看该作者
怀疑中断设置有问题建议子核对

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

377

主题

377

帖子

0

粉丝