Chcę, aby TIM2 i TIM3 pracowały w połączeniu kaskadowym. Ta konfiguracja działa, ale mam pewną wątpliwość dotyczącą pracy TIM2 (TIM2 taktuje TIM3). Z racji braku domowego oscyloskopu staram sobie pomóc diodą LED. Inicjalizacja diody realizowana jest przez inicjalizacją timerów. W inicjalizacji dioda jest zapalana. W procedurze obsługi przerwania od TIM2 zmieniam stan pinu związanego z diodą na przeciwny.
TIM2 jest taktowany sygnałem 1MHz. Zaobserwowałem, że pierwsze przerwanie generowane jest około 30 sekund po uruchomieniu zasilania, tymczasem powinno być po 2^32 us (dioda gaśnie po ok. 30 sekundach). Zmieniłem więc wartość ARR z 0xFFFF FFFF na 1 000 000, w celu generowania przerwania co 1 s. Efekt jest zbliżony, tzn tuż po zapaleniu diody generowane jest przerwanie (w czasie znacznie krótszym od 1s).
Poniżej zamieszczam kod:
TIM2 jest taktowany sygnałem 1MHz. Zaobserwowałem, że pierwsze przerwanie generowane jest około 30 sekund po uruchomieniu zasilania, tymczasem powinno być po 2^32 us (dioda gaśnie po ok. 30 sekundach). Zmieniłem więc wartość ARR z 0xFFFF FFFF na 1 000 000, w celu generowania przerwania co 1 s. Efekt jest zbliżony, tzn tuż po zapaleniu diody generowane jest przerwanie (w czasie znacznie krótszym od 1s).
Poniżej zamieszczam kod:
Kod: C / C++
ARPE nie pomoże - działa tylko na buforowanie rejestru ARR. Z tego co wiem, preskaler jest buforowany zawsze i nie można tego wyłączyć. Chyba, że w F7 coś się zmieniło, ale wątpię.