Enostaven vstop v STM32 ARM MCU svet z uporabo Mbed

Slike LOGOTIPI Svet elektronike color 300x92 - Enostaven vstop v STM32 ARM MCU svet z uporabo Mbed

Kako je sestavljena idealna razvojna plošča? Odgovor na to vprašanje se razlikuje od osebe do osebe, vendar bi rad povedal svoje mnenje, ki temelji na dolgoletnem delu z mikrokontrolerji. Zgradim veliko majhnih projektov, ki jih je najbolje izvesti s pomočjo razvojne plošče, ki jo povežem s prilagojenim vezjem potrebnim za projekt. V ta namen obstaja nekaj razvojnih plošč, ki so boljše od drugih. V preteklosti sem že več let uporabljal AVR-je, in ko sem se preusmeril na 32-bitne MCU, sem se preselil na Teensy plošče s Freescale ARM MCU in ESP32 za brezžične projekte. Vendar sem pred kratkim začel bolj natančno gledati izdelke, ki jih ponuja STM.

Zdi se, da STM že dolgo podpira zamisel, da bi morali njihove razvojne plošče prodati po cenah, bistveno nižjih od stroškov njihove proizvodnje. To pomeni, da uporabljajo te plošče za promocijo svojih MCU-jev, ne pa da bi služili na razvojnih ploščah. STM proizvaja zelo raznoliko družino ARM MCU-jev. Odločili so se, da bodo zasnovali številne različne razvojne plošče, da bi pokrile številne MCU, ki jih proizvajajo. V osnovi so v dveh stilih:

  • Razvojne plošče, ki vsebujejo samo MCU, pri čemer večina vhodno / izhodnih priključkov gre v velike priključke v 0,1 palčnih razmakih, kar omogoča enostavno medsebojno povezovanje. Te plošče so opremljene s ST-LINK čipom, ki omogoča programiranje in strojno razhroščevanje.
  • Popolnoma opremljene plošče, ki vključujejo čim več uporabnih perifernih naprav. Nekatere od teh plošč vsebujejo zelo lepe TFT zaslone na dotik , visokokakovostno zvočno podporo, USB vrata in Ethernet. Vsebujejo tudi programator / razhroščevalnik ST-LINK.

Čeprav je lepo, da obstaja toliko razvojnih plošč, ima to kljub temu slabosti. Današnji 32-bitni MCU so tako zapleteni, da je razvojnikom / programerjem izredno težko napisati svoje gonilnike za različne funkcionalne bloke v MCU. Morate se zanašati na proizvajalca, da vam bo zagotovil delujoče gonilnike, ali pa upajti, da bo DIY (“naredi sam”) skupnost postala dovolj velika / aktivna, da bo zagotavljala dobre odprtokodne gonilnike (Arduino je najboljši primer).

STM Discovery plošče z zaslonom občutljivim na dotik
Če ste v projekt poskušali vključiti dovolj velik TFT zaslon veste, da so, ko presežete velikost zaslona približno 8 cm, precej dragi. Tudi takšni zasloni so na splošno povezani z MCU prek SPI, kar omejuje njihovo hitrost osveževanja, razen če imate hiter SPI prenos z MCU in DMA. Lahko uporabite inteligentne TFT module, kot so tisti, ki jih proizvajajo 4-D Systems in Nextion, vendar v tem primeru pišete en program za MCU in drugega za TFT zaslon.

Zaradi tega sem se odločil za nakup ene od “polno opremljenih” STM razvojnih plošč, ki vsebuje TFT zaslon občutljiv na dotik. Za razliko od SPI krmiljenih TFT zaslonov na dotik, ki sem jih uporabljal v preteklosti, so bile STM razvojne plošče opremljene z zmogljivimi zasloni na dotik, ki so v občutljivosti na dotik boljše od uporovnih, ki sem jih uporabljal prej. Sposobni so tudi zaznavanja z več dotiki hkrati, kar ni možno na uporovnih zaslonih na dotik.

Zdelo se mi je, da je STM32F746-Discovery plošča najbolj priljubljena STM plošča, ki vsebuje zaslon občutljiv na dotik in bi zato imela najboljšo programsko podporo. Pri mojih običajnih distributerjih je ni bilo na zalogi, zato sem kupil podobno ploščo STM32F469-Discovery. Vendar sem mesec dni kasneje lahko kupil ploščo STM32F746 Discovery, tako da zdaj delam z obema. Na sliki 1 je prikazana stran z elementi obeh plošč (na drugi strani razen zaslona, ki zavzema 90% površine plošče, ni veliko videti). Čeprav se zdi, da sta plošči precej podobni, ima ena ARM Cortex M4, druga pa M7 mikrokontroler. Čeprav podporni čipi na plošči opravljajo podobne funkcije, gre za precej različne komponente. Zato sem se že zavedal zapletenosti gonilnikov, potrebnih za delovanje obeh plošč.

