Skocz do zawartości

[C] [STM32F3] Zewnetrzne przerwania nie dzialaja


WitekPL

Pomocna odpowiedź

Czesc,

mam problem z konfiguracja przerwan zewnetrznych. Sprawdzalem kilka przykladow znalezionych w necie i zaden (prawie) nie dziala.

Jedynym przykladem ktory dziala jest gotowiec z Atollic studio, i generowanie przerwan na porcie PA0. Niestety zadne modyfikacje na inne porty nie dzialaja.

Oto moj kod:

Inicjalizacja GPIO na porcie PB12:

void GPIOInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
}

Inicjalizacja NVIC:

void NVICInit(void)
{
   NVIC_InitTypeDef NVIC_InitStructure;

   NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&NVIC_InitStructure);
}

Inicjalizacja EXTI:

void EXTIInit(void)
{
     EXTI_InitTypeDef EXTI_InitStructure;

     SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, GPIO_PinSource12);

     EXTI_InitStructure.EXTI_Line = EXTI_Line12;
     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
     EXTI_Init(&EXTI_InitStructure);
}

Obsluga przerwania:

void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line12 ) != RESET)
{
	STM_EVAL_LEDOn(LED3);
}

EXTI_ClearITPendingBit(EXTI_Line12 );
}

Main:

int main(void)
{
 STM_EVAL_LEDInit(LED3);

 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

 GPIOInit();
 NVICInit();
 EXTIInit();

 while (1)
 {
 }
}

Czy moglibyscie zerknac co robie nie tak?

Dzieki

Link do komentarza
Share on other sites

-- Edit ---

Do przerwań zwenętrznych możesz wykożystać tylko niektóre piny. Wszystko jest napsiane w dokumentacji.

Nie możesz użyć przerwania

EXTI_Line12
bo takie przerwanie nie istnieje 🙂

Możesz użyć np EXTI0 lub EXTI1 lub EXTI3 itp. Musisz poszukać tabelki z wektorami przerwań w dokumentacji jest to na stronie 184/967 jakie przerwania twój procesor obsługuje.

Jeżeli masz EXTI0 to możesz wykożystać tylko pin 0 z portów:

Bits 3:0 EXTI0[3:0]: EXTI 0 configuration bits

These bits are written by software to select the source input for the EXTI0

external interrupt.

x000: PA[0] pin

x001: PB[0] pin

x010: PC[0] pin

x011: PD[0] pin

x100: PE[0] pin

x101: PF[0] pin

other configurations: reserved

Wyżej cytat z dokumentacji.

Mam nadzieję, że teraz sobie poradzisz 😃

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Obsluga przerwania:

void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line12 ) != RESET)
{
	STM_EVAL_LEDOn(LED3);
}

EXTI_ClearITPendingBit(EXTI_Line12 );
}

Dzieki

Czy ta obsługa przerwań działa ci normalnie ???

Bo u mnie nie ma tej funkcji w przerwaniach

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.