Skocz do zawartości

[F103RB] Przerwania EXTI - problem początkującego


Pomocna odpowiedź

Napisano

Cześć.

Na początek mówię od razu, że jestem zupełnie początkującym jeśli chodzi o ARMy.

Uczę się od podstaw obsługi tych mikrokontrolerów bez użycia StdPeriph.

Chciałem uruchomić przerwanie reagujące na zmianę stanu na PC13 i przy każdym przerwaniu negować stan diody na PA5. Mikrokontroler STM32F103RBT6 na płytce Nucleo.

Kod wygląda tak:


   #include "stm32f10x.h"

   void EXTI15_10_IRQHandler(void) __attribute__ ((interrupt));
   void EXTI15_10_IRQHandler(void)
   {
           if(EXTI->PR & EXTI_PR_PR13)
           {
                   if((GPIOC->IDR & GPIO_IDR_IDR13))
                   {
                           GPIOA->BSRR = GPIO_BSRR_BR5;
                   } else
                   {
                           GPIOA->BSRR = GPIO_BSRR_BS5;
                   }
           }
           EXTI->PR |= EXTI_PR_PR13;
   }

   int main(void)
   {

           RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
           RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
           RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;

           GPIOA->CRL = GPIO_CRL_MODE5;
           GPIOC->CRL = GPIO_CRH_CNF13_1;

           AFIO->EXTICR[4] |= AFIO_EXTICR4_EXTI13_PC;


           EXTI->IMR |= EXTI_IMR_MR13;

           EXTI->RTSR |= EXTI_RTSR_TR13;
           EXTI->FTSR |= EXTI_FTSR_TR13;

           NVIC_EnableIRQ(EXTI15_10_IRQn);
   }

Nie mogę w tym znaleźć błędu.

Z góry dzięki za pomoc.

Rzeczywiście, nigdzie nie wraca, głupi błąd 😃 Błąd jeszcze był w AFIO->EXTICR[4], gdzie powinno być 3.

Pętla na końcu i problemu nie ma.

Dzięki wielkie Elvis!

Można zamknąć.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...