Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

STM32 - Timer opozniający start bez zatrzymania programu.

troni2 29 Jan 2015 17:24 906 4
  • #1
    troni2
    Level 8  
    Witam, mam problem z obsługą timera w STM32f103ZET6 na płycie ewaluacyjnej HY RedBul v3.0. Problem polega na opóźnionym zapłonie jednej z funkcji. Realizuje to na przykładzie samozamykającej się bramy po 15 sekundach, tak aby nie zatrzymać całego programu. Generalnie udało mi się skonfigurować przerwania od TIM1, ale timer liczy cały czas, czyli jeżeli otworzę bramę w 3 sekundzie timera to zamknie ją po 12 sekundach, a nie po 15, a jak w 14 to od razu.

    Konfiguracja timera (Period dobrany testowo):
    Code: c
    Log in, to see the code


    w RCC:
    Code: c
    Log in, to see the code




    Funkcja przerwania:
    Code: c
    Log in, to see the code


    Wywołanie funkcji pod przyciskiem:
    Code: c
    Log in, to see the code


    Pytanie jak zrobić, aby przycisk resetował licznik do zera i odliczał od nowa.
    Pytanie czy jeżeli brama zostanie otwarta z innego źródła niż przycisk a licznik się przepełni to jak uniknąć jej samoczynnego zamknięcia?

    Proszę o pomoc
    Kamery 3D Time of Flight - zastosowania w przemyśle. Darmowe szkolenie 16.12.2021r. g. 10.00 Zarejestruj się
  • #2
    BlueDraco
    MCUs specialist
    Będę nudny: zacznij od przerwania zgłaszanego co 10 ms. Nie nastawiaj timera na czasy kilkunastu sekund - obsłuż wszystkie zdarzenia w przerwaniu timera w postaci prostego automatu, zmieniającego stan przy upłynięciu jakiegoś czasu, naciśnięciu guzika i innych zdarzeniach.
  • #3
    el2010tmp
    Level 25  
    troni2 wrote:
    Pytanie jak zrobić, aby przycisk resetował licznik do zera i odliczał od nowa.

    Wystarczy w funkcji "pod przyciskiem" przeładować rejestry:
    Code: c
    Log in, to see the code

    Napisałem "poprawna_wartość" bo ARR jest 16-bitowy i 100 000 się tam nie zmieści.
    Jeśli dobrze wyliczysz parametry to powinno działać zgodnie z oczekiwaniem.

    troni2 wrote:
    Pytanie czy jeżeli brama zostanie otwarta z innego źródła niż przycisk a licznik się przepełni to jak uniknąć jej samoczynnego zamknięcia?

    Najprościej chyba uruchomić TIM1 w funkcji "pod przyciskiem" i zatrzymać w przerwaniu od przepełnienia.
  • #4
    BlueDraco
    MCUs specialist
    Code: c
    Log in, to see the code

    ... a dalej pisz sam ...
  • #5
    koyodza
    Level 10  
    TIM_TimeBaseStructure. TIM_Period = 100000 ;
    TIM_Period to je 16-bit registr