Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Computer ControlsComputer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32][C/IAR][Win7] - obługa przerwań od I/O

24 Kwi 2011 18:10 2131 2
  • Poziom 8  
    Witam
    Od niedawna bawię się uC STM32 i krok po kroku próbuję nauczyć się ich obsługi.

    Słowem wstępu:
    Mam płytkę ZL31ARM, pewne doświadczenie z programowaniem w C/C++ i zupełny brak doświadczenia z mikrokontrolerami.
    Mam już za sobą mruganie diodami i proste pętle opóźniające; obecnie chcę nauczyć się obsługi przerwać przy wykorzystaniu EXTI i IO. Korzystam z "STM32 w praktyce" i na niej opieram swoją obecną edukację. Przegryzłem się już przez większość rozdziałów, rozumiem idee, ale mam problem z implementacją kodu.

    Na czym polega rzecz:
    Próbuję napisać program wykorzystujący proste przerwanie, inicjowane przesunięciem joysticka w górę. Po włączeniu programu dwie diody mają być zgaszone, po przesunięciu joysticka ma zostać uruchomione przerwanie, uruchomiana odpowiednia funkcja i zapalić się jedna z diod.

    Skonfigurowałem NVIC, EXTI oraz IO - podążąjąc za instrukcjami z książki i konfronując z dokumentacją biblioteki oraz tym co znalazłem w sieci; mam wrażenie że mniej więcej poprawnie, ale ręki sobie nie dam uciąć.

    Niestety, po uruchomieniu programu diody, owszem gasną, ale jednak brak jakiejkolwiek reakcji na moje oczekiwane przerwanie. Bardzo bym był wdzięczny gdyby ktoś przeanalizował kod i ocenił co może być tego przyczyną - rozumiem co powinno się dziać i po co wprowadzam większość instrukcji (trochę czasu to zajęło ;-) ), ale martwi mnie trochę, że może nie rozumiem tego właściwie, bo efektu jakiegoś porywającego nie ma.

    Poniżej kod:
    (main na końcu; uprzejmie proszę, by sprawdzić także RCC_Conf())


    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Computer ControlsComputer Controls
  • Poziom 9  
    Tak na szybko to powinieneś mieć plik prawdopodobnie o nazwie startup, w którym umieszcza się wektory obsłygi przerwań wyglądający jakoś tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i w miejscu obok komentarza //EXTI0_IRQHandler podać nazwe funkcji obsłygi przerwania. Zrobiłeś to?
  • Poziom 8  
    Korzystam z przykładowych projektów dostarczonych przez ST w programie IAR.
    Po lewej stronie okna programu znajduje się okienko z drzewem folderów i pośród nich znajdują się dwa pliki ze 'startup' w nazwie: startup_stm32f10x_md.o i startup_stm32f10x_md.s (zawartość plików znajduje się poniżej).
    To o te pliki chodziło? Zawartość dość znacznie się różni.
    Przerwania od timerów działają, także niby struktura całego projektu jest właściwa - tylko z tym EXTI się nie mogę uporać.


    Ich zawartość to odpowiednio:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod
    [/code]