Nucleo F401RE - 中断无法正常工作

时间:2017-09-05 15:44:02

标签: interrupt stm32f4 nucleo

我的Nucleo F401RE有问题:当我试图通过更改PA9上的值来触发中断时,没有任何反应:(

我的代码:

void EXTI_Config(){

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource6);
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource7);
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource8);
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource9);
    EXTI_InitTypeDef buttonEXTI;
    EXTI_StructInit(&buttonEXTI);
    buttonEXTI.EXTI_Line = 0x1E0;
    buttonEXTI.EXTI_Mode = EXTI_Mode_Interrupt;
    buttonEXTI.EXTI_Trigger = EXTI_Trigger_Rising;
    buttonEXTI.EXTI_LineCmd = ENABLE;
    EXTI_Init(&buttonEXTI);

    NVIC_InitTypeDef buttonNVIC;

    buttonNVIC.NVIC_IRQChannel = EXTI9_5_IRQn;
    buttonNVIC.NVIC_IRQChannelPreemptionPriority = 1;
    buttonNVIC.NVIC_IRQChannelSubPriority = 0;
    buttonNVIC.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&buttonNVIC);

    EXTI_ClearFlag(0x1E0);
}

void EXTI9_5_IRQHandler(){
    if(EXTI_GetFlagStatus(EXTI_Line6)==SET){ //works
        EXTI_ClearITPendingBit(EXTI_Line6);
        if (mode==0&&isTimeSet){
            mode=1;
        } else if(mode==1){
            mode=2;
        } else {
            mode=1;
        }
    } else if (EXTI_GetFlagStatus(EXTI_Line7)==SET){ //works
        EXTI_ClearITPendingBit(EXTI_Line7);
        changeValue=2;
    } else if (EXTI_GetFlagStatus(EXTI_Line8)==SET){ //works
        EXTI_ClearITPendingBit(EXTI_Line8);
        changeValue=1;
    } else if (EXTI_GetFlagStatus(EXTI_Line9)==SET){ //don't work :(
        EXTI_ClearITPendingBit(EXTI_Line9);
        settingsApplied=1;
    }
}

每一个其他的中断都像魅力一样,但是这个 - 不要。在电路板原理图中,这个引脚没有堵塞,所以我不知道为什么会这样:(

1 个答案:

答案 0 :(得分:0)

我认为以下一行存在问题

buttonEXTI.EXTI_Line = 0x1E0;

你的面具必须是0x03C0

为避免类似错误,您可以使用以下方法:

buttonEXTI.EXTI_Line = EXTI_Line6 | EXTI_Line7 | EXTI_Line8 | EXTI_Line9;