29. junija, 2017

Programiranje s HAL knjižnicami (2) – Uporaba SPI in notranje RTC ure

Revija 254 254 39 1 - Programiranje s HAL knjižnicami (2) - Uporaba SPI in notranje RTC ureRevija logo se - Programiranje s HAL knjižnicami (2) - Uporaba SPI in notranje RTC ure

V predhodnem članku, objavljenim v reviji Svet Elektronike, smo predstavili razvojna orodja, katera bomo uporabljali pri nadaljnjem razvoju vgrajene programske opreme. Tu se bomo osredotočili predvsem na uporabo STM32 HAL knjižnic, katere nam z grafičnim konfiguriranjem periferije olajšajo rokovanje z mikrokontrolerjem. V okviru članka smo predstavili osnovno delo z grafičnim orodjem CubeMX [1], namenjenim STM32 družinam mikrokontrolerjev, kjer smo izdelali osnovno aplikacijo, katera preklaplja LED diode razvojne plošče.

Revija 254 254 39 2 - Programiranje s HAL knjižnicami (2) - Uporaba SPI in notranje RTC ureV tokratni izdaji revije Svet Elektronike bomo nadgradili znanje grafičnega nastavljanja periferije, in sicer bomo dodali SPI povezavo do že poznanega LCD zaslona (128×64) [2], k temu pa bomo dodali do sedaj še neznane funkcionalnosti, in sicer sta to notranja RTC ura in stražni mehanizem (ang. watch-dog). Dodatno k temu bomo pokazali, kako lahko procesor deluje v režimu, v katerem varčuje z energijo – uporabili bomo najbolj potraten način, obstajajo še varčnejši načini, a so kompleksnejši. Aplikacija, ki jo bomo izdelali, bo tako s pomočjo RTC prekinitve bujenja (wake-up) zbujala procesor in preklapljala LED diode razvojne plošče. Pritisk uporabniškega gumba bo spremenil vsebino zaslona, a bo namerno vnesel stanje, v katerem bo stražni mehanizem zaznal neodzivnost, tako da bomo nazorno prikazali, kako deluje ta funkcionalnost.

Strojna oprema

RTC – ura realnega časa

Revija 254 254 39 3 - Programiranje s HAL knjižnicami (2) - Uporaba SPI in notranje RTC ureUro realnega časa do sedaj nismo uporabljali, a je to ključna komponenta vsakega računalniškega sistema, tudi mikrokontrolerja. Poenostavljeno povedano, je RTC računalniška ura, ki skrbi za precizno merjenje časa. Dizajn tega sklopa zahteva ogromno znanja, saj če želimo imeti izjemno precizno uro, je potrebno imeti izjemno kvaliteten kristal, opraviti statično kalibracijo, temperaturno kompenzacijo, itd. Za naše potrebe bomo interno RTC uro uporabili za generiranje prekinitve, s katero je mogoče mikroprocesor zbuditi iz spanja. Slaba lastnost interne RTC ure je, da jo izgubimo, ko mikrokontroler izgubi napajalno napetost. To se da na razvojni plošči rešiti tako, da na pin VBat pripeljemo napajalno napetost ali da v obliki zunanje komponente povežemo RTC uro na eno izmed komunikacijskih vodil procesorja.

Stražni mehanizem

Stražni mehanizem uporabljamo, da se zavarujemo pred nedelujočo napravo. Vemo, da je programska oprema podvržena hroščem, ki so v svetu mikrokontrolerjev lahko katastrofalne narave. Kaj hitro se nam pripeti, da imamo v aplikaciji hrošča, ki povzroči, da pristanemo v HardFault() prekinitveni rutini. Iz te rutine navadno ni več povratka (razen če ga sami ne sprogramiramo), kajti v njej se nahaja neskončna zanka. V tem primeru je naša naprava nedelujoča in je potreben fizični odklop napajanja ali ponovni zagon naprave, da le-ta zopet prične delovati (dokler zopet ne doseže hrošča). V takšnem primeru nam je v pomoč stražni mehanizem, ki si ga lahko predstavljamo kot odštevalnik časa – časovna vrednost je nastavljiva – in ko odštevalnik doseže vrednost 0, bo izvedel ponovni zagon procesorja. Da se to ne zgodi, mora naša aplikacija poskrbeti, da se odštevalnik intervalno ponastavlja (v obliki sekvence, spremembe stanja GPIO pina, itd.) na začetno vrednost. Torej je logično, ko aplikacija ni več sposobna ponastaviti odštevalnika, mora biti nekaj narobe z njo, zato izvede ponovni zagon mikrokontrolerja in poskusi znova. Kljub temu, da imamo napako, bo naprava večino časa odzivna!

Varčevanje z energijo

Skoraj vsi obstoječi mikrokontrolerji omogočajo takšen ali drugačen način varčevanja z energijo. Poenostavljeno povedano, energijo lahko varčujemo z nižanjem maksimalne delovne frekvence, ne definiramo GPIO pinov, ki jih ne potrebujemo, ipd. A v procesor so vgrajeni še dodatni načini varčevanja z energijo, ki so bodisi mile ali zelo restriktivne narave, kar se seveda odraža na končni porabi. Procesor STM32F4, ki ga trenutno uporabljamo, omogoča tri režima varčevanja z energijo, in sicer Sleep, Stop in Standby način. Omenimo le poglavitne lastnosti posameznih načinov:

Sleep način ustavi procesorsko jedro, stanje periferije ostane nespremenjeno, kar pomeni, da GPIO pini ostanejo v stanju, v katerem so bili pred vstopom v ta režim delovanja. Iz tega načina pridemo ob vsaki zaznani proženi prekinitvi NVIC vektorja – torej tudi systick časovnik –nadaljujemo pa iz točke vstopa v sleep način. Stop način ustavi vse ure 1.2 V domene, onemogoči PLL, HSI in HSE RC komponente ter ohranja notranji SRAM in registre. Iz tega načina pridemo ob vsaki konfigurirani EXTI liniji, delo pa nadaljujemo iz točke prehoda v spanje.

Program

Celotni članek

Programiranje s HAL knjižnicami (2) – Uporaba SPI in notranje RTC ure

2017_SE254_39