0

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;
    }
}

他のすべての割り込みは魅力的に機能しますが、これはそうではありません。ボードの回路図では、このピンは接続されていないため、なぜこれが起こっているのかわかりません:(

4

1 に答える 1

0

次の行に問題があると思います

buttonEXTI.EXTI_Line = 0x1E0;

マスクは 0x03C0 でなければなりません

同様の間違いを避けるために、次の方法を使用できます。

buttonEXTI.EXTI_Line = EXTI_Line6 | EXTI_Line7 | EXTI_Line8 | EXTI_Line9;
于 2017-09-06T07:17:09.777 に答える