Poglejmo na hitro funkcije F746-Discovery plošče. Stane približno 56 USD, kar je precej manj, kot bi moral plačati za 4,3-palčni TFT zaslon z zmogljivim zaslonom občutljivim na dotik. Uporablja ARM M7 MCU, ki deluje na 200+ MHz in vsebuje 1 Mbajt Flash in 340 kbajtov SRAM-a. Na plošči je dodatnih 64 Mbits zunanjega SDRAM-a in 128 Mbits Quad-SPI Flash pomnilnika. Vsebuje kodek WM8994 z vtičnicami za vhod in izhod zvoka (16-bitna ločljivost) in 2 digitalna mikrofona. Ima vtičnice za full-speed in OTG USB visoke hitrosti, Ethernet PHY (z RJ45 vtičnico) in µSD kartico. Obstaja vtičnica za digitalni fotoaparat. Knjižnica STM ‘F746_GUI vsebuje gonilnik za kamero OV9655, tako da mora biti to zahtevana naprava kamere. Ni mi očitno, točno katero ploščo kamere bi lahko uporabljali z njo, saj konektor na plošči ni tak, kot ga vsebujejo običajni moduli ESP32 kamer, ki jih imam.

STM32F746 MCU ima dva 12-bitna DAC in tri 12-bitne ADC. Na žalost DAC-ov ni mogoče preslikati na razpoložljive vhodno / izhodne priključke na ‘F746 Discovery plošči (vendar so na voljo na ‘ F469 Discovery Board plošči).

Poleg vtičnic, povezanih s samo omenjenimi perifernimi napravami, imata ‘F746 in’ F469 Discovery plošči tudi Arduino shield vtičnico, ki omogoča dostop do SPI, I2C, ADC, PWM, UART in GPIO linij. Poleg tega F469 plošča vsebuje 20-polni konektor z veliko več dodatnimi V / I priključki.
Plošča ‘F746 vsebuje 4,3-palčni TFT zaslon s skupno ločljivostjo 480 x 272 slikovnih pik. Nenavadno je, da F469 plošča vsebuje nekoliko manjši 4,0-palčni zaslon, vendar ima ta zaslon veliko višjo ločljivost 800 x 480 slikovnih pik. Ugibam, da je ta zaslon tisti, ki se pogosto uporablja v pametnih telefonih, in je morda cenejši za STM, da ga vključuje na svojo ploščo.

Povezovanje katerega koli od teh dveh zaslonov v MCU je zelo zapleteno. Zato uporabljajo namenski funkcijski blok znotraj MCU, ki se imenuje LTDC in potrebujejo DMA krmilnik. Ker oba zaslona odlikuje 24-bitna RGB barvna globina, je RAM video medpomnilnik po potrebi precej velik. Na primer, medpomnilnik zaslona F469 plošč bi moral biti 3-bajtni x 480 x 800 ali 1,15 megabajtov. To je veliko več od SRAM-a znotraj MCU, ki se nahaja na F469 plošči. Zato je na obeh ploščah video medpomnilnik, ki se nahaja v zunanjem 64-bitnem SDRAM čipu, zato mora biti blok pomnilniškega krmilnika (FMC) konfiguriran za upravljanje tega SDRAM-a.

Torej lahko vidite, da če želite uporabiti TFT zaslon občutljiv na dotik, boste odvisni od nekaterih zelo zapletenih rutin gonilnika, ki bodo opravile nalogo. Po mojih izkušnjah z obema ploščama sem ugotovil, da ima vsaka svoj specifični gonilnik in za vsakega porabim kar nekaj časa, da se ga navadim. Podobno je s knjižnicami, ki upravljajo funkcije GUI višje ravni, kot so tipke, drsniki, pisave itd.. Ne delujejo namreč enako dobro z obema ploščama. To pa zato, ker je velikost slikovnih pik na zaslonu ‘F469 plošče 800 / 3,4’ ali 235 pik / palec, medtem ko ima F746 plošča gostoto pik samo 125 pik na palec. Kot praktičen primer so pisave, ki jih ponuja STM, v velikostih od 12 do 24 točk, popolnoma v redu za zaslon “F746” plošče 480 x 272. Vendar so na zaslonu F469 plošče 800 x 480 skorajda neuporabni – vsaj za moje oči starejše od 60 let. Moral sem napisati rutino, ki bo prikazovala pisavo pri 2-kratni povečavi (storjena je v bistvu dvakratna ponovitev vsakega piksla v obeh ravninah X, Y).

Do neke mere vsi funkcijski bloki, ki jih vsebujejo MCU ali tisti, ki jih izvajajo zunanje naprave, potrebujejo dokaj zapletene rutine gonilnikov, da jih uporabljajo. Tudi nekaj preprostega, kot so GPIO priključki, ki jih je enostavno konfigurirati in uporabljati v AVR MCU (tj. Arduino), je precej zapleteno za konfiguriranje na ARM MCU-jih, ki se uporabljajo na teh ploščah. Poleg običajne smeri vrat, pull-up konfiguracij, ki ste jih bili vajeni, morate omogočiti vsaka vrata posebej in konfigurirati njihove nastavitve takta.

