2016-03-05

STM8 mikrovaldiklių programavimas

STM8 yra kompanijos "STMicroelectronics" 8-bitų mikroprocesorių gaminių linija. Joje rasime aibę šios serijos mikrovaldiklių, skirtų bendro pobūdžio skaitmeniniams signalams apdoroti. Vienas iš tokių egzempliorių - STM8S103F3P6, kurį gavau ir nusprendžiau patreniruoti, o rezultatus aprašyti šiame straipsnyje. Įdomiausia man, kaip programuojami šie įrenginiai, kokios jų galimybės bei pritaikymas. Jeigu norite apie tai sužinoti plačiau arba pradėti dirbti su STM8 gaminiais - skaitykite šį straipsnį toliau. Taip pat primenu, jog praeityje jau analizavome, kaip dirbti su kitos firmos - Atmel gaminiais, o dabar tą patį bandysime atlikti ir su STM8.







I. Intro

STMicroelectronics tarp mėgėjų sparčiai populiarėjanti Šveicarijos ARM (ir ne tik) mikrovaldiklių gamintoja. Nors įmonė įkurta dar 1987m. ir nėra tokia žinoma, kaip Microchip ar Atmel, tačiau turi kuo pasigirti, tai - savo gaminiais. Vienas iš šio gamintojo populiarumo faktorių, tai - labai pigūs mikrovaldikliai. Paprasčiausią projektą galima pradėti investavus vos porą dolerių/eurų. Progravimo įrankiai taip pat prieinami gana paprastai ir nereikalauja didelių sąnaudų. Pagriebiau paeksperimentavimui ~1 USD kainuojantį STM8S103F3P6 moduliuką (minimum system board) bei programatorių. Reikia atkreipti dėmesį, jog ant modulio esanti USB jungtis reikalinga tiekti +5V maitinimą, tačiau programavimui nėra skirta.


II. STM8S103F3P6 galimybės



Kaip ir minėjau anksčiau - STM8S103F3P6 yra paprastas 8-bitų mikrovaldiklis, kurį galime rasti TSSOP20 įpakavime ir dar keliuose kituose. Turimoje modulio plokštėje kaip tik TSSOP variantas ir įlituotas. Analizuojant oficialų mikrovaldiklio aprašymą (datasheet) galime rasti visą reikalingą informaciją apie jį. Mikrovaldiklis dirba 16 MHz dažniu ir jam nebūtinas išorinis kvarcinis rezonatorius, kad galėtų veikti nurodytu greičiu. Pakanka gamykloje jau įmontuoto vidinio RC osciliatoriaus, kad ši riba būtų sėkmingai pasiekta. Be abejo, galime prijungti ir 1-16MHz išorinį, stabilesnio dažnio, kvarcinį rezonatorių. Taip pat pastebėkime, jog mikrovaldiklyje yra nedaug - tik 8KB Flash atminties programai saugoti, o gali būti maitinamas įtampa iš intervalo 2.95-5.5V. Iš periferinių įrenginių turime 8 ir 16 bitų laikmačius, nemažą kiekį GPIO ir pertraukimų, ADC, I2C, UART, SPI ir kitus gardumynus. Taigi šį mikrovaldiklį būtų galima palyginti su Atmel Atmega8 ar panašaus lygio kitų firmų 8-bitų gaminiais. Naudojamos modulio plokštės schema taip pat pateikiama žemiau.


III. Programatorius

Mikrovaldiklio programavimui reikia nusipirkti ST-LINK v2 USB programatorių. Jie prieinami ebay.com ir kitose parduotuvėse. Tokie mini ST-LINK programatoriai yra kopijos oficialiai STMicroelectronics palaikomų programatorių, tačiau savo funkcionalumu nė kuo nenusileidžia tikriems. Be to, kopijų programinę įrangą (firmware) galima kuo puikiausiai atnaujinti su oficialia ST programine įranga. USB įrenginiu galima programuoti ne tik 8-bitų bet ir 32-bitų ST ARM mikrovaldiklius, tad jis gana universalus - 8 bitų mikrovaldikliai programuojami per SWIM sąsają, o sudėtingesni 32-bitų ARM per standartizuotą ARM SWD sąsają. Pagal ST pateikiamą informaciją per SWIM galime programuoti/flashint'i iki 145baitų/ms (~145kb/s) greičiu. Na ir be abejo, reikia paminėti, kad tai antroji-patobulinta programatoriaus versija.

