dambo1993 / dmb_delay_systick

Biblioteka do łatwego korzystania z timera Systick.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

dmb_delay_systick

Projekt zawiera prostą biblioteke obsługującą timer Systick w mikrokontrolerach z rdzeniami Mx. Udostępnie najczęściej wykorzystywane rzeczy. Pisana była z myślą o wykorzystaniu dla STM32F0/F3, ale dzięki wykorzystaniu makra gdzie podajemy jakie biblioteki zależne od platformy mają zostać dodane zyskała na uniwersalności.

Koncepcja użycia biblioteki w projekcie

Pliki Źródłowe możemy skopiować bezpośrednio do swojego projektu, dać je gdzię osobono i odpowiednio podlinkować, a najlepiej całe repozytorium podciągnąć jako submoduł gita. Biblioteka zakłada istnienie w projekcie katalogu "libs_config" w środku którego znajdzie sie plik "dmb_systick_settings.h" - tam zamieszczone będą ustawienia zależne od danego projektu. Przykładowy plik konfiguracyjny także został tutaj umieszczony.

Zawartość repozytorium

W repozytorium znajdziemy:

  • pliki bilioteki w katalogu "dmb_delay_systick"
  • przykładowy plik konfiguracyjny
  • #todo - przykładowy projekt z wykorzystaniem tej biblioteki, aczkolwiek raczej opis jest wyczerpujący
  • instrukcja w postaci tego pliku
  • dokumentacja w doxygenia - dostępna też pod tym linkiem: https://dambo1993.github.io/dmb_delay_systick/index.html

Zasada działania i możliwości biblioteki

Zacznijmy moze czym jest SysTick - jest to 24-bitowy timer wbudowany w rdzenie Cortex-M. Jest taki sam dla wszystkich + niezależny od producenta układu. Podliczać czas, więc idealnie nadaje się do implementacji na nim timerów softwarowych, a sprzętowe timery możemy wtedy wykorzystać do bardziej rozbudowanych zadań.

Wstępnie zakładam, że będzie on wykorzystywany do "tykania" co milisekundę, ale nic nie stoi na przeszkodzie, zeby to zmienić.

Możliwości biblioteki:

  • udostępnia funkcję "_delay_ms()" znaną z AVRek - zwykły blokujący delay, z tym, że możemy podać do niego 32bitową zmienną (co nie oznacza, że powinniśmy/wypada używać jej tak :p )
  • generowanie co tyknięcie zarejestrowanego callbacka
  • odliczanie czasu działania systemu - co może być wykorzystane do wyznaczania czasu, gdy wystąpił jakiś event
  • możliwość ustawienia i sprawdzania blokujących timeoutów - dla prostych aplikacji

Wykorzystanie biblioteki:

  • Jako pierwszy krok inicjalizujemy bibliotekę podając jej z jaką częstotliowścią jest taktowany SysTick:
// inicjalizacja SysTicka z aktualna predkoscia zegara
dmb_delay_systick_init(48000000);
  • Jeśli chcemy wykorzystywać callback wywoływany co 1 ms musimy go zarejestrować:
/*
 * Miganie ledkiem co milisekunde.
 */
void toogle_1ms()
{
	DEBUG_LED1_TOG;
}

...

// podpiecie callbacka, ktory wykona sie co milisekunde
dmb_delay_systick_register_callback( toogle_1ms );
  • Wykorzystanie timeoutu:
wyslij_do_ukladu_i_czekaj_za_odp();
systick_set_timeout(300);
while( !odebrano_odpowiedz() && systick_check_timeout() );
// tu wejdziemy, gdy  gdy dostaniemy odpowiedź, lub minie timeout
  • wykorzystanie uptime - czyli zwykłe wywołanie funkcji:
uint32_t aktualna_ms = systick_get_system_uptime();

Parametry do ustawienia

Raczej nie ma co opisywać dodatkowo - tak wygląda plik ustawień:

// Plik "systemowy" zalezny od plaftormy na jaka piszemy
#define DMB_SYSTICK_SYSTEM_INCLUDE 		"stm32f0xx.h"

// Priorytet przerwania do SysTicka
#define DMB_SYSTICK_INTERRUPT_PRIORITY	5

// Wybor, czy w czasie deleya mamy uspic mikrokontroler
// nie zawsze chcemy to robic, np RTT ma problemy z uruchomiona ta opcja
#define DMB_SYSTICK_ENABLE_WFI 1

UWAGA

Systick cały czas pracuje w tle, więc dokładność funkcji to +/- jedno tyknięcie - raczej zbyt często nie utrafimy z wywołanie _delay_ms() "idealnie podczas tyknięcia" - więc to nie jest biblioteka do mega precyzyjnych rzeczy!

Autor

About

Biblioteka do łatwego korzystania z timera Systick.

License:MIT License


Languages

Language:C 100.0%