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

STM32F4-Discovery, licznik w trybie PWM input, brak reakcji na zmianę preskalera

bednarus3 28 Lut 2014 17:51 987 0
  • #1 28 Lut 2014 17:51
    bednarus3
    Poziom 8  

    Dzień dobry.
    Do układu wgrałem przykładowy program, PWM input obliczający częstotliwość, dostarczony do STM32F4-Discovery. Zamiast licznika TIM4 wykorzystałem licznik TIM5. Układ działa prawidłowo. Oblicza właściwą częstotliwość

    Inicjalizacja licznika:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Według opisu dostarczonego do przykładu wynika, że licznik taktowany jest z częstotliwością 84MHz.
    W przerwaniu mam obliczenia: częstotliwość_obliczana = zegar_licznika / wartość_licznika
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Do tej pory wszystko działa jak należy.
    Problem pojawił się gdy chciałem zmienić preskaler na wartość równą 2
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Co za tym idzie
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Zamiast uzyskać wynik z taką samą częstotliwością dostaję 2 razy mniejszy. Gdzie tkwi błąd?

    Edit:
    Błąd był w nierozumieniu co znaczyły instrukcje użyte w programie. Ale w notach katalogowych trochę niejasno to opisano. Dopiero jak przeglądałem plik biblioteki liczników stm32f4xx_tim.c znalazłem co było przyczyną. W tym pliku jest napisane:
    Cytat:
    2. Configure the Time base unit as described in the first part of this driver,
    if needed, else the Timer will run with the default configuration:
    - Autoreload value = 0xFFFF
    - Prescaler value = 0x0000
    - Counter mode = Up counting
    - Clock Division = TIM_CKD_DIV1

    I wszystko jasne. Przeskaler licznika ustawia się w strukturze TimeBase, czyli w moim przypadku:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 0