Tam, kad programatorius būtų atpažintas Windows OS, reikia įsirašyti tvarkykles. Jas galima rasti pas gamintoją.

Na ir baigiant apie įrankius - tam tikras "vištos ir kiaušinio" paradoksas. Jeigu išardytume ST-LINK programatorių, tai jo viduje rastumėme kitą STM 32-bitų mikrovaldiklį, pvz.: STM32F101C8T6. Taigi, norint užprogramuoti ST mikrovaldiklį, tai darome per tokį patį ar panašų mikrovaldiklį. Šitas paradoksas nėra naujiena, kadangi panašūs dalykai vyksta is su Atmel ir kt. firmų gaminiais.


IV. Programavimo įrankiai

Mikrovaldiklis programuojamas ir derinamas per SWIM (single wire interface module) sąsają.  Tam, kad prijungti mikrovaldiklį prie ST-LINK v2 gali prireikti prilituoti keletą išvadų. Prijungimas paprastas - mus domina, RST, GND, SWIM ir 3.3V išvadai. Prie tokių pačių (atitinkamų pavadinimų) mikrovaldiklio kojelių  jungiame ir programatorių. Dėl kažkokių priežasčių (galbūt blogo kontakto) programavimo GND jungtį teko perjungti ant kito analogiško GND išvado, kitaip modulis neveikia bei nedega lemputės.

Programavimui ir registrų valdymui naudojama kita gamintojo pateikiama (datasheet) dokumentacija (Programming manual). Programavimo principai išlieka vienodi tarp visų mikrovaldiklių - parašome registrus valdančią programą su C ar C++ kalba, sukompiliuojame kodą į mašininį kodą (instrukcijas) ir gautą .hex pavidalo failą įrašome į mikrovaldiklio atmintį (flash) per programatorių.

Taigi, dabar paanalizuosime, kaip galime programuoti šiuos mikrovaldiklius. Programavimui STmicroelectronics pateikia keletą priemonių: STM8 įrenginių aprašų bibliotekas (C headers) kartu su STM8 periferinių prietaisų valdymo biblioteka bei programinius įrankius STVD, STVP bei STMStudio. Visas gėrybių sąrašas čia.

STVP (ST Visual Programmer for programming ST7, STM8 and STM32) yra įrankis sukompiliuotam kodui įrašyti į mikrovaldiklį bei leidžiantis nuskaityti Flash atminties turinį ir jį pavaizduoti grafiškai. Yra ir komandinės eilutės klientas "STVP_CmdLine", kuriuo įrašymą galima automatizuoti praleidžiant vartotojo sąsają.

STVD (ST Visual develop IDE for developing ST7 and STM8 applications) yra IDE įrankis skirtas programos kodui rašyti (tekstinis redaktorius) su galimybe ir kompiliuoti kodą.

STM Studio (STM Studio run-time variables monitoring and visualization tool for STM8 and STM32 ) yra realaus laiko kintamųjų reikšmių monitoravimo ir peržiūros programa. Su ja galime vizualiai stebėti kaip kinta vienas ar keletas kintamųjų reikšmių/atminties registrų reikšmių ir rezultatus matyti grafiko ar histogramos pavidalu.

Džiugu, kad STmicroelectronics bent šiek tiek pasistengia dėl savo klientų ir pateikia įrankius darbui. Apie įrankių naudojimą - jau visai netrukus.

V. SDCC (Small Device C Compiler) kompiliatorius

Programavimui mums reikia įsirašyti anksčiau minėtus STVP ir STVD įrankius.

Taip pat papildomai reikia parsisiųsti periferinių prietaisų valdymo biblioteką - jos paskirtis visas žemo lygio registrų valdymo komandas paslėpti nuo naudotojo ir pateikti tik C kalbos klases ir metodus, kurie leistų lengviau ir aukštesniu lygiu dirbti su mikrovaldiklių periferija (UART/I2C/SPI/ADC/laikmačiai ir t.t.). Apie šią biblioteką šiame straipsnyje nekalbėsiu, tad ji lieka skaitytojo analizei, tačiau iš jos naudosime reikalingus C kalbos .h failus.

Anksčiau pagyriau STmicroelectronics, tačiau dabar atėjo metas ir papeikti - pirmiausia, kad duoda tik asemblerio kompiliatorių su STVD įrankiu. Jeigu norime programuoti su C kalba, turime ieškoti kito kompiliatoriaus, kuris palaiko STM8 įrenginius. ST mums siūlo įvairias mokamas alternatyvas: IAR Workbench, Cosmic Software, Raisonance ir t.t. Ši politika tikrai neprisideda prie STM mikrovaldiklių populiarinimo. Prie mokamų variantų sugrįšime vėliau - kitame straipsnyje. Laimei taip pat jau yra ir atviro kodo kompiliatorius - SDCC, kuris palaiko C kodo kompiliavimą STM8 įrenginiams.

Taigi parsisiuntus ir įsirašius SDCC galime toliau bandyti programuoti pirmąją STM8S programą. Pirmoji programa - tai paprastas ir tradicinis lemputės mirksiukas. Kodo failas "leds.c" pateiktas žemiau.



Kode prisidedame reikalingus .h failus su C kalbos "include". Programos main metode nustatome, jog PB5 išvadas bus naudojamas skaitmeniniam išvedimui, o cikle įjungiame/išjungiame LED lemputę bei kartojame viską iš naujo po nurodyto laukimo laiko.

Norint sukompiliuoti šį kodą mums reikės paleisti duotą "build.bat" failą padėjus šalia .c failo. Prieš paleidžiant reikia pasimodifikuoti failo viršuje esančią konfigūraciją. Svarbiausia pakeisti INCLUDEPATH reikšmę. Ji turi rodyti ten, kur įrašytas periferinės bibliotekos "inc" katalogas. Jame yra reikalingi STM .h failai. Taip pat verta pasitikrinti, ar kompiuterio komandinėje eilutėje veikia komandos "sdcc" bei "packihx" (yra prie sdcc). Jeigu ne, tai į sistemos PATH įrašome direktoriją, kurioje instaliuotas sdcc.exe failas.

Na ir paleidus kompilavimą turėtume gauti rezultatą panašų į parodytą žemiau:


Jeigu padarėme klaidų ar kažkas negerai, gausime taip:


Jeigu viskas sėkmingai praėjo, tai šalia .c kodo failo turėtų atsirasti .hex failas. Šį failą turime toliau įrašyti į mikrovaldiklio Flash atmintį. Tai padaryti galima su STVP programa. Ją atsidarius pasirenkame teisingą mikrovaldiklio pavadinimą, nustatome SWIM protokolą.



Toliau per File > Open atsidarome .hex failą ir spaudžiame "Program current tab" mygtuką arba per meniu Program > Current tab.


Jeigu programavimas pavyko, sėkmės pranešimai bus matomi ekrane. Kitu atveju reiktų peržiūrėti, ar viskas teisingai sujungta ir ar mikrovaldiklis tikrai yra matomas. Na ir po viso šito turėtume gauti šalia mikrovaldiklio mirksinčią lemputę.



VI. Cosmic Software kompiliatorius

Programavimą ir kompiliavimą su komerciniu Cosmic Software kompiliatoriumi aptarsime jau kitame straipsnyje, tad laukite tęsinio!

VII. Pabaiga

Štai tokia įžanga į STmicroelectronics 8-bitų mikrovaldiklių programavimą. Kaip esu anksčiau minėjęs - išmokus programuoti vieno gamintojo mikrovaldiklius, išmokti programuoti kito - bus dar lengviau. Taip pat ateityje galbūt apžvelgsiu ir ARM 32-bitų mikrovaldiklius iš ST. Tikiuosi panaudosite šią straipsnio informaciją įvairių ir įdomių projektų kūrimui ar tiesiog akiračio praplėtimui. Iki sekančio karto!


Komentarų nėra:

Rašyti komentarą