Ko poskušate narediti kateri koli projekt s temi zapletenimi ARM razvojnimi ploščami hitro ugotovite, da je edini način, da lahko s svojim projektom uspete, eden od naslednjih načinov:
Ste odličen programer, vam je všeč pisanje gonilnikov na nizkem nivoju in ste pripravljeni za branje tehnične dokumentacije z več kot 1000 stranmi.

Izberete razvojno platformo, v kateri bodo vsi gonilniki za vaš MCU in razvojne plošče že napisani – po možnosti je integrirana pravica v neko celovito knjižnico, do katere prevajalnik lahko dostopa in ki je pregledna za vas, kot programerja.

Uporabite STM-jev STM32Cube IDE, ki vsebuje tako nabor knjižnic ugnezdene programske opreme, tj. gonilnike, kot tudi CubeMX, ki je grafično orodje, ki vam pomaga pri konfiguriranju MCU takta in vseh perifernih blokov, ki jih vsebuje MCU.

Projekte mikrokontrolerjev razvijam že 30 let in sem dober s strojno opremo, vendar se v kategorijo (1) zgoraj ne štejem. Izbira (3) se zdi dobra pot, saj jo podpira podjetje STM. Medtem ko sem bil navajen delati z drugimi 32-bitnimi MCU-ji, tako ARM kot ESP32, prej nisem imel izkušenj z ARM napravami podjetja STM. Na začetku sem poskusil uporabiti STM-jev ST32CubeIDE, potem ko sem kupil dve Discovery plošči. Ugotovil sem, da se precej razlikuje od IDE, ki jih trenutno uporabljam:

  • Visual Studio/Visual Micro (Arduino vtičnik) ki podpira AVR, Teensy plošče (ki uporabljajo Freescale/NXP ARM čipe) in ESP8266/ESP32.
  • PSoC Creator IDE za linijo programabilnih sistemov na čipu (SoiC) podjetja Cypress (ARM MCU s programabilnimi analogno/digitalnimi funkcijskimi bloki)

STM32CubeIDE se mi je zdel tako težko razumljiv, da sem ga dokaj hitro opustil in prešel na izbiro (2) navedeno zgoraj. Medtem ko bom pozneje v tej seriji člankov zašel v STM32CubeIDE, se za zdaj želim osredotočiti na razvojno platformo Mbed.

Mbed razvojna platforma
Mbed platformo sponzorira sama ARM korporacija, ne katerikoli MCU proizvajalec. Dejstvo, da je brezplačna, vas ne bi smelo skrbeti v smislu stalne podpore, saj ima za seboj veliko korporacijo. Prav tako vam ni treba skrbeti, da promovira izdelke katerega koli posameznega proizvajalca.

Na platformo Mbed sem prvič naletel že nekaj let nazaj, kot del natečaja, ki ga je Philips (kasneje spin-off kot NXP) sponzoriral za LPC1768 ARM MCU. Prejel sem brezplačno LPC1768 razvojno ploščo in pravila natečaja so bila, da bi moral za razvoj svojega projekta uporabiti razvojno platformo Mbed. LPC1768 je bila za svoj čas zelo izpopolnjena plošča, z nekaterimi lepimi lastnostmi, kot je programiranje Flash pomnilnika z “vlečenjem” na USB (takrat je bilo to zelo redko).

Mbed je spletni IDE – v celoti teče iz vašega spletnega brskalnika. Slika 2 prikazuje Mbed IDE z naloženim projektom. Za ilustracijo uporabljam majhno okno, ki pa ga razširite v običajni uporabi.

V levem oknu je vaš programski delovni prostor – vsi vaši projekti so tu vidni, dokler ne razširite hierarhije mape projekta, kot sem to storil tukaj. Zgoraj je celotna orodna vrstica za IDE – veliko preprostejša od STM32CubeIDE. Okno urejevalnika na desni lahko vsebuje veliko datotek, kar olajša urejanje / odpravljanje težav. Za dosego tega preprostega uporabniškega vmesnika Mbed je dobro uporabiti klik z desnim gumbom miške, da razkrije kontekstne menije, zato z desno miškino tipko kliknite stvari, če ne vidite, kako nekaj doseči.

Za prenos / nalaganje na računalnik ni programske opreme – za razliko od 4-5 GBytov prostora na disku, ki ga potrebujejo STM32CubeIDE in z njim povezani paketi programske opreme. Vse datoteke knjižnice gonilnikov in vsa vsebina programa je tako rekoč v oblaku. Vsa prevajanja / povezovanje opravi Mbedov strežnik v oblaku. Zato se gradnja vašega programa zgodi zelo hitro – verjetno veliko hitreje, kot bi bila lokalno na mojem osebnem računalniku, čeprav gre za hitri Intel i7 s SSD pogonom.

