lx1990 发表于 2018-7-3 11:58:05

STM32中断异常

在使用STM32L151调试射频芯片的时候,在中断时,调用中断函数处理函数,并关闭中断,处理完成后,再开启中断,但是在开中断时发现,再次使能中断后,会立刻进入中断处理函数,但是并没有外部信号触发中断。怀疑是中断标志位被挂起,但是调用HAL_NVIC_ClearPendingIRQ函数也不行,不知道有没有大神求解。
不会传图片,代码如下
中断初始化
static void EXTI3_Init(void)
{
        GPIO_InitTypeDef gpioinitstruct;

        /* Enable the Motor Clock */
        __HAL_RCC_GPIOB_CLK_ENABLE();

        /* Configure the GPIO */
        gpioinitstruct.Pin = GPIO_PIN_3;
        gpioinitstruct.Pull = GPIO_PULLUP;
        gpioinitstruct.Speed = GPIO_SPEED_FREQ_MEDIUM;

                /* Configure Button pin as input with External interrupt */
        gpioinitstruct.Mode   = GPIO_MODE_IT_FALLING;
        HAL_GPIO_Init(GPIOB, &gpioinitstruct);

        /* Enable and set Button EXTI Interrupt to the lowest priority */
        HAL_NVIC_SetPriority(EXTI3_IRQn, 0x02, 1);
        HAL_NVIC_EnableIRQ(EXTI3_IRQn);
}


中断处理函数,Event_Flag 置1
void EXTI3_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
        HAL_NVIC_ClearPendingIRQ(EXTI3_IRQn);
       
        if(IRQ3_Flag)
        {
                IRQ3_Flag = 0;
                return;
        }
        Event_Flag = 1;
}


开关中断,但是在重开中断后,会立马进入中断,但是并没有外部信号触发中断
while (1)
{
                if(Event_Flag)
                {
                        HAL_NVIC_DisableIRQ(EXTI3_IRQn);
                       
                        Event_Flag = 0;
                        IRQ3_Flag = 1;
                        HAL_NVIC_EnableIRQ(EXTI3_IRQn);
                }
}


MrJiu 发表于 2018-7-3 13:35:57

外部捕捉中断就这个鸟样,我测试的时候也是这样。。。用其他变量可以避开,比如读取IO口电平,或者其他方式等等!!!

lx1990 发表于 2018-7-3 13:47:35

MrJiu 发表于 2018-7-3 13:35
外部捕捉中断就这个鸟样,我测试的时候也是这样。。。用其他变量可以避开,比如读取IO口电平,或者其他方式 ...

这样,感谢

stm1024 发表于 2018-7-4 08:56:30

在关闭中断前,确保读完了数据?你可以多读几次试试看看
页: [1]
查看完整版本: STM32中断异常