STM32

Upotreba jeftinih STM32 ARM Cortex M modula (u mbed okruženju)

Studiji Elektrotehnike, Mehatronike i Računarstva na Tehničkom veleučilištu u Zagrebu su u svoju nastavu uveli predmete vezene uz mikroupravljače, odnosno uz ugradbene elektroničke sklopove. Razvoj takvih sklopova nije moguće odraditi samo teoretski na predavanjima, već je potreban i praktičan rad sa sklopovima.

Na tržištu postoji cijeli niz različitih mikroupravljača (ARM Cortex M, Microchip PIC, AVR, 8051 derivati, TI MSP430), te je potrebno odabrati platformu za razvoj. Studij računarstva se opredjelio za Arduino platformu, dok su studiji Elektrotehnike i Mehatronike kao primarnu platformu odabrali mbed, koji koristi ARM Cortex M mikroupravljače.

Mbed je programski dio brze razvojne platforme za ugrabene uređaje. Sklopovski dio je na početku bio podržan sa samo jednim tipom razvojne pločice MBED LPC1768. Ova pločica koristi vrlo moćan NXP LPC1768 mikroupravljač, koji je ARM Cortex M3 s 512kB FLASH (programske) memorije i 32kB RAM-a, i podržava sve popularnije komunikacijske protokole. Ovu pločicu je TVZ za potrebe oba odjela kupio u dostatnim količinima za laboratorijske vježbe.

Ubrzo se pokazalo kako je razvojna pločica iznimno snažna, i prejaka za većinu predviđenih vježbi te studentskih projekata. Istovremeno je bila dosta skupa u odnosu na konkurenciju. Kad je mbed platforma počela podržavati i druge razvojne pločice odlučeno je pronaći jeftiniju, koja bi olakšala nastavnicima u strepnji da će studentima razvojna pločica pregorjeti, ali i koja bi omogućila studentima da naučeno ponove kod kuće (i razviju nove projekte i produkte). Kao pogodne zamjene pokazale su se platforme bazirane na STMicroelectronics mikroupravljačima (NUCLEO) i NXP Freedom mikroupravljačima. Tako je kupljeno nekoliko STM32 Nucleo razvojnih pločica za probu, po cijenama od oko 10 britanskih funti po komadu (cijene na Farnellu, kliknuti na Products). Kupljena je i veća količina NXP Freedom KL25Z razvojnih pločica koje koštaju otprilike jednako kao STM32 pri kupovini online.

Stoga se u nastavi može preporučiti korištenje neke od ovih razvojnih pločica - 10 funti je nešto manje od 100 kuna, što je prihvatljiva cijena za ovakav razvojni alat. Pločice su direktno podržane u mbed sustavu, te postoji dobra dokumentacija koju je moguće pratiti.

No što je sa studentima kojima je i ovo visoka cijena, ili bi željeli imati nekoliko modula. Za njih postoji još jedna opcija, a to je nabavka jeftinih STM32 modula s eBaya ili drugih online prodavaonica. Gotovo svi takvi moduli koriste mikroupravljač STM32F103C8T6 , pa je to najbolja riječ za staviti u tražilicu ( eBay, AliExpress ). S cijenom od oko 2USD, moguće je (barem nazivno), umanjiti cijenu razvojne pločice i za preko 5 puta!!! Radi se o ARM Cortex M3 mikroupravljaču s 64kB FLASH memorije, 20kB RAM-a, 37 ulatno izlaznih linija (GPIO), 10 AD kanala, 4 Timera, podrškom za USB, CAN bus, 2 x I2C, 2xSPI, 3xUSART!

Razvojne pločice s ovim STM32 mikroupravljačem su se prvo naveliko pojavile kao LeafLabs Maple. Tvrtka LeafLabs je htjela izraditi Arduino kompatibilnu ARM pločicu - u to vrijeme Arduino platforma je podržavala samo AVR mikroupravljače, a LeafLabs je želio pisanjem odgovarajućih Arduino funkcija i korištenjem ARM compilera dati jednostavnost Arduina na moćnijem ARM mikroupravljaču. U tome nisu uspjeli, ali su otvaranjem shema za svoju pločicu Maple mini potaknuli kineske proizvođače na izradu kopija.

Generičke kineske kopije Maple minija se dijele na tzv. "Red pill", "Blue pill" i najnovije "Black pill". Osim u boji tiskane pločice postoje i male razlike u rasporedu nožica, a na što programer mora obratiti pozornost (nažalost slike ispod su okrenute 180 stupnjeva u odnosu jedna na drugu).

Pločice imaju USB priključak na jednom kraju, a linije za programiranje korištenjem ST Link programatora i debuggera na drugom kraju. Originalni ST Link programator košta oko 20eura, dok kineske kopije koštaju oko 5eura. Zanimljivo, sam programator je u osnovi STM32 pločica, skoro identična razvojnoj pločici, te postoji otvorena programska podrška za ove pločice koje će od nje napraviti programator/debugger. NUCLEO razvojne pločice imaju ugrađeni ST Link programator do čijih se komunikacijskih linija može doći, te je isplativije kupiti takvu razvojnu pločicu (jer dolazi s mikroupravljačem i ST Link programatorom) nego sam ST Link programator.

Ove razvojne pločice nisu službeno direktno podržane u mbedu okruženju, ali je podržana slična pločica NUCLEO-F103RB. Ova razvojna pločica koristi mikroupravljač STM32F103RBT6, a to je varijanta koja ima više ulazno izlaznih linija(51 naspram 37 za kineski modul), više kanala za AD pretvorbu (16 napram 10) i duplo više FLASH memorije (128kB naspram 64kB). Ostale karakteristike su identične. Stoga se može neslužbeno koristiti mbed na ovim razvojnim pločicama uz neka ograničenja, i to i u online verziji, i u offline verziji u CooCox razvojnoj okolini.

Za ove razvojne pločice moguće je napisati program i u Arduinu. Tvrtka LeafLabs nije uspjela izraditi potpunu Arduino kompatibilnost, ali je njihov rad (programski kod je bio otvoren (eng. open source)) nastavila grupa volontera koji se i najviše brinu za dobro dokumentiranje sustava.

Programi se mogu napisati i koristeći ARM C. Uobičajena razvojna okruženja su Keil, Eclipse i prije spominjani CooCox.

S obzirom na mogućnosti razvoja u mbed i Arduino apstrakcijskim modelima, te puno niže u C programskom jeziku, ova je platforma najbolja za ulazak u svijet mikroupravljača, ali i za napredniji razvoj na 32 bitnim mikroupravljačima.

Veći problem od osmišljavanja programskog koda je sam upis tog koda u mikroupravljač. Moguće opcije su:

  1. Korištenje USB Bootoloadera (ne radi na svim razvojnim pločicama, zahtjeva prvo ubacivanje koda na neki od drugih načina, srednje teško ako se ne radi o Arduino okruženju, ne treba dodatne komponente)
  2. Korištenje USB-TTL UART konvertera i programiranje kroz USART Boot0 bootloader (radi na svim razvojnim pločicama, lako izvesti, potrebnan je USB-TTL UART konvertor) PREPORUČENO POČETNICIMA
  3. Direktno korištenje ST Link V2 programatora (radi na svim razvojnim pločicama, lako izvesti, potreban je ST Link V2 kao zasebni uređaj ili sa NUCLEO razvojne pločice)
  4. Korištenje ST Link V2 kroz OCD debugging sustav (radi na svim razvojnim pločicama, teže izvesti ali daje dodatne mogućnosti, potreban je ST Link V2 kao zasebni uređaj ili sa NUCLEO razvojne pločice)
  5. Korištenje Black magic probe (radi na svim razvojnim pločicama, teže izvesti ali daje dodatne mogućnosti, potrebno nabaviti BMP ili preprogramirati jednu "pill" pločicu u BMP)

USB Bootloader

USB na "pill" pločicama je standardno isključen, i koristi se samo za napajanje. Moguće ga je iskoristiti za komunikaciju sa računalom, ali i za programiranje novog programskog koda.

