Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
STM32 uputstva za iskusne početnike
#1
Ovih dana prinuđen sam da po ubrzanom kursu savladam ARM CortexM0 do M4 arhitekturu i rad sa njima. Odabrao sam STM32x jer imaju jako nabavljive demo ploče, kao i tutorijale po internetu.

Elem, iako imam više godina iskustva sa Microchip PIC mikrokontrolerima, svih generacija, prelazak na STM32 ipak zahteva neke "zaokrete" u podešavanju i korišćenju. Poučen ovim iskustvom, ovde ću pokušati da vama približim neke stvari koje će vam olakšati prelazak na ove platforme a kako ih ja budem otkrivao i sebi razjašnjavao.

Uglavnom će to biti linkovi na neke korisne tutorijale, jer neću imati previše vremena da prevodim iste, ali makar da ne lutate. I konačno, pozivam i sve ostale da se priključe ovoj mojoj ideji, jer mikrokontroleri koji se danas koriste su veoma moćni, ali sa druge strane i veoma obimni sa mogućnostima i konfiguracijom, tako da je početnicima veoma teško da uz previše literature ubrzano startuju...

Polazna hardverska osnova je ova:
http://www.st.com/web/catalog/tools/FM11...253215.jsp

Odlučio sam da za IDE (razvojno okruženje) koristim Keil MDK ARM. Lepa vest je da se za Cortex M0 (STM32F0-Discovery) može dobiti legalna i besplatna licenca, a detalje možete pogledati ovde:
http://www2.keil.com/stmicroelectronics-stm32/mdk

Ovo je veoma "lagano" razvojno okruženje, tako da većina PC računara koje imamo biće sasvim dovovljna za udoban rad. Lepa iskustva sa Keil-om nosim još od generacija AT89C2051 kada sam sa njim radio. Ne spada u preterano "fancy" okruženja, ali vam zato ne trebaju GBy RAM-a da bi radio Smile


Inače, iz mog dosadašnjeg iskustva, ako savladate rad na CortexM0 mikrokontrolerima, veoma lagano možete koristiti i naredne generacije, a opet ako radite pod Keil MDK IDE-om, veoma slična koncepcija je i pod drugim okruženjima, odnosno kompajlerima. Mogu se jedino razlikovati integrisane biblioteke, kao što je slučaj sa Coocox IDE-om.

Kako je za korišćenje mikrokontrolera uvek potreban nekakav programator, za ove naše potrebe koristićemo ST-LINK, koji je programator i debuger istovremeno.
Lepa stvar je što je na Discovery ploči već integrisan ovaj programator, koga pomoću nekoliko "jumpera" možemo odvojiti od ostatka elektronike na toj ploči i koristiti ga kao samostalni programator kada konačno izradimo nezavistan uređaj od razvojne ploče.

Kako bi vam što više olakšali i primerima približili programiranje i korišćenje mikrokontrolera, ST se potrudio da za sve generacije mikrokontrolera obezbedi gotove primere i biblioteke. Takvi paketi se zovu STM32CubeFx, a unutar njih imate već pripremljene projekte i za Keil MDK u folderima MDK-ARM.
Za naš mikrokontroler linka za ovaj paket je:
http://www.st.com/web/en/catalog/tools/PF260612

Konačno, veoma, veoma korisna alatka je i STM32CubeMX:
http://www.st.com/web/catalog/tools/FM14...32cube-pr2

Ona vam omogućava da na jednostavan i grafički pregledan način odaberete na željenom mikrokontroleru periferije koje ćete koristiti i da vam finalno generiše kod sa inicijalizacijom istih. Meni lično je deo oko grafičkog prikaza mapiranja određenih periferija bio u ovom trenutku i najbitniji. Da ne bih listao gomilu dokumentacije gde da pronađem UART1,2,3 ili I2C, SPI itd... ovim alatom je to za minut gotovo. Takođe veoma korisno upozorava korelaciju i koliziju određenih periferija.


Kada smo se opskrbili potrebnim alatima, prelazimo na naredni korak a to je podešavanje ST-LINK programatora u MDK razvojnom okruženju...
Reply
#2
Kako ne bih previše pisao oko podešavanja hardvera programatora na Discovery ploči, Keil se potrudio da nam to uz lepe ilustracije sve redom napiše. Koristan dokument možete preuzeti ovde:
http://www.keil.com/appnotes/files/apnt_230.pdf

Primetićete da je u pomenutom dokumentu opisan STM32F4, ali procedura je veoma slična i za naš Discovery sa STM32F0, pa verujem da ćete se snaći oko podešavanja.

Ono što je meni napravilo nedoumicu to je podešavanje memorijskog prostora u ST-LINK-u, pa evo tog detalja koji je jako bitan da sve proradi kako treba (mi koristimo STM32F051R8T6 microcontroller sa 64 KB Flash, 8 KB RAM):


Primeri... pre nego što pređemo na primere, preporučio bih vam "prečicu" oko korišćenja pinova. Pošto svaki pin može imati razne funkcije, pull-up otpornike, čak i različite brzine, ovaj članak na veoma pregledan načim će vam približiti sve to:
http://hertaville.com/2012/07/28/stm32f0...al-part-1/
http://hertaville.com/2012/09/01/underst...io-part-2/
Reply
#3
Kada ste se upoznali sa GPIO pinovima i njihovim podešavanjima, na red dolazi kratak osvrt na to šta morate uraditi pri svakom novom projektu sa STM32:
http://www.emcu.it/STM32/STM32VLDiscover...brary.html
Reply
#4
Kratka pauza od tutorijala, ali bih podelio sa vama jedan po meni neočekivani obrt.

Kako bih se lagano uigravao sa STM32 mikrokontrolerima napisao sam moj standardni kod za prijem podata putem UART-a i tako prepoznat parametar ubacivao u tajmer interapt petlju kako bih menjao period blinkanja LED diode. Sve je to bilo super dok sam koristio "stare" STM32F0xx_StdPeriph_Driver biblioteke koje su izrađene 2012. godine. Princip rada je skoro pa kao kod PIC mikrokontrolera, što je meni i više nego dobrodošlo.

Međutim u međuvremenu je izašao novi paket biblioteka koga zovu STM32F0xx_HAL_Driver, njegovu dokumentaciju možete pogledati ovde, a trebaće vam:
http://www.st.com/st-web-ui/static/activ...105879.pdf

Koristeći ove biblioteke, trebalo bi da ste prilično kompatibilni sa većinom kompajlera kao i mikrokontrolera ARM (ili STM32) serije. Pa se one i preporučuju za korišćenje.

Međutim, na moje iznenađenje one su za eto tih par godina toliko izmenjene i promenjene da su iz mog ugla i iskustva postale manje upotrebljive nego ove prethodne. Recimo, ako želimo da na klasičan način interaptom koristimo UART prijem to je moguće na svega dva načina: prijem podataka FIXNE dužine ili koristeći DMA. Prethodne su omogućavale veoma jednostavnu konfiguraciju "ring buffer"-a kao što sam radio uvek do sada... ostao sam malo zbunjen i verujući da sigurno ja grešim potražio razjašnjenje na netu. Nažalost, samo sam našao gomilu istomišljenika kojima nije jasno što su to tako uradili... još uvek želim da verujem da sam ja nešto prevideo.

Inače, da samo pojasnim, apsolutno je moguće koristeći "low level" kodiranje da postignem ono što želim, ali standardizacija bibliotekama upravo služi da ovo ne moram da radim i da bi kod bio što portabilniji.

Ništa, idemo dalje... ko kaže da napredak uvek ima svoje prednosti Smile
Reply
#5
Ja bih samo dodao ovu odlicnu knjigu oko M3 / M4

The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors, Third Edition Paperback – November 1, 2013 by Joseph You
http://www.amazon.com/Definitive-Cortex...0124080820
Reply
#6
Nisam postigao dodatno da pišem na ovu temu u poslednje vreme, ali podelio bih sa vama jednu odličnu knjigu na temu STM32 CortexMx mikrokontrolera.
http://www.cs.indiana.edu/~geobrown/book.pdf
Reply
#7
Da podignemo malo temu, evo malo naprednijeg pristupa programiranja STM32 mikrokontrolera ali upotrebom besplatnih GNU alata "gcc" i "cmake".

Source code za Blink LED primer je ovde:
https://github.com/mikikg/stm32f103-cmake-template

Vas ce uglavnom interesovati ono sto je u Src/main.c, fajlovi u RTE/ su deo minimalistickog CMSIS frejmwork-a, nema nikakvih HAL drajvera niti dodatnih "zavistnosti" (dependencies), sve sto treba je projektnom direktorijumu.

Zgodna stvar sa ovim pristupom je ta sto ste i dalje u poznatom CMSIS "fazonu" samo je postavka projekta malo drugacija i koriste se GNU alati.

Glavne stvari za prevodjenje se desavaju u fajlu CMakeLists.txt i u sustini tu ne morate nista da menjate osim mozda ime projekta koji je sad myprj i ime linker skripte koja specificna za izabran MCU, trenutno je podeseno na STM32F103C8Tx_FLASH.ld.
Ako menjate target MCU neophodno je "nabaviti" i linker skriptu + header fajlove, ima ih na primer u Keil-u.
PS: Potrudicu se da skorije postavim na GIT i template projekat za STM32F407.
 
Vase (dodatne) fajlove mozete postaviti u pod-direktorijume Src/ i Inc/.

Konkretna procedura za prevodjenje je sledeca:

Code:
git clone https://github.com/mikikg/stm32f103-cmake-template
cd stm32f103-cmake-template/
mkdir build
cd build/
cmake -DCMAKE_BUILD_TYPE="Relese" ..
make

Nakon ovoga u folderu build dobicete myprj.bin, myprj.elf i myprj.hex koje mozete usnimiti u MCU sa nekim GUI programom ili pomocu st-flash i ovom komandom:

Code:
st-flash write myprj.bin 0x8000000

Neophodni alati za prevodjenje su cmake i gcc-arm-none-eabi i za Linux se moze instalirati sa komandom u nastavku dok za Windows mogu da se skinu posebne instalacione arhive (+ podesiti path variable).

Code:
apt install -y cmake gcc-arm-none-eabi
Reply
#8
Konačno uhvatih vremena da se malo poigram sa tim ARM-ovima...
Imam Blue Pill pločicu, spojenu na moju PCB sa nešto periferija, dovoljno za početak, i ST-LINK V2 (koln, naravno).
Problem mi pravi taj ST-LINK jer radi uredno iz ST-LINK Utility-a, ali ne i iz STM CUBE IDE-a !
Ima li kakvih ideja... ?
Reply
#9
Da li si ga otkačio sa STLink Utility-a?
U Cube treba da tvoj STLink vidiš u sledećem prozoru. Da li je tu? U tom prozoru treba da vidiš njegov SN


Attached Files Thumbnail(s)

Reply
#10
(12-19-2020, 09:13 PM)gorankg Wrote: Da li si ga otkačio sa STLink Utility-a?
U Cube treba da tvoj STLink vidiš u sledećem prozoru. Da li je tu? U tom prozoru treba da vidiš njegov SN

Windows 7, ga vidi, ST LInk Utility ga vidi i radi sa njim...


Uradim Disconnect, startujem CUBE IDE, i nema serijskog broja...


niti se odaziva, kad kliknem na debug... Sad
Reply
#11
Kod mene je u Debug probe odabran ST-LINK GDB server. Pogledaj moju prethodnu sliku.
Probaj sa njim.
Reply
#12
Bilo je nekih problema i kod mene sa najnovijim STM32 CubeIDE-om na jednom računaru. Iskreno, svašta sam nešto pokušavao i na kraju je proradilo bez da sam shvatio šta se desilo da proradi. Zadnje korake koje sam uradio su da sam po drugi put uradio nadogradnju firmware-a programatora (isti sam ubacio po drugi put). Iako nema smisla, tako ga je konačno prepoznao.
Čitajući po forumima više njih je prijavilo sličan problem. Nažalost, ništa konkretnije od ovog ne mogu da posavetujem.
Reply
#13
(12-21-2020, 01:27 PM)gorankg Wrote: Kod mene je u Debug probe odabran ST-LINK GDB server. Pogledaj moju prethodnu sliku.
Probaj sa njim.

Probao... i dobio ser. broj... ali kad kliknem na Debug, opet dobijem poruku da ne vidi ST-LINK,
tj. "No ST-LINK Detected!..." !?
Reply
#14
Dešava se i meni ponekad to sa kineskim klonom na win10. Ubacim onda neku Discovery ili Nucleo pločicu i nakon toga bude sve ok. Kad vratim kineski klon i on radi OK.
Reply
#15
(12-21-2020, 02:42 PM)ognjan Wrote:
(12-21-2020, 01:27 PM)gorankg Wrote: Kod mene je u Debug probe odabran ST-LINK GDB server. Pogledaj moju prethodnu sliku.
Probaj sa njim.

Probao... i dobio ser. broj... ali kad kliknem na Debug, opet dobijem poruku da ne vidi ST-LINK,
tj. "No ST-LINK Detected!..."  !?

Da, da, baš takvo ponašanje sam imao.

U pitanju je originalni ST-LINK v3 mini
https://www.st.com/en/development-tools/...3mini.html

Nešto je izgleda do softvera...
Reply
#16
(12-21-2020, 04:00 PM)npejcic Wrote: Da, da, baš takvo ponašanje sam imao.

U pitanju je originalni ST-LINK v3 mini
https://www.st.com/en/development-tools/...3mini.html

Nešto je izgleda do softvera...

Divno.... znači, borba se nastavlja i dalje... a jedan od razloga prelaska na ARM mi je bio i bolji alati za prog/debug... Smile

