Start z STM32 VL Discovery — SysTick

Start z STM32 VL Discovery — SysTick
Razem głosów: 12 co stanowi: 80% całości.

imgres

W tym artykule pobawimy si? systemowym licznikiem o nazwie SysTick. Jego dzia?anie jest podobne

w ka?dym mikrokontrolerze czyli zlicza czas w ms od uruchomienia b?d? resetu programu.

SysTick u?yjemy w zasadzie do b?ahej sprawy jak miganie diod? LED, ale jednak zamiast funkcji delay

u?yte zostanie w?a?nie przerwanie SysTick.

Program 

Chcemy, aby LED mruga?o automatycznie, wi?c musimy utworzy? funkcj? która b?dzie zlicza? jak??

warto?? , aby opó?ni? realizacj? programu. Potrzebowa? b?dziemy w naszym programie przerwania co 1

ms, aby zmniejszy? warto?? opó?nienia. Wi?c normalnie w delay podajemy warto??  w milisekundach.

W naszym przypadku chcemy ustali? przerw? gdzie wraz ma?ym programem, który po naci?ni?ciu

niebieskiego przycisku na zestawie ustawi nam czas zw?oki , a zmiana czasu potrwa do puszczenia .

Hmmm… jako? dziwnie to wysz?o  …. ale dobra  jedziemy dalej :)

Ustaw SysTick 

W RefMan obejrzysz krótk? notatk? na rysunku 6.2.7. W sumie niewiele sie dowiemy poza drobnymi

informacjami na temat funkcji i informacji ?e niema ?adnych gwarancji poprawno?ci zliczania

oraz ?e zegar na SystemClock podane jest z wewn?trznego oscylatora 8 MHz. 

Funkcja zegara znajduje si? w stm32f10x.c ale nic tam nie modyfikujemy w ustawieniach. 

Je?li zegar jest 8.000.000 Hz i je?li korzystamy  przerwania co 8000 cykli zegara, wi?c  w sumie

otrzymujemy 1000 przerwa? na sekund? (tj. co 1 ms ). Tak wi?c, gdy chcemy u?y? przerwania  SysTick na ustawieniach  SystemCoreClock/1000,  zawsze maj? one po 1ms . 

Funkcja SysTick_Config (SystemCoreClock / 1000), która zwraca warto?? 1ms mo?e wygl?da? nast?puj?co: 

Uwaga !!

(dotyczy to tylko przypadku gdzie jest prawid?owo ustawiony zegar oraz jego ?róg?o  Je?li ustawimy niew?a?ciwe ?ród?a zegara, otrzymamy jakie? kocie impulsy zamiast dok?adnego czasu! 

Je?li zmienimy cz?stotliwo?? zegara systemowego, trzeba uwa?a? bo zmieni si? te? SysClock!

Ustawianie obs?ugi przerwa? 

Wi?c za?o?enie zdarzenia, które powoduje przerwanie SysTick, ale musimy jeszcze okre?li?, co chcesz robi? w tym przerwaniu.

Pewnie ju? wspomina?em, ?e stm32f10x.c zawiera obs?ug? przerwa?. Wi?c je?li chcemy  

u?y? przerwania w odpowiedniej cz??ci kodu musimy wprowadzi? nazw? funkcji. Dzia?anie jej jest nast?puj?ce :

Natomiast funkcja Nasz_Delay() jest zdefiniowana w taki sposób w naszym pliku main.c:

Mo?na powiedzie? ?e nasze delay zajmuje miliony cykli, co mo?e wygl?da? tak:

UWAGA !! Zauwa?cie ?e warto?? opó?nienia jest pomniejszana o funkcj? CzasDlaDelay !!

 

Ostateczny kszta?t programu

No wi?c dobrn?li?my do miejsca gdzie powinni?my zobaczy? ca?y zamotany kod naszego mrygacza

diodowego na Discovery … ale zrobi? tu inaczej zamieszcz? w REPO ca?y projekt ze sk?pymi

komentarzami, a wy sami dojd?cie co mia?em na my?li i zobaczcie sami na ile sposobów mo?na

w mniej lub bardziej ciekawy sposób miga? diodami. W tym programie po prostu zmieniamy sobie

szybko?? migania poprzez przytrzymanie przycisku :)

 

Ca?y projekt dla TrueStudio 3.2 : 

[dm]3[/dm]

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay