STM32F303 Discovery – 2. program (LED, tlačítko, přerušení od časovače [SysTick_Handler])

Takže tu máme druhý program, opět blikání LEDkou, ale tentokrát pomocí přerušení od časovače SysTick. Změna frekvence blikání je řešena tlačítkem (USER BUTTON). Program byl opět převzatý ze stránek mcu.cz přesněji z http://mcu.cz/comment-n2119.html. Jako pomůcka nám pomůže vývojový diagram.

Nejprve se zavolá funkce Delay() v té se provede zápis hodnoty do TimeForDelay, poté se čeká dokud není TimeForDelay = 0. Dekrementace TimeForDelay se provádí ve funkci DelayTime(), ta se volá po přerušení ze SysTick_Handler (přerušení od časovače). Jak často má k přerušení docházet je nastaveno takto:

Pro lepší pochopení tohoto příkazu ho trochu rozebereme. Do SysTick_Config se zapíše hodnota (SystemCoreClock / 1000). To znamená 8 000 000Hz / 1000 => 8000, ale protože je to if (xxx) znamená to, že dokud není SysTick_Config = 8000 zůstane v nekonečné smyčce. Proto výsledné zpoždění je 1ms.

Pokud SysTick_Config není nastaven, resp. nemá nastavený jiné hodiny, pak je frekvence odebíráná z interních hodin (8MHz).

Nastavení „co se stane, když nastane přerušení“ se nastavuje v knihovně stm32f30x_it.c

V tomto případě se pouze zavolá funkce DelayTime, v které se provedou následující příkazy:

Porovná se hodnota TimeForDelay jestli už není nulová, pokud ne, dekrementuje se hodnota TimeForDelay. Ve funkci Delay(), ale stále čekáme (while TimeForDelay != 0) dokud nebude TimeForDelay nulový. Po dalším přerušení se opět zavolá funkce DelayTime() a zkontroluje se hodnota TimeForDelay. Pokud je už nulová, neprovede se žádná další instrukce ve fci DelayTime (už žádná není), zatímco v funkci Delay() se ukončí čekání na nulovou hodnotu TimeForDelay. Poté se pokračuje další instrukcí, tedy pro zapnutí/vypnutí LED. Následuje další instrukce, kde zapíšeme ve funkci Delay() novou hodnotu TimeForDelay. A celý proces se opakuje. Tlačítkem (USER BUTTON) pouze měníme hodnotu TimeForDelay.

Následuje kompletní kód v main.c

Sdílejte článek:

Související články

Digital Discovery je nezbytným doplňkem, pokud jste používali Analog Discovery 2, ale rychlost vzorkování byla nedostatečná, počet dostupných digitálních kanálů příliš malý nebo šumy příliš velké pro přečtení dat přenášených většími rychlostmi.

Jako vývojové studio jsem si vybral Atollic TrueStudio.

Další mini pokračování z předchozího článku o programování USARTu pro STM32L100 a jemu podobné typy (STM32F0, STM32F3, STM32F4.

Další články o STM32(F7): Tutorial: STM32F746 (STM32F7 Discovery) – Tlačítkem rozsvítit/zhasnout LED Tutorial: STM32F746 (STM32F7 Discovery) – jak zapnout LED (ovládání GPIO) STM32F746 discovery a IDE AC6 (System Workbench for STM32) Jak začít s moderními mikrokontroléry a proč – STM32…

OctopusLAB (komunitní projekt české společnosti Octopus engine s.

– ROBOTboard (HW) – Octopus open source knihovny (FW) – Nastavení zařízení a periferií – ds: device setting > pinouts – ios: input-output setup – Upgrade systému – Displeje – Tlačítka – Mechatronika – Čidla a vstupy – Shrnutí V…