Proste pytania o programowanie STM32 w języku C.

Tu możesz pisać o swoich problemach z pisaniem programów w języku C/C++ dla STM.
Awatar użytkownika
0110101101101101
Posty: 11
Rejestracja: sobota 12 maja 2018, 14:55

Proste pytania o programowanie STM32 w języku C.

Postautor: 0110101101101101 » czwartek 07 cze 2018, 07:47

Witajcie, jako, że dopiero zaczynam poznawać rodzinę STM to w związku z tym nasuwa mi się na język mnóstwo pytań i nieścisłości.
Pozwoliłem sobie założyć temat dotyczący takich prostych pytań nowicjusza o różne peryferia. Nie chcę pytać na czacie, żeby te pytania z odpowiedziami zostały dla potomnych, a zakładanie osobnego tematu dla każdego tematu mogłoby Was szybko wyprowadzić z równowagi. :lol:

Więc, żeby nie zakładać pustego tematu, to już mam jedno pytanie.

[PYTANIE 1]

Jak to jest z obsługą przerwań zewnętrznych? Dla testów i nauki chciałem na przerwaniu EXTI generowanym przez przycisk zmieniać stan diody.
Gdy ręcznie w przerwaniu nie kasowałem bitu "Pending Bit", to przerwanie wykonało się tylko jeden, jedyny raz, a kolejne naciśnięcia przycisku nic nie zmieniały.
Gdy w obsłudze przerwania dodałem linijkę EXTI -> PR = EXTI_PR_PR13;, to za każdym naciśnięciem przycisku prawidłowo zmienia się stan diody.

Czy automatycznie po wejściu do obsługi tego przerwania ten bit nie powinien się automatycznie kasować? Bo jak dobrze rozumiem, to jest to flaga zajętości, która blokuje przerwania z danej linii, tak?

Awatar użytkownika
inż.wielki
User
User
Posty: 216
Rejestracja: niedziela 20 gru 2015, 23:11

Re: Proste pytania o programowanie STM32 w języku C.

Postautor: inż.wielki » czwartek 07 cze 2018, 07:51

W zależności od procka taka flaga może ale nie musi być kasowana. Zazwyczaj trzeba o to zadbać samemu. Nie pamiętam dokładnie, bo STM'ów nie ruszałem dłuższą chwilę, ale tam jest jeden uchwyt dla danego typu przerwań. Tzn dla wszystkich pinów o indeksie 0, 1, 2 itd... Więc w przerwaniu możesz też sprawdzać, który pin to wywołał. Dlatego nie jest kasowane. Ale mogę się mylić, poczekajmy na wypowiedź mądrzejszych :D

Awatar użytkownika
0110101101101101
Posty: 11
Rejestracja: sobota 12 maja 2018, 14:55

Re: Proste pytania o programowanie STM32 w języku C.

Postautor: 0110101101101101 » czwartek 07 cze 2018, 08:17

Tyle czasu tego szukałem w Reference Manual'u i dopiero teraz znalazłem.... :mrgreen:

W opisie działania EXTI jest zapis:
When the selected edge occurs on the external interrupt line, an interrupt request is
generated. The pending bit corresponding to the interrupt line is also set. This request is
reset by writing a ‘1’ in the pending register


No. Czasami się czegoś nie zauważy i kilka godzin się szuka po dokumentacji... :lol:

inż.wielki pisze:Nie pamiętam dokładnie, bo STM'ów nie ruszałem dłuższą chwilę, ale tam jest jeden uchwyt dla danego typu przerwań. Tzn dla wszystkich pinów o indeksie 0, 1, 2 itd... Więc w przerwaniu możesz też sprawdzać, który pin to wywołał. Dlatego nie jest kasowane.


Dokładnie jest tak jak piszesz - np. piny 10..15 są obsługiwane przez jeden wektor przerwania. Dzięki za rozjaśnienie umysłu!

Awatar użytkownika
xor
User
User
Posty: 124
Rejestracja: poniedziałek 05 wrz 2016, 21:44

Re: Proste pytania o programowanie STM32 w języku C.

Postautor: xor » czwartek 07 cze 2018, 08:27

Niemal wszystkie przerwania w STM32F103 (zdaje się, że takim prockiem się bawisz?) trzeba kasować Jedyne które w tej chwili pamiętam, gdzie nie jest to potrzebne to przerwanie USARTa, tam kasowanie następuje automatycznie wraz z przeczytaniem/zapisem rejestru danych.

Dokładnie jest tak jak piszesz - np. piny 10..15 są obsługiwane przez jeden wektor przerwania.

Linie 5-9 też są zgrupowane, ale już 0-4 mają osobne wektory przerwań.


Wróć do „Programowanie STM w C/C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość