logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak stworzyć stoper na STM32F407 z użyciem HAL i timerów TIM6/TIM7?

ppkkrawczyk 09 Lut 2017 17:01 1101 11
REKLAMA
  • #1 16265365
    ppkkrawczyk
    Poziom 9  
    Posty: 41
    Ocena: 7
    Witam,
    Moim zadaniem jest stworzenie projektu, który mierzy czas przejazdu z punktu A do punktu B na mikrokontrolerze stm32f407 z użyciem bibliotek HAL.

    Pierwsza część czyli wykrywanie ruchu zrealizowałem przy pomocy czujników ruchu HC-501, jednak z drugą nie mogę sobie poradzić - czyli stworzenie zwykłego stopera. Przeczytałem mase artykułów jednak dalej nic z tego nie wiem.

    Dla uproszczenia: Jak stworzyć zwykły stoper który zaczyna liczyć przy wciśnięciu przycisku i kończy przy jego zwolnieniu? Użyć do tego tych najprostszych timerów czyli tim6 lub tim7? Nie moge znaleźć również funkcji która będzie zapisywać czas do zmiennej, aby można było płynnie podglądać ją w stm studio.

    Proszę o pomoc. :)
  • REKLAMA
  • #2 16265447
    Konto nie istnieje
    Konto nie istnieje  
  • #4 16265504
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #6 16265629
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #8 16266728
    matti0010
    Poziom 11  
    Posty: 319
    Pomógł: 8
    Ocena: 25
    Ewentualnie odpal timer z przerwaniem od przepełnienia i tam w przerwaniu wsadź zmienną która będzie zerowana w momencie naciśnięcia "start pomiar" i zwiększana co powiedzmy 1ms przez przerwanie (nie wiem jaką chcesz dokładność, możesz dać np. 0,1ms i masz większą precyzje). Potem jak naciśniesz "stop pomiar" to timer przestanie zwiększać tą zmienną a Ty na spokojnie sobie ją odczytasz. Oczywiście start i stop można zrealizować na jednym przycisku.

    Wiem, że można bezpośrednio z rejestru to odczytać (@Piotrus_999 dobrze radzi :) ) ale jeżeli okaże się, że rejestr się przepełnił to wtedy pomiar będzie błędny, a tak to przy przepełnieniu jednej zmiennej może być inkrementowana kolejna zmienna itd. w nieskończoność. W ten sposób można odmierzać nawet lata ale wiadomo jak to będzie precyzyjne na dłuższą metę (przy pomiarach wynoszących dłuższy okres czasu może warto pomyśleć o RTC który jest w STM, jeżeli mnie pamięć nie myli?).
  • #9 16266747
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #10 16266761
    matti0010
    Poziom 11  
    Posty: 319
    Pomógł: 8
    Ocena: 25
    Piotrus_999 napisał:

    @matti0010 Kolega nie pytał o to jak zrobić stoper, tylko jak odczytać stan licznika.


    Napisał w pierwszym poście coś takiego:

    ppkkrawczyk napisał:

    Dla uproszczenia: Jak stworzyć zwykły stoper który zaczyna liczyć przy wciśnięciu przycisku i kończy przy jego zwolnieniu? Użyć do tego tych najprostrzych timerów czyli tim6 lub tim7? Nie moge znaleźć również funkcji która będzie zapisywać czas do zmiennej, aby można było płynnie podglądać ją w stm studio.


    Więc zasugerowałem się tym postem i uznałem, że ma problem z wykonaniem startu, stopu i odczytu pomiaru.
  • #11 16267653
    el2010tmp
    Poziom 25  
    Posty: 713
    Pomógł: 97
    Ocena: 44
    ppkkrawczyk napisał:
    Jak stworzyć zwykły stoper który zaczyna liczyć przy wciśnięciu przycisku i kończy przy jego zwolnieniu? Użyć do tego tych najprostrzych timerów czyli tim6 lub tim7?

    Rdzeń ARM posiada swój własny timer [SysTick] który nadaje się do takiego zastosowania.

    Inicjalizacja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    gdzie SystemCoreClock to częstotliwość zegara systemowego.

    Zliczanie:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #12 16267670
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

✨ Użytkownik poszukuje pomocy w stworzeniu stopera na mikrokontrolerze STM32F407 z użyciem bibliotek HAL oraz timerów TIM6 i TIM7. W pierwszej części projektu zrealizowano wykrywanie ruchu za pomocą czujników HC-501. Problemy dotyczą implementacji stopera, który ma rozpocząć pomiar czasu po naciśnięciu przycisku i zakończyć po jego zwolnieniu. Uczestnicy dyskusji sugerują różne podejścia, w tym bezpośrednie odczytywanie rejestru licznika, użycie funkcji HAL_TIM_GetCounter oraz implementację przerwań do precyzyjnego pomiaru czasu. Wskazano również na możliwość wykorzystania rdzenia ARM i konfiguracji SysTick do zliczania milisekund.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA