Tässä artikkelissa tutustutaan yllä olevaan Geehy APM32F407VG mikro-ohjaimen kehitysalustaan ja käydään läpi kuinka kehitysympäristö asennetaan kuntoon, kuinka laitetta ohjelmoidaan ja debugataan. Tämä kehitysalusta poikkeaa esimerkiksi Nucleo-tyyppisistä kehitysalustoista siten, että tämä kehitysalusta tarvitsee kunnolliseen debuggaukseen erillisen ohjelmointi- ja debuggauslaitteen - vaikkakin itse levyn prosessori voidaan ohjelmoida USB-kaapelin avulla. Tämä kehitysalusta ja tarvittavat ohjelmointilaitteet löytyvät Partcon verkkokaupasta.
Itse mikroprosessori on teollisuuteen suunniteltu Arm Cortex M4F ytiminen, 168 MHz:n nopeudella toimiva lutikka. Flash ohjelmamuistia piiri pitää sisällään 1 Megatavun ja SRAM:ia löytyy 192 kilotavua. Piiri pitää sisällään monipuolisesti eri oheislaitteita (peripherals) ja tässä laudassa käytettävissä on 76 I/O-pinniä. Lue datoista lisää osoitteessa: https://www.geehy.com/uploads/tool/APM32F405xG%20407xExG%20datasheet%20V1.1.pdf.
Sisällysluettelo
1. Ohjelmointiympäristön asennus
Ohjelmointiympäristönä voi käyttää Eclipseä, IAR:ää, Keil MDK:ta ja Visual Studio Codea. Tässä kirjoituksessa keskitytään Keil MDK-ARM uVision ohjelmointiympäristöön (https://www.keil.com/demo/eval/arm.htm). Tarkemmin sanottuna käytämme tämän demolaudan kanssa MDK-Community Edition versiota, mitä voidaan yksityiskäytössä ilmaiseksi hyödyntää ilman ylimääräisiä tai kalliita lisenssejä.
Ohjeet asennukseen löytyvät yllä olevasta linkistä, mutta käydään se lyhyesti myös tässä läpi.
Aloitetaan asennus lataamalla uVision ohjelmisto seuraavasta osoitteesta: https://www.keil.arm.com/mdk-community/. Kun asennustiedosto suoritetaan, avautuu alla olevien kuvien mukaisia ikkunoita, joista naksutellaan Next napilla eteenpäin ja täytetään kenttiä sitä mukaan kun niitä tulee vastaan. Asennus on hyvin yksinkertainen ja nopea prosessi ainakin SSD-levyille.
Normaalit lisenssisuostumukset raksitaan kyllä...
Asennuspaikan valinta kannattaa antaa olla oletusarvoiset tiedostopolut. Kokeilin ensimmäisellä kerralla asentaa eri levylle, mutta sitten itse mikroprosessorin ohjelmointityötä aloittaessa alkoi ongelmia tulemaan ja jouduin poistamaan asennuksen ja tekemään uusiksi oletusarvoilla.
Asiakastietokenttään voi huoletta oman nimen kirjoittaa ja yrityksen nimeksi voi laittaa mitä vain, itse kirjoitin vain myself tähän kohtaan. Lisenssin kannalta tällä ei harrastelijapuolella ole suurta merkitystä.
Asennuksen aikana tietokone saattaa kysellä sallitaanko juttuja ja niihin vastataan tietysti kyllä.
Kun asennus on suoritettu loppuun ilmestyy työpöydälle pikakuvake Keil uVision5:
Ohjelma käynnistetään ja testataan että se lähtee toimimaan:
Seuraavaksi asennetaan lisenssi jotta ohjelmaa voidaan käyttää täysverisenä työkaluna ilman rajoituksia. Lisenssin tarkempi asennusohje löytyy aiemmasta linkistä (https://www.keil.arm.com/mdk-community/), mutta käytännössä valitaan File -> License management ja asetetaan kuvan asetukset laatikoihin:
2. Geehy tuotteiden lisäys uVisioniin
Seuraavaksi lisätään kyseisen kehitysalustan prosessori uVisioniin. uVisionin asennuksen jälkeen tietokoneella ei ole mitään tukea eri mikrokontrollereille, joita ohjelmoidaan vaan kukin haluttu laite ja sen tarvitsemat kirjastot haetaan erillisestä tietokannasta. Tätä tietokantaa hallinnoidaan Pack Installer -ohjelmalla joka löytyy valikosta Project -> Manage -> Pack Installer.
Pack Installerin vasemmasta ikkunasta valitaan valmistaja ja käytettävä laite. Oikeasta ikkunasta puolestaan asennetaan tarvittavat kirjastot "Install" nappia painamalla. Kirjaston 1.0.1 versio ei suostunut asentumaan, vaan ainoastaan 1.0.0 versio asentui mukisematta.
Kun Geehyn tuotteet on asennettu, voidaan siirtyä tutkimaan esimerkkiprojekteja tai luoda uusia tyhjästä.
3. Uuden uVision projektin luominen
Uuden projektin luominen voidaan tehdä valikosta Project -> New uVision project, mutta tämä on hieman vaivalloista. Helpointa onkin ladata Geehyn SDK sivuilta: https://global.geehy.com/design/software, tässä tapauksessa käytössä on versio nimeltä APM32F4xx_SDK_V1.4 (linkki: https://global.geehy.com/uploads/tool/APM32F4xx_SDK_V1.4.zip) ja kun paketti ladataan, voidaan sieltä paljastuvia esimerkkiprojekteja käyttää pohjana uusien projektien luontiin.
Valitaan siis File -> Open... ja selataan SDK-kansiota niin pitkälle että löydetään haluttu MDK-projektitiedosto. Esimerkiksi tyhjä projektipohja löytyi seuraavasta polusta:
Geehy SDK\Examples\Template\Template\Project\MDK\Template.uvprojx. Geehy SDK on minun itse nimeämä kansio, kun kansio purettiin zipistä.
SDK-kansiosta voidaan toki avata muitakin esimerkkejä ja niitä kannattaakin availla ja katsoa millä tavalla mitäkin laitetta käytetään. Kannattaa kuitenkin muistaa, että muutokset esimerkkiprojekteihin tallentuvat niihin, joten kopioita kannattaa hyödyntää. Esimerkkikoodeja avatessa ensimmäistä kertaa, voi tulla vastaan alla olevan kuvan mukainen virheilmoitus Build Output -ikkunaan:
Ohjelma tässä tilanteessa kysyy valitaanko eri mikroprosessori , kuin mikä esimerkkikoodeissa on ollut. Vastataan tähän kyllä, jolloin voidaan valita oikea mikroprosessori.
Kyllä-napin painalluksen jälkeen avautuu "Select Device for target..." -ikkuna, mistä voidaan valita käytettävä prosessori. Asetetaan prosessori oikean tyyppiseksi, eli APM32F407VG.
Jos nyt koitetaan buildata tai kääntää projekti konekielelle...
...niin Build Output konsoliin ilmestyy seuraava herja:
Tämä tarkoittaa sitä, että meidän tarvitsee korjata oletusarvoinen kääntäjä sellaiseksi joka uVisionin asennuksen mukana tuli, eli valitaan "Options for Target" nappi valikosta (kuva alla)...
Sen jälkeen asetetaan Target-välilehdeltä Code Generation alasvetovalikosta asetus "Use default compiler version 6".
Kun nyt klikataan build-nappia uudestaan, pitäisi käännöksen ja linkityksen mennä kuten pitääkin ja Build Output -ikkunaan tulee tekstit onnistuneesta käännöksestä.
Kun avataan main.c tiedosto editorinäkymään, niin nähdään esimerkkikoodin sisältö, mihin voidaan nyt muutoksia alkaa kirjoittamaan. Tässä kuvan tapauksessa oli avattuna "Template"-niminen esimerkki.
Eli pienen säätämisen jälkeen ohjelmointiympäristö on nyt valmis käytettäväksi.
4. DAP Debuggerin käyttäminen
Käytössä on kuvan mukainen DAP Debugger, jota voidaan ohjelmointiin ja debuggaukseen käyttää ja kaikki tarvittava softa tulee uVisionin asennuksen mukana, joten ylimääräisiä ohjelmia ei tarvitse ladata.
Klikataan "Options for Target" nappia ja välilehdeltä debug valitaan CMSIS-DAP Debugger, ja sen viereisestä "Settings" napista klikataan auki uusi ikkuna, mistä valitaan Geehy CMSIS-DAP Debugger.
Itse ruksailin vielä oikeasta alanurkasta "Download to Flash" ruksin päälle, jolloin debuggauksen käynnistyessä ohjelma ladataan mikrokontrollerin muistiin ja se siellä myös pysyy vaikka virrat otettaisiin pois päältä. Tämä on tietysti makuasia, mutta itse tykkään käyttää näitä vekottimia tällä tavalla.
Kehitysalustan ohjelmointia varten ei kuitenkaan ole aivan pakollista hommata erillisiä lisälaitteita, vaan mikroprosessorin pystyy ohjelmoimaan pelkän USB-kaapelinkin avulla. Kappaleessa 5 on kerrottu tästä lisää.
Debuggerin toiminnan demonstroimiseksi avataan esimerkkiprojekti GPIO_Toggle ja kytketään debuggeri J5-liittimelle. Sen lisäksi kytketään USB-liitin tietokoneeseen, jotta kehitysalustaan tulee sähköt päälle, sillä DAP debuggerilaite ei itsessään sisällä sähkön syöttöä kohdelaitteelle.
Kun debuggerin asetukset ovat oikein, voidaan ohjelma käynnistää debug-moodissa näppäinyhdistelmällä CTRL+F5 tai valitsemalla valikosta Debug -> Start/Stop Debug Session:
Ohjelma käynnistyy ja debuggeri pysähtyy pääohjelman alkuun:
Tässä debug-näkymässä voidaan nyt kaikkia mikrokontrollerin rekistereitä muokata reaaliaikaisesti ja tutkia koodin kulkua askel askeleelta tai tietyn verran (breakpointtiin asti esim.)
Koodinäkymässä keltainen nuoli vasemmassa reunassa osoittaa minkä rivin koodi tulisi seuraavaksi suoritukseen ja vaalean sininen nuoli kertoo kursorin sijainnin. Punainen pallukka on breakpointin merkki, missä koodin suoritus pysähtyy automaattisesti ja näitä breakpointteja voi käyttäjä asettaa haluamiinsa kohtiin. Koodia askelletaan rivi kerrallaan ylärivin kaarisulku-painikkeista tai F10/F11 näppäimillä ja koodi suoritetaan kokonaisuudessaan F5 painikkeella tai Run-komennon painikkeella (toinen painike vasemmalta).
Debuggaus onkin yksi kätevimmistä tavoista tutkia koodien toimintaa ja muuttujiin tallennettua tietoa. Etenkin haastavimmissa projekteissa siitä on usein suuri apu ongelmien selvittelyssä.
5. Ohjelmointi DFU:lla ilman lisälaitteita
DFU tarkoittaa Device Firmware Upgradea ja se on USB-yhteyden yli tapahtuva laiteohjelmoinnin menetelmä. Edistyneemmät mikroprosessorit tukevat ohjelmointia DFU:n avulla natiivisti, eli ilman mitään "ylimääräistä kikkailua" laitetasolla.
Demolautaa voidaan ohjelmoida myös ilman debuggeria ja se tapahtuu seuraavasti.
- Kytketään jumpperi BOOT0 tilaan "1"
- Kytketään USB-kaapeli tietokoneeseen
- Asennetaan DFU-laiteajuri
- Asennetaan ohjelmointisofta GeehyProg
- Ohjelmoidaan uVisionilla tehty koodi laitteelle
- Poistetaan USB-kaapeli ja asetetaan jumpperi BOOT0 "0"-tilaan
- Syötetään käyttösähkö levylle ja koodin pitäisi nyt pelata.
Numeroituja kohtia on monta, mutta monet niistä ovat aika yksinkertaisia asioita toteuttaa. Mutta esimerkin vuoksi käydään ne seuraavaksi askel askeleelta läpi.
Vaihe 1:
Kytketään jumpperi BOOT0 kehitysalustalla toiseen reunaan:
Vaihe 2:
Kytketään USB-kaapeli tietokoneeseen. Laitehallinnasta voidaan nyt tarkistaa, että tietokone löytää APM32 mikroprosessorin DFU-modessa.
Vaihe 3:
Asennetaan DFU-laiteajuri tietokoneelle. Laiteajuri voidaan ladata Geehyn sivuilta osoitteesta: https://global.geehy.com/design/software. Ajuripaketin sisällä on myös erillinen ohje tähän, mutta yksinkertaisesti laitehallinnan kautta asennetaan uusi ajuri valitsemalla hiiren 2-napilla "Install Driver" ja valitsemalla laiteajurin tiedostot. Kun asennus on suoritettu niin Windows ilmoittaa että ajurit ovat onnistuneesti asennettu. Ajuripaketissa on ajurit sekä 32-bittiselle että 64-bittiselle Windowsille.
Vaihe 4:
Mikrokontrollerille ladattava sovellus saadaan ohjelmoitua GeehyProg-ohjelmalla. Se voidaan ladata seuraavasta linkistä: https://global.geehy.com/design/software. Asennuksen aluksi Windows antaa melko varmasti varoituksen että ohjelman tekijä on tuntematon, mutta tämän varoituksen jätämme omaan arvoonsa.
Kun klikataan "Run anyway" avautuu asennusohjelman perinteiset ikkunat.
Asennusohjelman polun voi vaihtaa haluamakseen, mutta koska kyseessä on varsin pieni ohjelma niin minä annoin asennuksen mennä C-asemalle oletuspaikkaan.
Kun klikataan next niin asennus alkaa. Asennusaika SSD-levylle ei ole montaa sekuntia ja lopuksi tulee kuittausikkuna:
Ohjelma on nyt valmis käytettäväksi.
Vaihe 5:
uVisionilla tehty koodi täytyy ensin saada .bin tai .hex muotoon. Olen tässä esimerkissä avannut GPIO_Toggle -esimerkkikoodin ja "Option for target" ikkunan Output välilehdeltä ruksinut .hex tiedostomuodon päälle. Tällä valinnalla out-nimiseen kansioon tulee käännöksen (Build) jälkeen .hex -niminen tiedosto, joka voidaan ohjelmoida GeehyProg-ohjelmalla.
Hex-tiedoston sijainti on seuraavassa polussa oletuksena: GPIO_Toggle\Project\MDK\Out\APM32F407\. "Select Folder for Objects" kansiosta voidaan saada generoidut tiedostot myös muuhun sijaintiin halutessaan, mutta yleensä selkein paikka on samassa tiedostopuussa kuin itse lähdekooditkin.
Avataan nyt aiemmin asennettu GeehyProg ohjelma. Valitaan vasemmalta USB ja connect napista yhteys auki.
Seuraavaksi valitaan ohjelma joka halutaan ladata, eli tässä tapauksessa GPIO_Toggle.hex.
Update napilla ohjelma latautuu mikroprosessorille ja homma on sitä myöten selvä.
Vaihe 6:
Poistetaan varuilta sähköt kortilta ja siirretään BOOT0 jumpperi takaisin 0-paikkaan.
Vaihe 7:
Kytketään sähköt päälle tai jos olet vain siirtänyt BOOT0 jumpperin ilman sähköjen katkaisua, paina reset-kytkintä. Ladattua koodia aloitetaan nyt suorittamaan ja ledien pitäisi vilkkua, mikäli GPIO_Toggle-esimerkkiä käytit.
6. Kohdattuja ongelmia
Ongelma:
Pack Installerista ei saa asennettua Geehyn kirjastoja.
Korjaus:
Pitää ensin asentaa 1.0.0.
7. Yhteenveto
Kaikkinensa tämän kehitysalustan käyttöönotto ei montaa tuntia ottanut, mutta koska tein samalla tätä "tutoriaalia", niin aikaa meni useampi ilta tietoja koostaessa ja varmistuessa siitä, että asiat voidaan toistaa esitetyssä järjestyksessä.
Vaikka tässä kirjoituksessa ei kehityslautaan vielä varsinaisesti mitään erikoista rakennettukaan, on seuraavassa kirjoituksessa tarkoituksena kytkeä kehitysalustaan muitakin komponentteja ja käyttää APM32F407 prosessorin oheislaitteita hieman kattavammin.