Za početak je potrebno provjeriti radi li uopće USB. Mnogim "pill" razvojnim pločicama nedostaje pull-up otpornik od 4k7 ili 10k na pinu PA12 (USB D+).

Ako USB radi i želi se koristiti za programiranje, potrebno je instalirati USB Bootloader a važno je pripaziti koja se verzija razvojne pločice posjeduje prilikom te instalacije. Bootloader je programski kod koji se pokreće odmah nakon RESET-a uređaja, i odlučuje kako i odakle će se uređaj pokrenuti. Na klasičnom PC-u bootloader može odabrati između pokretanja Linuxa i Windowsa, dok se na mikroupravljačima bootloaderi koriste za odabir između naprednom moda programiranja ili normalnom pokretanja programa u mikroupravljaču.

USB bootloader se mora instalirati nekom od drugih metoda programiranja ali nakon toga je lako koristiti taj način programiranja koristeći Arduino (većina dokumentacije upravo opisuje Arduino) ali je moguće programirati koristeći komandnolinijske alate.

USB-TTL UART Boot0 metoda

Ova je metoda uvijek dostupna i dosta je jednostavna, ali zahtjeva dodatni sklop te prebacivanje jednog jumpera na razvojnoj pločici.

STM32F103 imaju ugrađeni Bootloader na serijskom portu 0. No kako klasičan PC ne može davati odgovarajuće naponske razine i signale, potreban je konverter - USB-TTL UART konverter baziran na nekom od popularnih integriranih krugova: CH340, FTDI, Prolific ili Silicon labs.

Potrebno je spojiti RX i TX linije između USB-TTL i razvojne pločice, te pokrenuti program Flash Loader (ako se radi o windowsima), ili neki od komandnolinijskih alata (sve platforme).

Pogledajte upute (1 , 2, 3) kako to napraviti, ili pogledajte video.

ST Link direktno

Moguće je programirati binarnu datoteku u mikroupravljač koristeći ST Link V2 programator / debugger.

  1. Potrebno je ispravno spojiti "pill" na ST Link V2. Pogledajte video ali pripazite da je to i dalje ispravan raspored. Neki kineski klonovi programatora imaju različite rasporede gdje se nalazi koja linija. NUCLEO pločica ima lako dostupne pinove za programiranje, ali opet treba paziti gdje ide koja.
  2. Potrebno je instalirati ST-Link utility (samo Windows), koji će uprogramirati odgovarajući kod. Moguće je izvesti upload programa i kroz komandnolinijske alate (sve platforme).
  3. Kad je pripremljen prevedeni kod (mbed, Arduino ili direktno C compiler), potrebno je uprogramirati kod korištenjem ST-Link utilityja (video) ili iz komandne linije (primjer za Linux)

ST Link se lakše može koristiti iz razvojnih okruženja poput CooCoxa., a može se koristiti i za debuggiranje.

ST Link V2 OCD / Black magic probe

Ovo su metode koje uz programiranje koda omogućuju i debuggiranje tog koda direktno iz mikroupravljača. Ovi postupci su stoga skoro pa nepotrebni u slučaju korištenja mbed ili Arduino platformi, ali su nadasve korisni u direktnom radu. Lako je pronaći primjere za korištenje u Visual studiu, Eclipseu (OCD), ili kroz komandnolinijski GDB (BMP) (ovdje je primjer s video snimkom)

DODATNO: DRAG&DROP PROGAMIRANJE

Jedna od prednosti klasičnih mbed platformi je Drag&Drop programiranje, koje je iznimno praktično. Nažalost, STM32F103 nema tu opciju korištenjem USB Bootloadera, niti je pružaju ST LINK ili Black magic probe.

No ta opcija se može simulirati pomoću alata za monitoriranje nekog direktorija. Autor ovog teksta je imao uspjeha s alatom TheFolderSpy, kojem je dan direktorij i ekstenzija datoteka koje su interesantne (*.bin). Potom se pokreće komandnolinijski alat koji programira mikroupravljač preko ST Link V2.