2017-09-05 6 views
0

J'ai problème avec mon Nucleo F401RE: Quand je suis en train de déclencher interrompre en changeant la valeur sur PA9, rien ne se passe :(Nucleo F401RE - Interrompre ne fonctionne pas

Mon code:

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

Chaque autre interruption fonctionne comme un charme, mais celui-ci. - ne pas dans les schémas de bord de cette broche est pas branché, donc je ne sais pas pourquoi ce qui se passe :(

Répondre

0

Je suppose problème dans la ligne suivante

buttonEXTI.EXTI_Line = 0x1E0; 

votre masque doit être 0x03C0

pour éviter des erreurs similaires, vous pouvez utiliser la méthode suivante:

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