Vse zgornje funkcije so trenutno pozitiven dejavnik zame, saj imam zelo hitro širokopasovno internetno povezavo. Ko pa sem pred več kot petimi leti prvič prejel to LPC1768 ploščo za namene tekmovanja, spletni brskalniki niso bili tako sposobni kot zdaj in moja hitrost dostopa do interneta je bila takrat precej nižja. Iz teh razlogov in dejstva, da se je platforma Mbed šele začenjala in imela nekaj “grobih robov”, takrat še nisem preiskoval Mbed platforme.

Ko sem pred kratkim gledal Mbed platformo, sem lahko videl, da je lepo dozorela in zdaj podpira 167 ARM plošč, ki jih je izdelalo 32 proizvajalcev. Med njimi ima STM najboljšo zastopanost s 66 ploščami, sledita NXP (36) in Nordic (19). Ko sem iskal nakup STM plošč z zaslonom občutljivim na dotik sem poskrbel, da so plošče, ki sem jih izbral, navedene kot podprte s strani Mbed. Verjetno me je že od začetka skrbelo, da bi bil STM32CubeIDE morda preveč zahteven.

Kaj natančno pomeni Mbed, ko rečejo, da je plošča podprta? V bistvu to pomeni, da je Mbed sestavil knjižnični paket, ki je prilagojen MCU in zunanjim napravam na tej plošči. Ta paket bo uporabljen pri sestavljanju projekta. Prav tako ta knjižnica upošteva, kateri priključki MCU-ja so povezani z zunanjimi napravami, kot so LED in stikala. Na sliki 3 je prikazan primer strani za izbiro Mbed plošče, ki prikazuje ploščo in diagram priključkov, kar je zelo priročno.

Ko začnete nov projekt (ali uvozite obstoječega od drugih programerjev), ste najprej izbrali, katero ploščo uporabljate. Nato Mbed izbere ustrezen paket knjižnice za vašo ploščo. Za uporabnika je to v bistvu pregledno, vam ni treba skrbeti za konfiguracije, poti za datoteke knjižnice ali katerega koli od mnogih drugih parametrov, ki jih morate nastaviti pri uporabi IDE, kot je STM32CubeIDE. Videli boste majhno ikono (z oznako mbed), ki je videti kot zobje v hierarhiji datotek vašega projekta, vendar je na splošno prazna, razen če vi (ali avtor projekta) ustvarite nekaj dokumentacije za projekt (če ste naprednejši, lahko naložite osnovni mbed paket v obliki izvorne kode; v tem primeru bo šel v to mapo »mbed«).

Ko boste presegli program utripanja LEDice in boste začeli uporabljati bodisi notranje periferne funkcije MCU-ja ali uporabljati funkcije, ki jih nudijo zunanji čipi na vaši plošči, boste morali nato v svoj projekt uvoziti nekaj knjižnic. Čeprav v tem pogledu ni tako zmeden kot STM32CubeIDE, ima Mbed še vedno nekaj zmede med knjižničnimi paketi. Dostop do njih je dokaj enostaven, kar bom pozneje pokazal, vendar ugotoviti, katerega uporabiti, ni tako preprosto.

Ker je Mbed IDE zasnovan na spletu, ima ponavadi veliko enostavnejši uporabniški vmesnik, torej ne zapleteno vrsto orodij itd., kot jih boste našli na STM32CubeIDE. Namesto tega je na vrhu zaslona le 13 ikon, na večini pa so tudi besedilne nalepke. Obstaja ikona z naslovom Prevedi – to označbo imam raje kot »Zgradi«. Obstaja nekaj neoznačenih, ki sem jih sprva spregledal. Obstajata dve majhni ikoni z “upognjenima” puščicama, ki sta Razveljavi in Ponovi. Ko sem opazil te puščice, sem lahko razveljavil tipkanje, ki sem ga naredil po pomoti. “Daljnogled” upravlja funkcijo iskanja, ki upravlja tudi z Zamenjaj in Zamenjaj vse. Te ikone sem poudaril na sliki 2.

Še ena prijetna funkcija je kontekstna pomoč. Če premaknete miško nad besedo v svojem programu (včasih morate klikniti nanjo) boste v zgornjem desnem kotu okna za urejanje videli kontekstno pomoč. Ko sem začel uporabljati Arduino, je bila to funkcija, ki sem jo pogrešal. To kontekstno pomoč uporabljam v Visual Studio / Visual Micro za vse druge MCU-je, s katerimi delam.

Po tej kratki razpravi Mbed IDE poglejmo STM32CubeIDE. Čeprav se mi ga zdi težko razumeti in uporabljati, vsebuje nekaj funkcij, ki jih je mogoče uporabiti v povezavi z Mbed IDE-jem.

STM32CubeIDE
Če zmorete uporabljati veliko bolj zapleten ST32CUBE IDE, lahko izkoristite vsaj tri funkcije, ki so na Mbedu odsotne:

  • ST ponuja paket programske opreme STM32CUBE za različne člane njihove ARM družine. Za ST32F469-DISCOVERY ploščo je primerna datoteka z ZIP datoteko “STMCube_FW_F4_Vxxxxxx” kjer so “x” s trenutna številka različice, F4 pa pomeni, da je MCU iz družine F4xx. Ko prenesete / razpakirate to datoteko, si lahko ogledate njeno vsebino v Windows upravitelju datotek. Če odprete mapo “Projects”, se lahko pomaknete do plošče, kjer boste našli (a) visokonivojske aplikacije, (b) demonstracije različnih “paketov vmesne programske opreme” in (c) primere nizkonivojskih rutin za uporabo različnih perifernih naprav, ki jih vsebuje MCU.
  • Možnost odpravljanja napak / programiranja strojne opreme, vgrajena v “F469 Discovery” ploščo (z uporabo njenega razhroščevalnega čipa ST-Link SWD U3) Programiranje plošče je enostavno iz Mbeda z uporabo prej omenjene metode povleka, vendar ni mogoče strojno razhroščevati.
    Orodje CubeMX je grafično orodje, ki omogoča konfiguriranje vseh obrobnih funkcij, ki so na voljo v STM32 MCU, kot tudi zapleteno konfiguracijo ure. Ko določite želeno konfiguracijo, orodje napiše “C” kodo za izvedbo te konfiguracije.
  • Preden sem osvojil Mbed IDE, sem najprej poskusil uporabiti ST-jev STM32CUBE IDE. Njegova uporaba se mi je zdela zelo zmedena. To je bilo nadležno, saj sem uporabil veliko različnih IDE-jev za razvoj MCU in na splošno dokaj hitro dojemam. Medtem ko se v tem članku osredotočamo na plošče ‘F469 in’ F746-DISCOVERY z Mbed IDE, bi rad naštel nekaj namigov za STM32CubeIDE. Če bi te stvari poznal že vnaprej, se morda ne bi tako hitro premaknil iz ID-ja STM32CUBE v Mbed IDE.

STM32CUBE IDE deluje v okviru programske opreme Eclipse, ki jo uporabljajo številne druge aplikacije za razvoj programske opreme (na primer MCUXpresso NXP). Za AVR, ARM in ESP8266 / 32 MCU uporabljam Visual Studio / Visual Micro (IDE, zgrajen okoli Arduino), in PSoC Creator za Cypress PSoC. Niti eden od teh ne deluje v Eclipse, tako da prej nisem imel izkušenj.

Ko po namestitvi zaženete STM32CUBE IDE, le-ta od vas zahteva, da izberete Workspace. To je v bistvu mapa, v katero bo shranjeno vaše delo. To je tako kot pri drugih IDE, ki sem jih uporabil. Ob zagonu v vašem delovnem prostoru sploh ne bo nič – to se razlikuje od mnogih drugih IDE-jev, ki pogosto naložijo številne primere programov, s katerimi se lahko “igrate”. STM vas spodbuja, da sami prenesete paket strojne programske opreme STMCube_FW_F4 in razpakirate datoteko. Nato lahko iz STMCubeIDE z elementom menija Datoteka -> Uvozi odprete to mapo in uvozite primere programov. Moj prvi nagib je bil, da sem se pomaknil do STM32469I-Discovery mape in prenesel vse primere.

Rezultat je zelo velika hierarhija map, ki vsebujejo vse vrste aplikacij / predstavitev / primerov – vse za vašo ploščo. Kljub temu je zelo zmedeno, saj vsak “Project” vsebuje (skupaj z mnogimi drugimi mapami) 2 podmapi, ki sta uporabni le, če ste kupili in namestili (neobvezno) zunanje prevajalnike:

  • EWARM mapa se nanaša na IAR Embedded Workshop za ARM
  • MDK-ARM mapa se nanaša na Keil MDK-ARM prevajalnik/IDE.

Kriptična SW4STM32 mapa se nanaša na sistemsko delovno mizo za ARM32. To morate uporabiti, saj ustreza brezplačnemu prevajalniku / IDE, ki je vsebovan v ST32CUBE IDE aplikaciji. Na sliki 4 si lahko ogledate zapletenost te hierarhije datotek in večine map še nisem razširil, da bi se slika lahko prilagodila strani!

Torej, preprosto prezrite dve mapi tretjih oseb. Dejanska programska koda se nahaja v mapah “Src” in “Inc”. Na voljo bo datoteka »readme«, ki bo opisala uporabo primera programa.

Zaenkrat se vse zdi normalno. Vendar pa vsem primerom, demonstracijam in aplikacijam iz paketa strojne programske opreme pa je ST določil isto ime projekta. To pomeni, da ko so vse naložene v en delovni prostor, sicer lahko vidite različne mape, označene s funkcijo primera, ni pa mogoče, da bi jih prevajalnik ločil med seboj. Za določen primer se lahko pomaknete v datoteko “main.c” in nato izdate ukaz Built All. Zgodilo se mi je, da je program šel skozi dolgotrajen postopek sestavljanja vseh primerov, enega za drugim. Medtem ko sem opazoval, kako se to dogaja, sem samo domneval, da bom potem lahko zajel kateri koli primer, tako da ga naložim na ploščo, ne da bi bilo treba narediti drugo prevajanje (Build).

To ni bilo tako! Ko ste izbrali določen primer, v teh okoliščinah ni mogoče (kar sem ugotovil) izbrati drugega, ki ga želite prenesti na ploščo. To se zgodi zato, ker imajo vsi ST primeri enako ime projekta.

Če ste navajeni uporabljati Arduino IDE, imate kadar koli naloženo / vidno samo eno »skico«, zato do tega problema sploh ne bi naleteli. Vendar pa lahko z dvema drugima IDE, ki ju uporabljam, naenkrat naložite več projektov v svoj delovni prostor in izbirate med njimi. S STM32CubeIDE in uporabo njihovih programskih primerov, imajo vsi isto ime, zato to ne deluje.
Zato je tukaj rešitev uvažanje le enega projekta iz paketa programske opreme ST32CubeF4 v dani delovni prostor. Če želite delati na drugem projektu iz paketa programske opreme ST, uporabite meni File -> Switch Workplace in dodajte drug delovni prostor z drugačnim opisnim imenom. Ko ste v tem novem delovnem prostoru, lahko nato uvozite naslednji projekt / primer iz programske opreme STM32CubeF4, ki vas zanima.

Tu je še eno nenavadno vedenje. Ko “uvozite” projekt, pričakujete, da se vse datoteke / mape, povezane s tem projektom, kopirajo v vaš delovni prostor (izvorne datoteke / mape ostanejo nedotaknjene v mapi programske opreme ST32CubeFx, iz katere ste jih prenesli / razpakirali). To se po mojih izkušnjah ne zgodi. Namesto tega se vsa urejanja tega projekta shranijo v prvotno mapo strojne programske opreme ST32CUBEFx in v mapi v vašem delovnem prostoru ne bo NOBENE kopije projekta. To je resnično nenavadno. Preiskal sem Google, da bi ugotovil, ali je to normalno. Ugotovil sem, da so tudi drugi to izkusili in kot kaže ni načina, kako bi se temu izognili.

ST vas spodbuja, da svoje programske pakete strojne programske opreme STM32CubeFx prenesete ročno s pomočjo spletne povezave, ki jo posredujejo. To sem storil in nastala je Zip datoteka, ki pristane v mapi »Preneseno«. Po razpakiranju sem jo pustil tam, saj je običajno mesto za shranjevanje datotek, ki jih nalagam iz interneta. Vendar glede na to, kar sem že omenil, to ni zelo dobra možnost.

Namesto tega priporočam, da se ne trudite, da bi paket ST32Cube Firmware prenesli ročno. Ko zaženete IDE STM32Cube, namesto tega izberite možnost Začni nov projekt. Nato izberite ploščo Discovery (ali Nucleo), ki jo imate. Na tej točki bo IDE samodejno prenesel paket ugnezdene programske opreme, ki ustreza STM MCU, nameščenem na izbrani plošči. Vendar bo v tem primeru paket programske opreme postavil v mapo z imenom “Repository” znotraj mape “STM32Cube” (ki se nahaja na c: \ users \ vaše uporabniško ime). Vsak projekt, ki ga naložite / uredite iz primerov ugnezdene programske opreme, bo prišel od tu in tudi vaša urejena koda bo shranjena tam.

Ta precej nenavaden način delovanja ima nekatere druge stranske učinke, ki začetniku niso očitni. Na primer, če napišete program, prilagojen iz tistega, ki ste ga uvozili iz paketa ugnezdene programske opreme ST32Cube, sem prebral, da ga ne boste mogli izvoziti v obliki, ki bi jo želeli distribuirali komurkoli drugemu. Razlog tiči v tem, da ima projekt vdelane poti do različnih potrebnih datotek / map in te poti kažejo na točno določeno mesto na trdem disku, kjer ste najprej shranili paket strojne programske opreme. To je po mojem mnenju pomembna pomanjkljivost.

Če izberete možnost Start a New Program in konfigurirate / napišete svoj program od začetka, bo projekt shranjen v mapi vašega aktivnega delovnega prostora, zgornji premisleki pa ne veljajo.
Zadnja stvar, ki jo bom omenil pri uporabi primerov iz ST-jevega vdelanega programskega paketa, je zelo nejasna hierarhija datotek, ki jo uporablja. Slika 4 prikazuje hierarhijo datotek primera projekta „STM32746- Odkrivanje / Primeri / BSP“. Če bi odprli mapo “src”, bi v modrem polju spodaj našli vse C datoteke, ki jih vidite. Če uporabljate vgrajen prevajalnik STCubeIDE, to ni tisto, kar želite. Namesto tega odprete mapo SW4STM32, nato mapo Primer in nato uporabniško mapo. To so tiste, s katerimi naj bi delali. To ni intuitivno! Mapa Drivers je polna datotek gonilnikov, potrebnih za ta projekt. Opazili boste mapo Binaries. Če ta ne vsebuje datoteke STM32746_DISCOVERY.elf, projekt še ni bil izdelan in ga ne morete razhroščevati ali zagnati. Kot smo že omenili, VSI primeri projektov uporabljajo isto ime STM32746_DISCOVERY, zato več kot en tak projekt ne more obstajati v enem delovnem prostoru.

Opozarjam vas, da svoje ‘F469I-DISCOVERY plošče ne povežete z osebnim računalnikom, preden namestite gonilnik ST-Link USB (kar se zgodi, ko namestite paket STE32CUBE IDE). V nasprotnem primeru bo MS Windows ploščo registriral kot neznano napravo. Kasneje, ko zaženete namestitveni program gonilnika ST-LINK, ta ne bo deloval pravilno. Dokument ST UM1932 opisuje, kako popraviti to napako. Sliki 5A, 5B prikazujeta pravilno nameščeno ST-Link napravo za razhroščevanje, vključno z VID (0483) in PID (375B), iz upravitelja naprav Windows (v mapi Universal Serial Bus Devices).

Vstavljen bo tudi vnos v razdelku Vrata (COM & LPT) z imenom STMicroelectronics Virtual COM Port (Comx). Nazadnje bi morala biti v mapi Disk Drives tudi »MBED mikrokontroler USB-naprava«, vendar boste ta pogon že videli v File Explorerju, ko ste ga vklopili – tam pa bo na primer označen kot DIS_F746NG.

CubeMX
CubeMX je grafično orodje za konfiguracijo STM32 MCU-jev in je znotraj STM32Cube IDE-ja. Omogoča vam nastavitev konfiguracije takta MCU in tudi inicializiranje vseh perifernih blokov v napravi. Ročno konfiguriranje katerega koli od teh blokov bi zahtevalo, da natančno preberete veliko gradiva v ogromnem tehničnem referenčnem priročniku za uporabljeni MCU.

Če pišete svoj program iz nič, se bo CubeMX orodje samodejno zagnalo takoj, ko izberete ploščo (ali MCU). Čeprav je grafično orodje, ki naj bi ga bilo preprosto uporabljati predlagam, da si pred začetkom ogledate video, ki razlaga njegovo uporabo. Primer, ki mi je bil všeč, je serija avtorja Shawn Hymel iz Digikeyja: https://bit.ly/3iDGG96

Ko uporabljate STM MCU z majhnim številom priključkov, kot je prikazano v zgornjem videoposnetku, je enostavno izbrati določen MCU priključek iz prikazane slike. Vendar so MCU F469 ali F746 BGA čipi z 216 „kroglicami“ in težko je videti posamezne oznake priključkov, ko jih želite konfigurirati. Z miško jih lahko približate, vendar je še vedno boleče. Namesto tega je pod diagramom priključkov naprave pod oknom naprave desno (slika 6). Ko jo kliknete, bo prikazana ikona povečevalnega stekla (po mojem mnenju nekoliko pozno). V tem oknu, če vnesete oznako vrat, kot je PA0, bo označen pin na diagramu priključkov. S klikom na ta pin v diagramu boste lahko dodelili ta pin določeni periferni ali GPIO funkciji. Priključek se bo obarval rumeno-zeleno barvo, kar pomeni, da je bil dodeljen neki funkciji. To je le polovica zgodbe – nato je treba konfigurirati periferno funkcijo, ki ste jo dodelili (in ko je dodeljena, bo ta priključek prikazan zeleno).

To naredite s pomočjo seznama funkcij na levi strani okna Pinout View. Ko odprete pravilno kategorijo, lahko izberete periferni blok, ki ga morate konfigurirati. Najprej boste morali omogočiti periferni blok v nastavitvah. Spodaj bo vidna tabela konfiguracije, ki jo morate izpolniti. Čeprav se razlikuje glede na periferne naprave, obstajajo zavihki za parametre, NVIC, DMA in uporabniške konstante – nekatere ali vse, ki jih boste morda morali dokončati. Nekateri parametri, ki jih je treba izpolniti, morda niso takoj vidni – če je na desni strani modra drsna vrstica, je treba videti še več! Slika 7 prikazuje primer tega za timer periferno napravo.

Ena od situacij, ki se pojavlja v praksi, ko uporabljate ST razvojno ploščo je, ali je do določenih obrobnih funkcij mogoče dostopati s priključki, ki so na voljo na različnih vhodno / izhodnih konektorjih, najdenih na tej plošči. Večino perifernih vhodno / izhodnih funkcij STM32 je mogoče preslikati na vsaj še en pin, ki presega privzeti pin, dodeljen za funkcijo te zunanje naprave. Kako vedeti, kaj so te nadomestne funkcije? Spletno mesto Mbed vsebuje seznam plošč, ki jih podpira prevajalnik Mbed. Obe Discovery plošči, omenjeni v teh člankih, podpirata Mbed in na naslednjih naslovih URL-ja objavljata postavitve, ki prikazujejo razpored priključkov z nadomestnimi funkcijami:

  • ‘F746-Discovery plošča:
    https://os.mbed.com/platforms/ST-Discovery-F746NG/
  • ‘F469-Discovery plošča:
    https://os.mbed.com/platforms/ST-Discovery-F469NI/

To niso izčrpne ugotovitve. Na ‘F469 plošči sem na primer uporabil dva 12-bitna DAC-a na priključkih PA4 in PA5 in te možnosti niso prikazane na zgornjih diagramih. Na sliki 8 je prikazan razpored priključkov za ‘F469 Discovery ploščo.

Tehnični referenčni priročnik za ARM MCU F469 družino ne vsebuje diagrama alternativnih funkcij GPIO priključkov. To morate preveriti v podatkovnem listu za določen MCU, ki je na vaši plošči.

Ugotovil sem, da je najlažji način za določitev, ali je mogoče periferno enoto preslikati na pin, ki je na voljo na vhodno / izhodnih konektorjih ST razvojne plošče tako, da uporabite CubeMX orodje in enega za drugim izberete med prostimi GPIO priključki in preverite, ali je mogoče ta priključek preslikati na zunanjo napravo, ki jo želite uporabiti. Obe Discovery plošči, ki sem ju kupil, sta bili izbrani, ker sta vsebovali zaslone na dotik, pa tudi veliko drugih zunanjih funkcij, kot so Codec, vtičnica za SD-kartico, QSPI Flash. Prav tako nima veliko GPIO konektorjev, razen Arduino konektorjev, zato dostop do določene periferije na MCU ni vedno mogoč. ‘F469 Discovery plošča ima poleg Arduino konektorjev tudi še dodaten 20-polni GPIO konektor, zato je v tem pogledu nekoliko boljša.

Medtem ko se orodje CubeMX prikliče takoj, ko začnete nov projekt (iz nič), ni očitno, kako ga prikličete pozneje v programu za programiranje, ko želite spremeniti nekaj glede konfiguracije MCU. V zgornjem desnem kotu zaslona IDM STM32Cube je majhna skupina ikon. Kvadratno modra ikona z besedilom “MX” bo priklicala MX orodje. Vsak projekt, ki se je začel z uporabo Cube MX orodja, bo vseboval datoteko s pripono »ioc«. Če kliknete na to, se prikaže CubeMX orodje. Sprva mi ni bilo očitno, da je to datoteko ustvarilo CubeMX orodje, dokler nisem odkril enake modre MX ikone v zgornjem desnem kotu zaslona, kot je bilo omenjeno zgoraj.

Eden od razlogov, zakaj nisem prepoznal modre MX ikone je, ker sem se predstavil STMCubeIDE in samim Discovery ploščam, tako da sem naložil primere programov iz paketa vdelane programske opreme STM32Cube. Zdi se, da noben od teh projektov ni bil ustvarjen s CubeMX orodjem, zato ne vsebujejo datoteke .ioc. To je pomembno – nisem mogel ugotoviti, kako bi lahko vzel primer za projekt in nato priklical CubeMX orodje, da bi dodal ali spremenil konfiguracijo V / I ali uro. Po mojem mnenju je to pomembna pomanjkljivost, vendar STM morda tega ne bo mogel doseči, odvisno od tega, kako so zasnovali IDE.

IDE Cypress PSoC Creater, ki ga občasno uporabljam za PSoC5LP projekte, ima konfiguracijsko orodje, podobno CubeMX. Po mojem mnenju je veliko boljši in bolj intuitiven in deluje v redu s katerim koli primernim projektom, ki ga dobavi Cypress.

Omenil bom še eno nedoslednost, ki sem jo našel. Ko uporabljate CubeMX, na primer priključke označite s PA0. Če pa uporabljate Mbed, bi bil isti priključek vtičnice imenovan PA_0. Dovoljeno je, da je v enem primeru definirano s STM, v drugem pa z Mbed. Kljub temu pa tudi v STM32CubeIDE ne morete na primer imenovati priključkov kot PA0. To je za novinca zelo zmedeno.

Tako smo prišli do konca 1. dela članka. Naslednji mesec bomo v 2 delu članka pogledali, kako dejansko uporabiti CubeMX orodje skupaj z vašimi Mbed programi.

Avtor: Brian Millier
2020_289_30