Imam 3 mala klona i jedan onaj veći, bijeli sa 20 pin konektorom, i svi se ponašaju identično.
A svi ST-Link rade uredno iz IAR IDE-a, koje mi izgleda vrlo simpatično, jednostavno i lagano, ali nije besplatno.
Keil mi stalno pravi neke probleme sa licencom, tako da ne znam sta mi je pametno dalje...
Vrijedi li probati Visual Studio Code ?

Imam i jedan J-Link, koji radi i programira iz CUBE IDE-a, ali prijavljuje nekakvu gresku kod debagiranja...


Vidjeh na netu, da se može čak i flešovati ST-Link i pretvoriti ga u J-Link.
Da li je to neko radio?
Reply
#17
Od svih pobrojanih IDE ja sam se prebacio na CLion.
On je generalni C/C++ IDE/debuger za razne konzolne i desktop aplikacije i to radi bas dobro stim sto su tu dodali i podrsku za STM32 i OpenOCD, sve pod istom kapom, odlicna kombinacija, slatko sam se nakuckao vise desetina programa sto za desktop sto za ARM i cela stvar kod njih funkcionise preko CMake pa je na primer zgodno odraditi sitne izmene i prevodjenje iz konzole bez pokretanja IDE-a.
Jeste komrcialan Clion ali stvarno radi bas dobro. Od kad sam presao na njega ne programiram vise u drugim jezicima, batalio sam PHP, Java i JavaScript, samo C/C++ sa CMake i pisem sa tim kakav god pomislis program za bilo koju platformu ...
Reply
#18
(12-22-2020, 04:27 PM)mikikg Wrote: Od svih pobrojanih IDE ja sam se prebacio na CLion.
On je generalni C/C++ IDE/debuger za razne konzolne i desktop aplikacije i to radi bas dobro stim sto su tu dodali i podrsku za STM32 i OpenOCD, sve pod istom kapom, odlicna kombinacija, slatko sam se nakuckao vise desetina programa sto za desktop sto za ARM i cela stvar kod njih funkcionise preko CMake pa je na primer zgodno odraditi sitne izmene i prevodjenje iz konzole bez pokretanja IDE-a.
Jeste komrcialan Clion ali stvarno radi bas dobro. Od kad sam presao na njega ne programiram vise u drugim jezicima, batalio sam PHP, Java i JavaScript, samo C/C++ sa CMake i pisem sa tim kakav god pomislis program za bilo koju platformu ...

Zahvaljujem na savjetu! Izgleda vrlo zanimljivo... a nije ni neka cijena, koja se ne bi mogla platiti, pogotovo za dobar alat...
Reply
#19
Da, CLion je vrlo dobar alat.

Na primer radio sam razvoj prakticno na 4 RPi-a odjenom (imam rsync komande), nekakav GUI/touch pa povezan preko LAN/ETH u sklopu jedne masine, veruj mi da mi je svaki od programa koje sam pojedinacno pisao imao 2 do 3 C++ skripte izvornog code-a, bukvalno toliko, nikakave dubioze sa nekim glomaznim stvarima, probrao sam dve bitne stvari i to su OpenCV za grafiku i RayLib koji je isto dobar za crtanje po ekranu i oba odlicno rade na x86 i na ARM sto je prelepa stvar, pokretao ga na PC ili RPi isto radi, to je glavna caka, koristim ceo IDE i par tih biblioteka i prvo programiram na PC-u (macOS, Linux, Win) i tu skockam ceo program i ekrane (sa buttonima i ostalim stvarima), prevodjenje radi u sekundi, debuger radi, skockas sve sto treba i onda samo kada ti treba bildujes isti program za ARM i proveris malo, utegnes i popravis ako ima razlike (uvek ima po malo) i to je razvojni proces koji pokriva bukvalno dve platforme o istom trosku i traje krace nego da si pisao samo za jednu platformu i losim alatima.
Reply
#20
Generalno, jesam zadovoljniji STM32 programatorima i debagerima u odnosu na PIC i PicKit3/4. Kad ST-LINK radi, radi kako treba.

Ja imam još jedan veoma glup problem sa progamatorom STM32-ki, u pitanju je neki treći računar laptop niže klase... recimo da je malo sporiji.
Probao sam i STM32 ST-LINK Utility i novi STM32 Cube Programer, probao sam dva hardverska programatora, dva različita uređaja koje programiram, ali sa tog laptopa nema šanse da se isprogramira. Detektuje STM32 uredno, ali kad krene da programira nikako... Probao da menjam frekvenciju programiranja ali ništa.

Isti HW setup na drugom PC računaru bez problema odradi. Tako da može da zavisi i od PC računara, što mi je totalno "suludo" u toj meri da postoji problem.

A cena programtora kod STM32 je zaista neverovatna, kineski klonovi od 1.9$ rade izuzetno dobro. Imam ih po par komada na svakom stolu Smile
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)