STM32F4 External Interrupt Problemi

Başlatan kimlenbu, 22 Eylül 2014, 12:53:31

kimlenbu

Selamlar,

STM32F4 discovery'de dokumatik ekranın IRQ ucuna harici kesme bağlamak istedim ama çalışmıyor. Falling,rising, falling and rising olarak denedim gene çalışmıyor. PC5 pinine bağlı, kodlarım aşağıda

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource5);
    EXTI_InitStruct.EXTI_Line = EXTI_Line5;
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_Init(&EXTI_InitStruct);
 
    NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);


stm32f4xx_it.c dosyasındaki ilgili alan şu :

void EXTI9_5_IRQHandler(void) {
    if (EXTI_GetITStatus(EXTI_Line5) != RESET) {
			DebugMesaj("EXTERNAL INTERRUPT TETIKLENDI                 ",0,GREEN);
        EXTI_ClearITPendingBit(EXTI_Line5);
    }
}


deneme yapmak için kit üzerinde PA0 ucuna bağlı olan butona harici kesme tanımladım, onda sıkıntı yok çalışıyor onun kodu da aşağıda :
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
    EXTI_InitStruct.EXTI_Line = EXTI_Line0;
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_Init(&EXTI_InitStruct);
 
    NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);


void EXTI0_IRQHandler(void) {
    if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
			DebugMesaj("EXTERNAL INTERRUPT BUTON                      ",0,GREEN);
        EXTI_ClearITPendingBit(EXTI_Line0);
    }
}



magnetron

AFIO 'nun clockunu açman lazım sanırım

F103 'te öyleydi - bir dene istersen

kimlenbu

Valla clock problemiymiş SYSCFG clockunu açmayı unutmuşum :) teşekkür ederim.

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);