STM32-mikro-ohjainten nopea hallinta. Erityisten rekisteriosoitteiden määrittäminen

Tämä artikkeli, joka on toinen "pika aloitus" ARM-ohjaimien hallitsemisessa, auttaa sinua ehkä ottamaan ensimmäiset askeleet Cortex-M3-ytimeen - STM32F1xxx -sarjaan perustuvien 32-bittisten ARM-ohjaimien hallitsemisessa. Ehkä tämä artikkeli (joka ilmestyy tästä aiheesta kuin sienet sateen jälkeen) on hyödyllinen jollekin.

Johdanto

Miksi ARM?
1. Valittavana on paljon (eri valmistajat valmistavat nykyään yli 240 ARM-ohjainta)
2. Alhainen hinta(esimerkiksi 1 dollarilla saat 37xI/O, 16K Flash, 4K RAM, 2xUART, 10x12bit ADC, 6x16bitPWM).

Aloitetaan työmme ST Microelectronicsin ohjaimilla. ARM Cortex-M3 -ytimeen perustuville ohjaimille on ominaista laaja valikoima oheislaitteita, korkea suorituskyky ja alhainen hinta
P.S. Heti alussa näyttää siltä, ​​että ARM:t ovat jonkinlaisia ​​kauheita olentoja (juottamisessa, johdotuksessa, ohjelmoinnissa), mutta tämä on vain ensi silmäyksellä :) ja sen näet itse.

Joten tutkimme ARM-laitteita STM32F1-ohjainten esimerkin avulla. Samaan aikaan tässä sarjassa on useita rivejä:

  • Arvolinja STM32F100 - 24 MHz CPU, moottorin ohjaus, CEC.
  • Pääsylinja STM32F101 - 36 MHz CPU, jopa 1 Mt Flash
  • USB-liityntälinja STM32F102 - 48 MHz CPU USB FS:llä
  • Suorituskykylinja STM32F103 - 72 MHz, jopa 1 Mt Flash, moottorin ohjaus, USB, CAN
  • Yhteyslinja STM32F105/107 - 72 MHz CPU, Ethernet MAC, CAN, USB 2.0 OTG

Siellä on myös seuraava luokitus:

STM32-ohjaimet voidaan pakottaa käynnistymään 3 muistialueelta (riippuen BOOT0- ja BOOT1-nastojen tilasta ohjaimen käynnistyessä tai nollauksen jälkeen). Voit kirjoittaa ohjelman ohjaimen muistiin seuraavilla tavoilla:

1 tapa:
Käynnistyslataimen käyttäminen (se on jo kirjoitettu järjestelmämuistiin) ja USART1(USART2 remaped): Käyttää sisäistä 8 MHz kellosignaalia. Käynnistääksesi sisäänrakennetun käynnistyslataimen, jonka valmistaja on johdottanut ohjaimeen, sinun tarvitsee vain heittää signaali RS232-3.3V-muuntimesta (esimerkiksi FT232RL:n perusteella) ohjaimen TX1, RX1 ja ennen sitä sarjan tassuille. BOOT0 = 1 ja BOOT1 = 0, paina RESET ja voimme ommella ohjelman ohjaimessa. Ja se on ommeltu sisään Flash-ohjelma Loader Demonstartor by STM (Windows).

PS. Jos käytät LINUXia eikä sinulla ole Discovery-tyyppistä virheenkorjauskorttia, voit ladata laiteohjelmiston ohjaimeen kaikkien suosikki rs-232:n kautta (itse asiassa rs-232-3.3V muuntimen kautta). Tätä varten sinun on käytettävä python-skriptiä (Ivan A-R) (LINUX- tai MACOSX-käyttöjärjestelmälle).
Ensinnäkin sinulla on oltava Python 2.6 asennettuna ja kirjasto sarjaportin kanssa työskentelemistä varten - PySerial-kirjasto.
Nyt, jotta voit suorittaa stmloader.py-komentosarjan (tietenkin päätteestä), sinun on säädettävä sitä hieman tietokoneellesi sopivaksi: avaa se tekstieditorissa.
Rekrytointi klo komentorivi
~$ dmesg | grep tty
nähdäksesi kaikki PC:n sarjaportit.
ja kirjoittamisen jälkeen...
~$ setserial -g /dev/ttyS
löydämme polun 232. satamaamme. Jos järjestelmä valittaa sarjasarjasta, asenna se
~$ sudo apt-get install setserial
selvitämme polun fyysiseen porttiin (esimerkiksi minun on /dev/ttyS0). Nyt sinun on kirjoitettava tämä polku stm32loader.py-skriptitiedostoon oletustiedoston "/dev/tty.usbserial-..." sijaan. Kirjoita terminaaliin
~$ python stm32loader.py -h
...soittaaksesi apua ja ladataksesi laiteohjelmiston ohjaimellemme.

Tapa 2:
USB:n kautta DFU-tilaa käyttävä OTG vaatii ulkoisen kvartsin taajuudella 8 MHz, 14,7456 MHz tai 25 MHz (kaikilla USB OTG:llä varustetut ohjaimilla ei ole tätä käynnistyslatainta; sinun on tarkasteltava huolellisesti ohjaimesi merkintöjä)

3 tapaa:
JTAG/SWD. No, niille, joilla on Discovery-tyyppinen esittelykortti tai kotitekoinen JTAG/SWD-ohjelmoija, voit ladata koodin ja jo korjata mikro-ohjaimesi tällä tavalla. JTAGille mikro-ohjaimessa on 6 jalkaa (TRST, TDI, TMS, TCK, TDO, RST) + 2 tehoa varten. SWD käyttää neljää signaalia (SWDIO, SWCLK SWO, RESET) ja kahta tehoa.

PS. EAGLE-ympäristössä luonnostelin useita tyhjiä piirejä 48-, 64- ja 100-jalkaisille ohjaimille (eagle-kansio), ja stm32loader sisältää skriptin stm32loader.py

IN viime vuosina ARM-prosessoreihin perustuvat 32-bittiset mikro-ohjaimet (MCU) valloittavat nopeasti elektroniikan maailman. Tämä läpimurto johtuu niiden korkeasta suorituskyvystä, täydellisestä arkkitehtuurista, alhaisesta energiankulutuksesta, alhaisista kustannuksista ja edistyneistä ohjelmointityökaluista.

LYHYT HISTORIA
Nimi ARM on lyhenne sanoista Advanced RISC Machines, jossa RISC (Reduced Instruction Set Computer) tarkoittaa supistetun käskyjoukon suoritinarkkitehtuuria. Ylivoimainen määrä suosittuja MK:ita ja esimerkki PIC- ja AVR-perheistä on myös RISC-arkkitehtuuri, joka mahdollisti suorituskyvyn lisäämisen yksinkertaistamalla käskyjen dekoodausta ja nopeuttamalla niiden suorittamista. Kehittyneiden ja tuottavien 32-bittisten ARM-mikro-ohjainten ilmaantumisen myötä voimme siirtyä ratkaisemaan monimutkaisempia ongelmia, joita 8- ja 16-bittiset MCU:t eivät enää pysty selviytymään. ARM-mikroprosessoriarkkitehtuurin 32-bittisellä ytimellä ja RISC-käskysarjalla on kehittänyt brittiläinen yritys ARM Ltd, joka kehittää yksinomaan ytimiä, kääntäjiä ja virheenkorjaustyökaluja. Yritys ei tuota MK:ita, vaan myy niiden tuotantoon lisenssejä. MK ARM on yksi nopeimmin kasvavista MK-markkinoiden segmenteistä. Nämä laitteet käyttävät energiaa säästäviä tekniikoita, joten niitä käytetään laajasti sulautetuissa järjestelmissä ja ne hallitsevat markkinoita mobiililaitteet, joille se on tärkeää alhainen virrankulutus. Lisäksi, ARM-mikro-ohjaimet käytetään aktiivisesti viestinnässä, kannettavissa ja sulautetuissa laitteissa tarvittaessa korkea suorituskyky. ARM-arkkitehtuurin ominaisuus on prosessorin laskentaydin, jota ei ole varustettu millään lisäelementtejä. Jokaisen prosessorin kehittäjän on varustettava tämä ydin itsenäisesti tarvittavat lohkot erityistehtäviisi. Tämä lähestymistapa on toiminut hyvin suurille siruvalmistajille, vaikka se alun perin keskittyi klassisiin prosessoriratkaisuihin. ARM-prosessorit ovat jo käyneet läpi useita kehitysvaiheita, ja ne tunnetaan hyvin ARM7-, ARM9-, ARM11- ja Cortex-perheistä. Jälkimmäinen on jaettu klassisten CortexA-prosessorien, CortexR-reaaliaikaisten prosessorien ja CortexM-mikroprosessoriytimien alaryhmiin. CortexM-ytimistä tuli perusta suuren luokan 32-bittisten mikro-ohjainten kehittämiselle. Ne eroavat muista Cortex-arkkitehtuurin muunnelmista ensisijaisesti 16-bittisen Thumb2-käskyjoukon käytön suhteen. Tämä sarja yhdisti "klassisten" ARM- ja Thumb-ohjeiden suorituskyvyn ja kompaktisuuden, ja se kehitettiin erityisesti C- ja C++-kielten kanssa työskentelemiseen, mikä parantaa merkittävästi koodin laatua. CortexM-ytimeen rakennettujen mikro-ohjainten suuri etu on ohjelmistojen yhteensopivuus, mikä teoriassa mahdollistaa ohjelmakoodin käytön kielellä korkea taso malleissa eri valmistajia. Sen lisäksi, että MK-kehittäjät osoittavat ytimen käyttöalueen, ne osoittavat CortexM-ytimen suorituskyvyn kymmenen pisteen asteikolla. Nykyään suosituimmat vaihtoehdot ovat CortexM3 ja CortexM4. MK kanssa ARM-arkkitehtuuri Tuottaneet yritykset, kuten Analog Devices, Atmel, Xilinx, Altera, Cirrus Logic, Intel, Marvell, NXP, STMicroelectronics, Samsung, LG, MediaTek, MStar, Qualcomm, SonyEricsson, Texas Instruments, nVidia, Freescale, Milander, HiSilicon ja muut.
Optimoidun arkkitehtuurin ansiosta CortexM-ytimeen perustuvien MCU:iden kustannukset ovat joissain tapauksissa jopa alhaisemmat kuin monien 8-bittisten laitteiden. "Nuorempia" malleja voi tällä hetkellä ostaa 30 ruplaa. keholle, mikä luo kilpailua aikaisempien sukupolvien MK:lle. STM32 MIKROOHJAimet Tarkastellaan STM32F100-perheen edullisinta ja laajimmin levinnyt MCU:ta STMicroelectronicsilta, joka on yksi maailman johtavista MCU-valmistajista. Yhtiö ilmoitti äskettäin aloittavansa teollisia ominaisuuksia hyödyntävän 32-bittisen MK:n tuotannon
STM32-ytimet edullisissa sovelluksissa. STM32F100 Value -linjaperheen MCU:t on suunniteltu laitteille, joissa 16-bittisten MCU:iden suorituskyky ei riitä ja "tavallisten" 32-bittisten laitteiden runsas toiminnallisuus on tarpeeton. STM32F100 MK -linja perustuu moderni ydin ARM CortexM3 oheislaitteilla, jotka on optimoitu sovelluksiin tyypillisiä sovelluksia, jossa käytettiin 16-bittisiä MK:ita. STM32F100 MCU:n suorituskyky 24 MHz:llä on parempi kuin useimmat 16-bittiset MCU:t. Tämä rivi sisältää laitteet, joissa erilaisia ​​parametreja:
● 16–128 kilotavua ohjelman flash-muistia;
● 4–8 kilotavua RAM;
● jopa 80 GPIO-tulo-/lähtöporttia;
● jopa yhdeksän 16-bittistä ajastinta edistyneillä toiminnoilla;
● kaksi vahtikoiran ajastinta;
● 16-kanavainen nopea 12-bittinen ADC;
● kaksi 12-bittistä DAC:ta sisäänrakennetuilla signaaligeneraattoreilla;
● enintään kolme UART-liitäntää, jotka tukevat IrDA-, LIN- ja ISO7816-tiloja;
● enintään kaksi SPI-liitäntää;
● enintään kaksi I2C-liitäntää, jotka tukevat SMBus- ja PMBus-tiloja;
● 7-kanavainen suora muistiyhteys (DMA);
● CEC (Consumer Electronics Control) -liitäntä sisältyy HDMI-standardiin;
● reaaliaikainen kello (RTC);
● Sisäkkäinen NVIC-keskeytysohjain.

STM32F100:n toimintakaavio on esitetty kuvassa 1.

Riisi. 1. MK-linjan STM32F100 arkkitehtuuri

Lisämukavuus on laitteiden nastayhteensopivuus, jonka avulla voidaan tarvittaessa käyttää mitä tahansa perheen MK:ta suuremmalla toiminnallisuudella ja muistilla ilman painettua piirilevyä. STM32F100-ohjainsarja on valmistettu vuonna kolme tyyppiä LQFP48-, LQFP64- ja LQFP100-paketit, joissa on 48, 64 ja 100 nastaa. Nastojen jako on esitetty kuvissa 2, 3 ja 4. Tällaiset kotelot voidaan asentaa piirilevyille ilman erikoislaitteita, mikä on merkittävä tekijä pientuotannossa.


Riisi. 2. STM32 MCU LQFP48-paketissa Kuva. 3. STM32 MCU LQFP64-paketissa


Riisi. 4. STM32 MCU LQFP100-paketissa

STM32F100 on edullinen ja optimoitu laite, joka perustuu CortexM3-ytimeen, jota tukee kehittynyt kehitysympäristö STM32-mikrokontrolleriperheelle, joka sisältää
Ilmaiset kirjastot kaikille oheislaitteille, mukaan lukien moottorin ohjaus ja kosketusnäppäimistöt.

KYTKENTÄKAAVIO STM32F100C4
Harkitsemme käytännön käyttöä MK käyttäen esimerkkiä yksinkertaisimmasta laitteesta STM32F100C4, joka kuitenkin sisältää kaikki STM32F100-linjan päälohkot. STM32F100C4:n sähköinen piirikaavio on esitetty kuvassa 5.


Riisi. 5. Kytkentäkaavio mallille MK STM32F100C4

Kondensaattori C1 varmistaa, että MK nollautuu, kun virta kytketään, ja kondensaattorit C2-C6 suodattavat syöttöjännitteen. Vastukset R1 ja R2 rajoittavat MK-nastojen signaalivirtaa. Sisäistä oskillaattoria käytetään kellon lähteenä, joten ulkoista kidettä ei tarvitse käyttää.


Tulojen BOOT0 ja BOOT1 avulla voit valita MK:n lataustavan, kun virta kytketään päälle taulukon mukaisesti. BOOT0-tulo on kytketty nollapotentiaaliväylään vastuksen R2 kautta, joka suojaa BOOT0-nastaa oikosulku kun sitä käytetään PB2-lähtöporttina. Käyttämällä liitintä J1 ja yhtä jumpperia voit muuttaa BOOT0-tulon potentiaalia ja määrittää siten, kuinka MK ladataan - flash-muistista tai sisäänrakennetusta käynnistyslataimesta. Jos MK on ladattava RAM-muistista, BOOT1-tuloon voidaan liittää samanlainen hyppyjohdin.
MK:n ohjelmointi suoritetaan UART1-sarjaportin kautta tai erityisten ohjelmoijien - JTAG- tai STLink-debuggerien kautta. Jälkimmäinen on osa suosittua virheenkorjauslaitetta STM32VLDISCOVERY, joka näkyy kuvassa 6. STM32VLDIS COVERY -kortilla ohjelmoijan STLink-debuggerin 4-nastainen liitin on nimetty SWD:ksi. Artikkelin kirjoittaja ehdottaa MK:n ohjelmointia UART1-sarjaportin kautta, koska se on paljon yksinkertaisempaa, ei vaadi erikoislaitteita eikä ole nopeudeltaan huonompi kuin JTAG tai ST Link. Ohjauslaitteena, joka pystyy tuottamaan komentoja ja näyttämään MK-ohjelman tuloksia, sekä ohjelmoijana voit käyttää mitä tahansa henkilökohtainen tietokone(PC), jossa on sarja COM-portti tai USB-portti USBRS232-muuntimella.

PC:n COM-portin ja MK:n yhdistäminen pariksi Mikä tahansa käy RS232-signaalien muuntaja loogisiksi signaalitasoiksi 0 - 3,3 V, esimerkiksi ADM3232-mikropiiri. TXD-siirtolinja sarjaportti tietokone, tasomuuntimen jälkeen, tulee kytkeä mikrokontrollerin PA10-tuloon ja RXD-vastaanotinlinja vastaavan muuntimen kautta PA9-lähtöön.

Jos haluat käyttää haihtumatonta MK-kelloa, sinun tulee kytkeä siihen CR2032-paristo, jonka jännite on 3 V, ja kvartsiresonaattori, jonka taajuus on 32768 Hz. Tätä tarkoitusta varten MK on varustettu Vbat/GND- ja OSC32_IN/OSC32_OUT-nastoilla. Vbat-nasta on ensin irrotettava 3,3 V:n tehoväylästä.

MK:n jäljellä olevia vapaita liittimiä voidaan käyttää tarpeen mukaan. Tätä varten ne tulisi kytkeä liittimiin, jotka sijaitsevat MK:n painetun piirilevyn kehän ympärillä, analogisesti suositun kanssa Arduino-laitteet ja kehityslevy STM32VLDISCOVERY.


Riisi. 6. Virheenkorjauslaite STM32VLDISCOVERY


Sähkökytkentäkaavio STM32VLDISCOVERY.

Siten MK:n tarkoituksesta ja käyttötavasta riippuen voit muodostaa yhteyden siihen tarvittavat elementit ottaa käyttöön muut toimintolohkot ja portit, kuten ADC, DAC, SPI, I2C jne. Jatkossa näitä laitteita tarkastellaan tarkemmin.

OHJELMOINTI
Nykyään monet yritykset tarjoavat työkaluja ohjelmien luomiseen ja virheenkorjaukseen STM32-mikro-ohjaimille. Näitä ovat ARM Ltd:n Keil, IAR Embedded Workbench for ARM, Atol lic TrueStudio, CooCox IDE, GCC ja Eclipse IDE. Kehittäjä voi valita ohjelmiston mieltymyksensä mukaan. Alla kuvataan Keil-yrityksen Keil uVision 4 -työkalupakkia, joka tukee valtavaa määrää erilaisia ​​mikro-ohjaimia, jolla on kehitetty virheenkorjaustyökalujärjestelmä ja jota voidaan käyttää ilmaiseksi luodun koodin koon rajoituksin 32 kilotavua ( mikä itse asiassa on suurin tarkasteltavina oleville mikro-ohjaimille).

Helppo ja nopea aloitus CooCox CoIDElla.

Joten aloitetaan. Siirry CooCoxin viralliselle verkkosivustolle ja lataa uusin versio CooCox CoIDE. Lataaminen edellyttää rekisteröitymistä, rekisteröinti on helppoa ja ilmaista. Asenna sitten ladattu tiedosto ja suorita se.

CooCox CoIDE- Eclipseen perustuva kehitysympäristö, joka tukee STM32:n lisäksi monia muita mikro-ohjainperheitä: Freescale, Holtek, NXP, Nuvoton, TI, Atmel SAM, Energy Micro jne. Jokaisen uuden CoIDE-version myötä mikro-ohjainten luetteloa päivitetään jatkuvasti. Kun CoIDE on asennettu onnistuneesti, suorita:

Näkyviin tulee vaiheen 1 aloitusikkuna, jossa sinun on valittava mikro-ohjaimemme valmistaja. Paina ST ja siirry vaiheeseen 2 (valitse mikro-ohjain), jossa sinun on valittava tietty malli. Meillä on STM32F100RBT6B, joten napsauta vastaavaa mallia:

Oikealla näkyy Ohje-ikkuna lyhyet ominaisuudet jokainen siru. Kun olet valinnut tarvitsemamme mikro-ohjaimen, siirrymme kolmanteen vaiheeseen, vaihe 3 - valitsemiseen tarvittavat kirjastot töihin:

Tehdään yksinkertainen projekti LEDin vilkkumiseen, kuten on tapana mikrokontrollerien oppimisessa.

Tätä varten tarvitsemme GPIO-kirjaston. Kun se on käytössä, CoIDE pyytää sinua luomaan uusi projekti. Napsauta Kyllä tässä ehdotuksessa, ilmoita kansio, johon projektimme tallennetaan, ja sen nimi. Samanaikaisesti CoIDE yhdistää projektiin 3 muuta kirjaston toimintaan tarvittavaa ja luo myös kaiken tarvittavan projektirakenteen:

Toinen hyvä puoli CoIDEssa on, että sillä on kyky ladata esimerkkejä suoraan kehitysympäristöön. Komponentit-välilehdellä näet, että esimerkkejä on melkein jokaisesta kirjastosta, napsauta GPIO (4 esimerkkiä) ja katso ne:

Voit lisätä siihen omia esimerkkejäsi. Kuten yllä olevasta kuvakaappauksesta näet, esimerkit sisältävät jo koodin GPIO_Blink-LEDin vilkkumiseen. Voit napsauttaa Lisää-painiketta ja se lisätään projektiin, mutta mukana olevana tiedostona, joten teemme sen toisin ja kopioimme koko esimerkkikoodin main.c-tiedostoon. Ainoa asia on korvata tyhjä GPIO_Blink(void) rivi rivillä int main(void). Joten paina F7 (tai valitse Project->Build valikosta) kokoaaksesi projektin ja... ei onnea!

Ympäristö tarvitsee GCC-kääntäjä, mutta meillä ei ole sitä. Mene siksi GNU Tools for ARM Embedded Processors -sivulle, valitse käyttöjärjestelmätyyppi oikealta ja lataa työkaluketjun uusin versio. Sitten suoritamme tiedoston ja asennamme gcc-työkaluketjun. Seuraavaksi ilmoitamme CoIDE-asetuksissa oikea tapa työkaluketjuun:

Paina F7 uudelleen (Project->Build) ja katso, että käännös onnistui:

Jäljelle jää vain mikro-ohjaimen vilkkuminen. Tehdäksesi tämän, milloin USB-apu Yhdistämme levymme tietokoneeseen. Sitten debuggerin asetuksissa sinun on asennettava ST-Link tehdäksesi tämän, valitse valikosta Project->Configuration ja avaa Debugger-välilehti. Valitse ST-Link pudotusvalikosta ja sulje ikkuna:

Yritetään vilkuttaa MK. Valitse valikosta Flash->Ohjelman lataus (tai napsauta vastaavaa kuvaketta työkalupalkissa) ja katso, että MK on flashed onnistuneesti:

Näemme taululla vilkkuvan LEDin, mielestäni ei ole järkevää tarjota videota tai valokuvaa, koska... kaikki näkivät sen.

Myös CoIDEssa ne toimivat erilaisia ​​tiloja virheenkorjaus, paina CTRL+F5 (tai Debug->Debug-valikossa):

Siinä kaikki. Kuten näet, CoIDEn käyttöönotto ja työskentely on hyvin yksinkertaista. Toivon, että tämä artikkeli rohkaisee sinua tutkimaan erittäin lupaavia ja edullisia STM32-mikrokontrollereita.

Julkaistu 8.9.2016

Mikro-ohjaimet STM32 ovat yhä suositumpia tehonsa, melko monipuolisten oheislaitteiden ja joustavuuden ansiosta. Aloitamme opiskelun käyttämällä budjettitestitaulua, jonka hinta ei ylitä 2 dollaria (kiinalaiselta). Tarvitsemme myös ST-Link ohjelmoija, jonka hinta on noin 2,5 dollaria (kiinalaiselta). Tällaisia ​​kulumääriä on tarjolla sekä opiskelijoille että koululaisille, joten se on tästä budjettivaihtoehto Ehdotan, että aloitamme.


Tämä mikro-ohjain ei ole tehokkain STM32, mutta ei myöskään heikoin. On erilaisia ​​levyjä Kanssa STM32, mukaan lukien Löytö joka maksoi noin 20 dollaria. Tällaisilla levyillä melkein kaikki on sama kuin meidän levyllämme, plus ohjelmoija. Meidän tapauksessamme käytämme ohjelmoijaa erikseen.

Mikro-ohjain STM32F103C8. Ominaisuudet

  • ARM 32-bittinen Cortex-M3-ydin
  • Maksimitaajuus 72 MHz
  • 64Kb Flash-muisti ohjelmille
  • 20Kb SRAM-muisti
  • Virtalähde 2,0 … 3,3 V
  • 2 x 12-bittinen ADC (0 ... 3,6 V)
  • DMA-ohjain
  • 37 5V sietävät tulot/lähdöt
  • 4 16-bittistä ajastinta
  • 2 vahtikoiran ajastinta
  • I2C – 2 bussia
  • USART – 3 bussia
  • SPI – 2 bussia
  • USB 2.0 täysi nopeusliitäntä
  • RTC – sisäänrakennettu kello

Saatavilla STM32F103C8-kortilla

  • Lähtöportit A0-A12, B0-B1, B3-B15, C13-C15
  • Micro-USB jonka kautta voit saada virtaa levylle. Levyssä on 3,3V jännitteenvakain. 3.3V tai 5V teho voidaan syöttää vastaaviin nastoihin levyllä.
  • Painike Nollaa
  • Kaksi jumpperia BOOT0 Ja BOOT1. Käytämme sitä vilkkumisen aikana UART.
  • Kaksi kvartsia 8 MHz ja 32768 Hz. Mikro-ohjaimessa on taajuuskerroin, joten 8 MHz kvartsilla voimme saavuttaa maksimitaajuus ohjain 72MHz.
  • Kaksi LEDiä. PWR– ilmoittaa, että virtaa on syötetty. PC13– kytketty lähtöön C13.
  • Liitin ohjelmoijalle ST-Link.

Joten aloitetaan yrittämällä flash-muistia. Tämä voidaan tehdä USART:n kautta tai käyttämällä ohjelmoijaa ST-Link.

Voit ladata laiteohjelmiston testitiedoston. Ohjelma vilkkuu levyn LED-valoa.

STM32-laiteohjelmisto USB-Uart-sovittimella Windowsille

IN järjestelmämuisti STM32 On Käynnistyslatain. Bootloader tallennetaan tuotantovaiheessa ja mikä tahansa mikrokontrolleri STM32 voidaan ohjelmoida käyttöliittymän kautta USART käyttämällä USART-USB-sovitinta. Tällaiset sovittimet valmistetaan useimmiten suosittujen mikropiirien perusteella FT232RL. Liitä ensin sovitin tietokoneeseen ja asenna ohjaimet (tarvittaessa). Voit ladata ajurit valmistajan verkkosivuilta FT232RL– ftdichip.com. Sinun on ladattava ajurit VCP(virtuaalinen com-portti). Ajurien asennuksen jälkeen tietokoneellesi pitäisi ilmestyä virtuaalinen sarjaportti.


Yhdistetään RX Ja TX lähdöt vastaaviin nastoihin USART1 mikro-ohjain. RX liitä sovitin TX mikro-ohjain (A9). TX liitä sovitin RX mikro-ohjain (A10). Koska USART-USB:ssä on 3.3V teholähdöt, syötämme levylle virran siitä.

Jotta mikro-ohjain asetetaan ohjelmointitilaan, sinun on asetettava nastat BOOT0 Ja BOOT1 V haluttu kunto ja käynnistä se uudelleen painikkeella Nollaa tai sammuta ja käynnistä mikro-ohjain. Tätä varten meillä on neulepuserot. Erilaisia ​​yhdistelmiä ohjata mikro-ohjainta eri tiloihin. Olemme kiinnostuneita vain yhdestä tilasta. Tätä varten mikro-ohjaimella on BOOT0 siellä pitäisi olla looginen, ja tulos BOOT1– looginen nolla. Laudalla tämä on seuraava hyppääjän asento:

Painikkeen painamisen jälkeen Nollaa tai irrottamalla ja kytkemällä virta, mikro-ohjaimen on siirryttävä ohjelmointitilaan.

Firmware-ohjelmisto

Jos käytämme USB-UART-sovitinta, portin nimi on suunnilleen tällainen /dev/ttyUSB0

Hanki sirutiedot

Tulos:

Luimme sirulta tiedostoon dump.bin

sudo stm32flash -r dump.bin /dev/ttyUSB0

Kirjoita sirulle

sudo stm32flash -w dump.bin -v -g 0x0 /dev/ttyUSB0

Tulos:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Käyttäen jäsennintä: Raw BINARY Liitäntä serial_posix: 57600 8E1 Versio: 0x22 Vaihtoehto 1: 0x00 Vaihtoehto 2: 0x00 Laitetunnus: 0x0410 (Medium-b:5) 0 -b:5 RAM käynnistyslatain) - Flash: 128KiB (sektorin koko: 4x1024) - Vaihtoehto RAM: 16b - Järjestelmän RAM: 2KiB Kirjoita muistiin Muistin tyhjentäminen Kirjoitettu ja vahvistettu osoite 0x08012900 (100,00%) Valmis. Aloitetaan suoritus osoitteessa 0x08000000... valmis.

STM32-laiteohjelmisto ST-Link-ohjelmoijalla Windowsille

Ohjelmoijaa käytettäessä ST-Link johtopäätöksiä BOOT0 Ja BOOT1 ei käytetä, ja niiden tulee olla vakioasennossa normaali toiminta ohjain.

(Kirja venäjäksi)

STM32 merkintä

LaiteperheTuotetyyppiLaitteen alaperhePin-määräFlash-muisti kokoPakettiLämpötila-alue
STM32 =
ARM-pohjainen 32-bittinen mikro-ohjain
F = Yleiskäyttöinen
L = Erittäin pieni teho
TS = Kosketusnäyttö
W = langaton järjestelmä sirulla
60 = monikosketusresistiivinen
103 = suorituskykyviiva
F = 20 nastaa
G = 28 nastaa
K = 32 nastaa
T = 36 nastaa
H = 40 nastaa
C = 48/49 nastat
R = 64 nastaa
O = 90 nastaa
V = 100 nastaa
Z = 144 nastaa
I = 176 nastaa
B = 208 nastaa
N = 216 nastaa
4 = 16 kt Flash-muistia
6 = 32 kilotavua Flash-muistia
8 = 64 kt Flash-muistia
B = 128 kt Flash-muistia
Z = 192 kt Flash-muistia
C = 256 kt Flash-muistia
D = 384 kt Flash-muistia
E = 512 kt Flash-muistia
F = 768 kt Flash-muistia
G = 1024 kt Flash-muistia
I = 2048 kt Flash-muistia
H = UFBGA
N = TFBGA
P = TSSOP
T = LQFP
U = V/UFQFPN
Y = WLCSP
6 = Teollisuuden lämpötila-alue, –40…+85 °C.
7 = Teollisuuden lämpötila-alue, -40…+ 105 °C.
STM32F103 C8 T6

Kuinka poistaa kirjoitus-/lukusuojaus?

Jos sait levyn, jossa on STM32F103, mutta ohjelmoija ei näe sitä, tämä tarkoittaa, että kiinalaiset ovat suojanneet mikro-ohjaimen Flash-muistin. Kysymys "miksi?" jätetään se huomiotta. Eston poistamiseksi yhdistämme UART-sovittimen ja ohjelmoimme sen kautta. Asetamme jumpperit ohjelmointia varten ja mennään:

Teen tämän Ubuntusta käyttämällä stm32flash-apuohjelmaa.

1. Tarkista, onko mikro-ohjain näkyvissä:

Sudo stm32flash /dev/ttyUSB0

Sinun pitäisi saada jotain tällaista:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Liitäntä serial_posix: 57600 8E1 Versio: 0x22 Vaihtoehto 1: 0x00 Vaihtoehto 2: 0x00 Laitetunnus: 0x0410 (Keskitiheys) - RAM-muistia: - 510KbloaderB: 2:10K 128KiB (sektorin koko: 4x1024) - Vaihtoehtoinen RAM: 16b - Järjestelmän RAM: 2KiB

2. Poista lukusuojaus ja sitten kirjoitussuojaus:

Sudo stm32flash -k /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Liitäntä serial_posix: 57600 8E1 Versio: 0x22 Vaihtoehto 1: 0x00 Vaihtoehto 2: 0x00 Laitetunnus1:0Bdenity: 0xidium Käynnistyslataimen varaama 512b) - Flash: 128KiB (sektorin koko: 4x1024) - Vaihtoehto RAM: 16b - Järjestelmän RAM: 2KiB Luku-Suojauksen poistaminen Flash valmis.

sudo stm32flash -u /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Liitäntä serial_posix: 57600 8E1 Versio: 0x22 Vaihtoehto 1: 0x00 Vaihtoehto 2: 0x00 Laitetunnus1:0Bdenity: 0xidium Käynnistyslataimen varaama 512b) - Flash: 128KiB (sektorin koko: 4x1024) - Vaihtoehto RAM: 16b - Järjestelmän RAM: 2KiB Kirjoitussuojauksen estävä flash Valmis.

Nyt voit työskennellä normaalisti mikro-ohjaimen kanssa.

Mikro-ohjaimet kissanpennuille

Miau kaikki, kissat :)

Eräänä päivänä kissa jätti minut: (No, miksi syödä valeriaania, päätin ryhtyä töihin niin sanotusti "isänmaan hyväksi." Olen pitkään halunnut työskennellä digitaalisten laitteiden parissa, mutta en ei ole aikaa (joko nukkua tai kissan kanssa kävellä katoilla), ja nyt on aika ilmestynyt..)

Kuten tavallista, kaikki alkaa valinnasta. No, näyttää siltä, ​​​​että valinta on pieni PIC tai AVR. Jotenkin pidin jälkimmäisestä enemmän. Tarvitsin myös USB-ohjelmoijan, koska koneessa ei ollut muita portteja, jonka hinta melkein sai hännän irti. Siellä on myös Arduino - sellainen peto. Se voidaan ohjelmoida myös USB:n kautta. No, luulen, että "se mitä lääkäri määräsi". Kylässämme sen saa vain verkkokaupan kautta. Löysin paremman tarjouksen, melkein ostin sen ja... OOP! Etsin - STM32VL-Discovery. Mikä eläin tämä on? Hmm, STM32.. Kuulin jotain korvani kulmasta.. Ja ominaisuudet saavat viikset pystyssä, rehellisesti!

Ja hänellä on niin monta tassua!

  • Eli järjestyksessä:
  • Arduinossa on 14 digitaalista I/O-porttia ja 6 analogista tuloa. STM32VL-Discoveryssä on 45 digitaalista tuloa/lähtöä, joista 10 voidaan valinnaisesti muuntaa analogisiksi tuloiksi.
  • Arduinossa on 32 kt ohjelmatallennustilaa ja 2 kt RAM-muistia. STM32VL-Discoveryssa on 64 kt ohjelman tallennustilaa ja 8 kt RAM-muistia. Arduinosta kellotaajuus
  • STM32VL-Discoveryssa on 16 MHz ja 24 MHz. Mikä tahansa STM32-mikro-ohjain voidaan korvata toisella STM32:lla, mutta parhaat ominaisuudet
  • STM32 voidaan ohjelmoida ilman ohjelmoijaa COM-portti(tästä lisää vähän myöhemmin)
  • Arduinon hinta kirjoitushetkellä on ~1300 ruplaa, STM32VL-Discovery ~600 ruplaa. Tämä on yli 2 kertaa halvempi!

Mitä seuraavaksi? STM32VL-Discoveryssa on sisäänrakennettu ohjelmoija/debuggeri, joka pienellä käpälän liikkeellä (hyppylevyt irrottamalla) voi ohjelmoida ja debugata (virheenkorjaus on erittäin hyödyllinen asia, mutta siitä lisää myöhemmin) STM32-mikrokontrollereita kortin ulkopuolella. Tämä ei toimi Arduinon kanssa. Eli STM32VL-Discoveryn avulla säästämme rahaa ja saamme lisää tuottavuutta ja luovaa vapautta :)

Ja itse STM32-mikro-ohjaimet näyttävät houkuttelevammilta kuin muut:

STM32F100C4T6B ATtiny24A-SSU PIC16F688-I/SL STM32F103RET6 ATmega1284P-PU PIC18F4550-I/PT
Keskihinta, hiero 60 65 60 240 330 220
Kellotaajuus, MHz 24 20 20 72 20 48
Flash-muisti, KB 16 2 4 512 128 16
RAM, tavu 4096 128 256 65536 16384 2048
USART, kpl. 2 0 0 5 2 0
SPI, kpl. 1 1 0 3 1 1
ADC, kpl. 16x12 bittiä 8x10 bittiä 8x10 bittiä 16x12 bittiä 8x10 bittiä 13x10 bittiä
DAC, kpl. 1x12 bittiä 0 0 2x12 bittiä 0 0
Tulo/lähtölinjojen lukumäärä, kpl. 37 12 12 51 32 35

Ja STM32 on 32-bittinen, mikä tarkoittaa, että se voi toimia 32-bittisen tiedon kanssa yhdessä kellojaksossa. AVR ja PIC eivät voi ylpeillä tästä.

No, kissat, oletteko varmoja? Aloitetaan sitten nuoren digitaalisen soturin kurssi!)

Miten se toimii? Mistä se koostuu? Mitä hän voi tehdä?

Kuten tiedät, kaikki kissat ovat erittäin uteliaita, ja radiokissat erityisesti!

Mikro-ohjain on mikropiiri, joka yhdistää prosessorin toiminnot, oheislaitteet, jossa on RAM, flash-muisti. Kuten tietokone, vain pienempi!

Tehdään analogia: tietokonetta ohjaa käyttöjärjestelmä, ja mikro-ohjainta ohjaa kirjoittamasi "laiteohjelmisto"; tietokoneen käyttöjärjestelmä on tallennettu kiintolevylle, mikro-ohjaimen "laiteohjelmisto" on tallennettu sen flash-muistiin; RAM-toiminnot ovat samanlaisia ​​- muuttuvien tietojen tallentaminen ohjelman suorittamisen aikana. Ja MK:ssa on myös erilaisia ​​oheislaitteita, kuten esimerkiksi ADC ja DAC.

MK kommunikoi ulkomaailman kanssa vartalollaan olevilla tassuilla (ei tietenkään kuten kissoilla, vaan metallisilla). Mutta kaikkia niitä ei ohjaa ohjelma, on virtanastat, nollausnasta, oheislaitteiden virtanastat, varavirtaa. Ja ne, joita ohjelma hallitsee, on jaettu ryhmiin, joita kutsutaan "porteiksi". Kaikki nämä ohjatut lähdöt on nimetty kahdella kirjaimella ja numerolla. Esimerkiksi PA1: P - portti, A - portti "A", 1 - tämän portin pin-numero.

Ohjelmassa portit konfiguroidaan joko tuloksi tai ulostuloksi, kuten haluat.

Tuloa varten konfiguroidun portin nastat voivat olla eri tiloja kullekin nastalle:

  • Digitaalitulo on tulo, jonka arvo (looginen 1 tai 0) voidaan lukea ohjelmalla. Jos jännite tulossa on 0, niin arvo on 0, jos jännite tulossa on yhtä suuri kuin syöttöjännite, niin tulon arvo on 1. Kolmannesta ei anneta. Voidaan tehdä vetovastuksen avulla joko tehoon tai maahan
  • Analoginen tulo - tulo, jonka arvon ohjelma pystyy lukemaan, mutta arvoja voi olla monia - jopa 4096. Tarkemmin sanottuna 0:sta, jos tulojännite on 0 suhteessa mikrokontrollerin miinusvirtalähteeseen, arvoon 4095 jos tulojännite on yhtä suuri kuin syöttöjännite. Kaikki nämä muunnokset tekee ADC - analogia-digitaali muunnin, sen avulla voit esimerkiksi mitata termistorin jännitteen ja selvittää lämpötilan tai mitata valovastuksen jännitteen ja selvittää siihen putoavan valon kirkkauden... No, voit keksiä paljon asioita, jos on mielikuvitusta :) Jos syötät mikrokontrolleriin 3 V:sta, niin 0V = 0 ja 3B = 4096, mikä tarkoittaa 3/4096 = 0,000732421, ts. kun syöttöjännite muuttuu 0,000732421V, ohjelman tuloarvo muuttuu 1:ksi. Se ei ole niin monimutkaista, eikö? Jatketaan
  • Digitaalinen tulo vaihtoehtoisessa toimintatilassa - tulo oheislaitteiden kanssa työskentelemiseen. Esimerkiksi tulo ajastimelle tai tulo jollekin rajapinnalle. Tämän tulon arvoa ei voida lukea ohjelmasta. Esimerkiksi ohjelmassa voit lukea tästä lähdöstä jonkin liitännän kautta vastaanotettuja tietoja.

Ja lähtöä varten määritetyssä portissa voi olla nastat seuraavissa tiloissa:

  • Poistu. Vain tie ulos. Tavallinen digitaalinen lähtö. Nastassa on joko syöttöjännite (looginen 1) tai nastassa ei ole jännitettä (looginen 0). Se on yksinkertaista.
  • Lähtö vaihtoehtoisessa toimintatilassa - oheislaitteiden ohjaama lähtö. Tätä lähtöä ei voi ohjata ohjelmasta, mutta ohjelma voidaan pakottaa ohjaamaan tätä lähtöä, esimerkiksi rajapinta.

Mutta kaikkia johtopäätöksiä ei voida määrittää "kuten haluat". Saadaksesi selville, mikä on mahdollista ja mikä ei, sinun on katsottava dokumentaatiota (taulukko 4) tai käytettävä MicroXplorer-ohjelmaa.

Ennen kuin käytät porttia, sinun on ensin kellotettava se - lähetä kellopulsseja siihen, koska aluksi niitä ei toimiteta energian säästämiseksi. Voit valita eri taajuudella kellotus - korkeampi taajuus - tämän portin tulot tai lähdöt toimivat nopeammin, mutta myös korkeampi energiankulutus.

Siitä on myös päätelmiä BOOT 0 Ja BOOT 1. Nämä nastat eivät kuulu portteihin, niitä käytetään ohjaamaan mikro-ohjaimen kuormitusta. Jos virransyötön aikana BOOT 0 -nastassa on looginen nolla (nasta on kytketty yhteiseen pisteeseen), niin mikro-ohjain suorittaa flash-muistiin ladatun ohjelman, ts. Laiteohjelmistosi. Jos virtaa syötettäessä BOOT 0 -nasta on looginen ykkönen (nasta on kytketty mikro-ohjaimen virtalähteeseen) ja BOOT 1 -nasta on looginen nolla, mikro-ohjain ei suorita laiteohjelmistoasi, vaan tehtaalla tallennettu käynnistyslatain. . Muista tämä! Käytät tätä paljon, kun työskentelet STM32-mikro-ohjainten kanssa! Joskus ladataan tehtaalla tallennettua käynnistyslatainta - ainoa tapa kirjoittaa/vaihtaa mikro-ohjaimen laiteohjelmistoa. Tämä tapahtuu esimerkiksi määritettäessä laiteohjelmistoon nastat, joihin ohjelmoija on kytketty, tai kun mikro-ohjaimen laiteohjelmisto flash-muistia ilman ohjelmoijaa. Niin suosittelen lämpimästi Piirilevyä suunniteltaessa nämä nastat (tai vähintään BOOT 0) tulee sijoittaa sopivaan paikkaan.

Joten keksimme sen :) Nyt tiedämme mikä mikro-ohjain on ja mistä se koostuu. Nyt opimme lisää viisautta ja siirrymme mielenkiintoisimpaan asiaan - harjoitteluun!

Mikrokontrollerissa oleva ohjelma suoritetaan askel askeleelta. Yksi prosessorijakso on yksi ohjelman vaihe.

Anna esimerkiksi punaisen ja vihreän valon vilkkua, kunnes painiketta painetaan. Kunkin lampun kesto on 5 sekuntia. Tässä on algoritmi:

  1. Katsotaan onko painikkeella jännitettä tulossa? (painike sulkee mikrokontrollerin lähdön + virtalähteeseen)
  2. Jos jännitettä ei ole, niin punainen valo syttyy 5 sekunniksi, vihreä valo sammuu, jos on jännite, aloitamme kaikki alusta
  3. Tarkistetaan uudelleen
  4. Jos jännitettä ei ole, niin vihreä valo syttyy 5 sekunniksi, punainen valo sammuu, jos on jännite, aloitamme kaikki alusta
  5. Aloitetaan alusta

STOP! Entä jos painan painiketta valon palaessa? Mitään ei tapahdu! Koska ohjelma suoritetaan askel askeleelta ja painikkeen painalluksen tarkistusvaihe on hehkulamppujen vaihtohetkellä.
Juuri tällaisia ​​tapauksia varten on olemassa sellainen asia kuin keskeyttää

Keskeytykset mahdollistavat pääohjelman suorittamisen keskeyttämisen. Tämä voi tapahtua joko ulkoisella tapahtumalla (napin painaminen, painikkeen vapauttaminen, tiedon vastaanottaminen jne.) tai sisäisellä (ajastimella tai esimerkiksi on aika ruokkia kissa). Kun juuri tämä keskeytys tapahtuu, aliohjelma alkaa suorittaa. Aliohjelmat voivat olla erilaisia erilaisia ​​tyyppejä keskeytyksiä, näitä rutiineja kutsutaan keskeytyskäsittelijät.

Kun tämä sama keskeytyskäsittelijä lopettaa työnsä, pääohjelma alkaa suorittaa paikasta, jossa se keskeytettiin.

Noustaan ​​jaloillemme!

No, kissanpennut, on aika nousta tassuille! Toivottavasti sinulla on jo debug board? Tai ainakin mikrokontrolleri? Toivottavasti on :) Ja jos ei, niin sitten juostaan ​​kauppaan! (eikä mielellään makkaralle. Vaikka...) Mitä tämä opetus on ilman harjoittelua?

Aluksi on hienoa saada debug board, esimerkiksi STM32VL-Discovery, mutta jos rupikonna kuristaa tai makkaralle ei vieläkään riitä, niin pärjää yhdellä mikro-ohjaimella ja RS-232 -> UART-liitännällä. muunnin (esimerkiksi MAX3232) tai USB -> UART (esim. FT232RL). Tässä tapauksessa 100 ruplaa voidaan tehdä kokonaan, mutta sinun on tehtävä piirilevy ja juotettava vähintään 48 nastaa, joiden leveys on 0,3 mm, 0,2 mm:n raolla. Varoitin sinua.

Ensin sinun on luonnollisesti liitettävä virheenkorjauskortti tai ohjain tietokoneeseen.

Jos sinulla on kehityslautakunta:

Viankorjauslevyllä se on tietysti helpompaa. Otamme Mini-USB-johdon ja yhdistämme levyn tietokoneeseen, kaikki ajurit tulisi asentaa automaattisesti. Katso STMicroelectronics STLink dongle laitehallinnassa - hyvä merkki! No, jos jokin meni pieleen ja mikään ei toiminut, sinun ei tarvitse naarmuttaa sohvaa, sinun tarvitsee vain tulla tänne asentamaan STM32 ST-LINK-apuohjelma.

No, jos olet käynnissä olevan tietokoneen onnellinen omistaja Windowsin ohjaus 8, niin ennen yllä olevien toimien suorittamista sinun on tehtävä seuraava: Vaihtoehdot -> Muuta tietokoneen asetuksia -> Kenraali -> Erikoisvaihtoehdot lataukset ja valitse vaihtoehto Kuljettajan allekirjoituksen vahvistus poistetaan käytöstä.

Jos sinulla on mikro-ohjain:

Jos sinulla on yksi mikro-ohjain, sinulla on oltava suorat jalat. Mutta en epäile sinua!

Ennen kuin mikro-ohjain kytketään tietokoneeseen, se on juotettava painettu piirilevy. Tätä varten tarvitset mikro-ohjaimen ja suorien tassujen lisäksi ainakin piirilevyn. Ja sitten on sinun luovuutesi.

Työminimi alla olevassa kaaviossa:

Mutta tämä on kiinnostamaton minimi.

Lisää LEDit ja painikkeet (älä unohda BOOT-nastat) näin

Mutta tämän kirppun juottamisessa voi olla ongelmia. Mutta toivottavasti niitä ei synny. Päädyin juottamaan sen suosikkini Neuvostoliiton 25 W juotosraudallani, jonka kärjen leveys oli 3/4 ohjaimen leveydestä. Olen lisää ongelmia painetun piirilevyn valmistuksessa... no, jokaisella on oma tekniikkansa.

Ja sovitin on tehtävä UART:lle ostamasi mikropiirin dokumentaation mukaan.

Yhdistämme piirilevyn TxD- ja RxD-nastat sovittimen RxD- ja TxD-nastoihin, vastaavasti. Älkäämme unohtako kaiken yhteistä asiaa ja ravintoa.

Ohjelmiston valinta ja asennus

Käytämme kehitysympäristöä CooCox IDE, mutta tämä ei ole vain niin, vaan useista syistä:

  • Ensinnäkin se on vapaasti levitettävä ohjelmisto. Tämä tarkoittaa, että karmasi on puhdas
  • Mielestäni (eikä vain minun) tämä kehitysympäristö on muita kätevämpi
  • Mahdollistaa virheenkorjauksen käytön
  • Paljon esimerkkejä, jotka voidaan ladata kehitysympäristöön (hyödyllinen kissanpennuille ja muille)

Kehitysympäristö on koodausohjelma, kääntäjä ja virheenkorjaus yhdessä. Kätevää :) Mutta jos joku ankara Tšeljabinskin kissa on mukavampaa kirjoittaa koodia (esimerkiksi muistilehtiöön), kääntää ja vilkkua erilaisia ​​ohjelmia- En välitä, tarvitset STM32 ST-LINK -apuohjelman ladataksesi laiteohjelmiston mikro-ohjaimeen. Omistaja on herrasmies, kuten he sanovat.

Tämä kehitysympäristö perustuu tunnettuun Eclipseen.

  1. Mennään tänne
  2. Tykistäminen Lataa CoCenterin kautta (suositellaan)
  3. Anna sähköpostiosoitteesi (ei hätää, se on siellä "esitystä varten")
  4. Lataamisen jälkeen asenna tämä CoCenter
  5. Ensimmäisellä rivillä, jossa lukee CooCox CoIDE pistää Lataa
  6. Kun lataus on valmis, sen sijaan Lataa tahtoa Asentaa. Klikkaa tästä
  7. Mennään tänne
  8. Aivan kolumnissa Lataa lataa se tiedosto .exe. Asennataan se.
  9. Avaamme sen itse CooCox CoIDE, välilehti Projekti, Valitse Työkaluketjun polku.
  10. Osoitamme polun tiedostoon arm-none-eabi-gcc.exe (asensimme tämän vaiheessa 8, polku on suunnilleen seuraava: D: Ohjelmatiedostot (x86) GNU Tools ARM Embedded4.7 2013q1bin)
  11. Avataan taas COIDE, paina Näytä -> Kokoonpano, avaa välilehti Debuggeri ja me teemme tämän [kuva]
  12. Olemme iloisia, koska nyt voimme kirjoittaa ohjelman ja flash sen mikrokontrolleriin! Niin me teemme.

Jos sinulla on vaihtoehto ilman virheenkorjauslevyä/ohjelmoijaa, tarvitset ohjelman ladataksesi ohjelman MK:hen Flash Loader Demonstrator joka sijaitsee

löydämme yhteinen kieli

Ennen kuin kirjoitat ensimmäisen ohjelman, sinun on löydettävä yhteinen kieli MK:n kanssa. On epätodennäköistä, että hän oppii kieltämme, joten meidän on opittava (tai ehkä vain muistettava) kieli, jolla kommunikoimme MK: n kanssa, tämä on C. Tarvitsemme vain perusasiat (ohjelman kokoonpano, funktiot, operaattorit). Jos osaat tämän kielen, voit siirtyä heti kohtaan "Ensimmäinen ohjelma", mutta tuon ne, jotka eivät osaa, ajan tasalla.

Projekti koostuu tiedostoista, joiden pääte on .c Ja .h. Ensimmäinen sisältää funktiot, toinen esimerkiksi käytettyjen funktioiden nimet ja vakiot. Näin se on. Useimmat päätiedosto, joka sisältää ohjelmakoodin main.c. Jotta voit käyttää erilaisia ​​toimintoja, sinun on yhdistettävä kirjastot näihin toimintoihin. Ne muodostavat yhteyden tallentamalla #include "kirjaston_nimi" No, kirjastojen pitäisi luonnollisesti olla mukana projektissa. Ne sisältyvät tiedoston alkuun.

Toiminnot ovat ainutlaatuinen osa ohjelmaa. Yleensä ohjelma koostuu yhdestä tai useammasta funktiosta. Toiminto näyttää tältä:

paluumuuttujan_tyyppi funktion_nimi (muuttujan_tyyppi)
{
Toimintorunko
}

Voit lähettää funktiolle muuttujan, funktio käsittelee sen ja palauttaa arvon. On erittäin kätevää käyttää funktiota toistuviin toimiin sen sijaan, että kirjoitat jatkuvasti samaa koodinpätkää. Voit yksinkertaisesti lähettää muuttujan funktiolle ja vastaanottaa käsitellyn arvon.

Ennen kuin voit käyttää funktiota, se on ilmoitettava aivan tiedoston alussa. He tekevät sen näin:

paluumuuttujan_tyyppi funktion_nimi (muuttujan_tyyppi);

Ai niin, unohdin tärkeimmän! Jokaisen rivin lopussa on oltava puolipiste!

Jos toiminto ei palauta mitään (esimerkiksi aikaviive, se vain vetää kissaa hännästä ajoissa), tyyppi ilmoitetaan mitätön.

Käynnistettäessä toiminto suoritetaan aina ensin pää().

No, olemme ilmeisesti keksineet toiminnot, ymmärtäminen tulee vasta harjoituksen myötä.

edellä mainitsin muuttuva tyyppi. Kaikki muuttujat voivat olla erilaisia ​​tyyppejä, tässä tärkeimmät:

  • INT - tämän tyyppinen muuttuja voi olla vain kokonaisluku -2147483648 - 2147483647
  • FLOAT - tämän tyyppinen muuttuja on luku, jonka tarkkuus on enintään 7 numeroa ±1,5*10-45 - ±3,4*1033
  • DOUBLE - numero, jonka tarkkuus on jopa 16 numeroa ±5*10-324 - ±1,7*10306
  • ULONG on myös kokonaisluku, mutta välillä 0 - 18446744073709551615
  • PITKÄ - kokonaisluku välillä -9223372036854775808 - 9223372036854775807
  • CHAR - yksi merkki
  • BOOL on looginen muuttuja. Sillä voi olla vain 2 arvoa: tosi tai epätosi.

Merkkijono (sana, lause) voidaan esittää merkkijonona tyyppi char. Esimerkiksi:

char string = "Sana";

Tässä hakasulkeet ovat merkkien lukumäärä rivillä, "stroka" on taulukon nimi.

Ennen muuttujan käyttöä se on ilmoitettava. (määritä vain muuttujan tyyppi ja nimi)

  • + -lisäys.
  • - -vähennys.
  • * - kertolasku.
  • / -jako.
  • = - arvon antaminen muuttujalle.

Esimerkiksi ilmaisu a=b+c tarkoittaa muuttujan määrittämistä a muuttujien arvojen summan arvo b Ja c.

  • ++ - lisäys. Kasvata muuttujan arvoa yhdellä
  • -- -vähennys. Muuttujan arvon pienentäminen yhdellä

Esimerkiksi ilmaisu a++ tarkoittaa muuttujan arvon kasvattamista a 1:llä (sama kuin a=a+1)

  • == - vertailu, yhtäläisyysmerkki. (EI SEKÄ SEKÄ TEHTÄVÄKSI)
  • != - vertailu, "ei tasa-arvo" -merkki.
  • < - vertailu, "vähemmän kuin" -merkki.
  • <= - vertailu, "pienempi tai yhtä suuri" merkki.
  • > - vertailu, "lisää"-merkki.
  • >= - vertailu, "suurempi tai yhtä suuri" merkki.

Esimerkiksi ilmaisu a tulee tosi, jos muuttujan arvo a pienempi kuin muuttujan arvo b ja epätosi, jos arvot ovat samat tai a lisää b. Ilmaisu a==b totta jos a on yhtä suuri b ja väärä jos a ei tasa-arvoinen b, MUTTA ilmaisu a=b totta Aina koska se ei ole vertailu, se on muuttujan osoitus a muuttuvat arvot b.

  • % - divisioonan loppuosa

Esimerkiksi jos a = 5,b = 3, sitten lausekkeen arvo a%b on yhtä suuri kuin 2 (koska 5/3 = 1 (jäljellä 2))

  • << - bittikohtainen siirto vasemmalle. Menemättä yksityiskohtiin ilmaisun merkitys a< C-kielessä se on yhtä suuri kuin lauseke a*2 b
  • >> - bitti kerrallaan oikealle. Ilmaisu a >> b ohjelmassa vastaa lauseketta a/2 b
  • & -loogista JA.
  • | -loogista TAI.
  • ~ - inversio.

Melkein unohdin kertoa sinulle syklistä. Perus:

kun (kunto) (

silmukan runko

Silmukan runko (kaikki aaltosulkeissa) suoritetaan, kun ehto on tosi (kunnes ehdosta tulee epätosi).

for (alkuarvo; silmukka_suoritettu_kunnes, vaihe) (

silmukan runko

Alkuarvo- laskurin alkuarvo

Loop_executes_until - Silmukka toimii, kunnes mikä arvo saavutetaan

Vaihe - missä askelissa laskuri laskee?

Esimerkiksi

for (i=0; i<10, i++) {

silmukan runko

Tässä on muuttujan alkuarvo i on yhtä kuin 0, silmukka jatkuu muuttujan arvon saakka i alle 10, joka kerta kun silmukka suoritetaan muuttujalle i 1 lisätään. Voit myös muuttaa muuttujan arvoa suoraan silmukassa.

jos (ehto)(

runko 1

) muu (

runko 2

Ehdollisessa siirrossa "body 1" suoritetaan, jos ehto on tosi, ja "body 2" suoritetaan, jos ehto on epätosi. On myös tämä vaihtoehto:

jos (ehto 1)(

) muuten jos (ehto 2) (

Tässä tapauksessa "body 1" suoritetaan, jos "ehto 1" on tosi, "body 2" suoritetaan, jos "ehto 2" on tosi. Tällaisia ​​ehtoja voi olla mikä tahansa määrä, ja voi olla myös yksi muu.

Ehdot voivat olla yksinkertaisia ​​ja yhdistelmiä: yksinkertainen - yksi looginen lauseke ja yhdistelmä - useita loogisia lausekkeita, joita yhdistää merkki & (ehdot ovat tosi, kun kaikki tämän merkin yhdistämät ehdot ovat tosia) tai | (ehto on tosi, jos ainakin yksi tällä merkillä yhdistetty ehto on tosi).

Toinen hyödyllinen asia on kommentit. Ne auttavat sinua selvittämään unohdetun projektin :) tai vain, jotta et unohda jotain. Voit kommentoida joko merkkien jälkeen // ja rivin loppuun tai alkaa merkeillä /* ja loppu */ , tässä tapauksessa kommentti voi olla kuinka monta riviä tahansa. Kommentit eivät vaikuta ohjelman kokoon.

No, siinä taitaa olla kyse perusasioista. Riittää ensimmäisellä kerralla (artikkelin seuraavan osan kirjoittamiseen asti)

Ensimmäinen ohjelma

Älä poikkea perinteistä (muuten et koskaan tiedä) ja aloita Hello Worldistä. Ja matkan varrella jatkamme mikro-ohjaimeen tutustumista ja kokemuksen saamista niin sanotusti.

Avaa kehitysympäristö:

Napsauta Selaa arkistossa

Valita ST

Sitten näemme luettelon yhdistetyistä kirjastoista.

Yksinkertaista ohjelmaamme varten tarvitsemme: CMSIS-ydin, CMSIS-käynnistys, RCC, GPIO.

Kirjastot CMSIS-ydin Ja CMSIS-käynnistys - järjestelmät, ne on kytkettävä

Kirjasto RCC ajastusjärjestelmän kanssa työskentelemiseen

Kirjasto GPIO I/O-porttien kanssa työskentelyyn

Nyt vasemmalla ikkunassa Projekti avaa tiedosto main.c.

Ensin meidän on yhdistettävä kirjastomme (CMSIS:ää ei tarvitse yhdistää).

Siirrymme ohjelman alkuun ja lisäämme rivit:

#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

mitätön viive(int i) (
varten (; i != 0; i--);
}

Niin. Tässä järjestyksessä funktio ei palauta mitään, joten mitätön, funktion nimi Viive, ilmoittaa muuttuja välittömästi i tyyppi int. Aaltosulkeissa funktion runko on silmukka varten. Tämä on hänen rivinsä. Alkuarvo i emme vaihda, silmukka jatkuu kunnes i ei ole yhtä kuin nolla (kuten i muuttuu nollaksi, sykli pysähtyy, toiminto "sammutetaan"). Jokaisen silmukan rungon (syklin) suorituksen yhteydessä muuttuja i pienenee 1. Eli Syklin ydin on yksinkertaisesti toistaa itseään yhtä monta kertaa i. Kun sykli on käynnissä, aika kuluu, viive tapahtuu.

Mikä portti on vastuussa mistäkin lähdöstä, löytyy MK:n dokumentaatiosta:

Lisää kelloporttiin C rivi:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , PÄÄLLÄ);

Lisää rivi ohjelmaan:

GPIO_InitTypeDef GPIO_Init1;

Tällä rivillä julistimme rakenteen GPIO_InitTypeDef- antoi sille nimen GPIO_Init käytettäväksi ohjelmassamme edelleen.

Mitä parametreja tässä rakenteessa voidaan konfiguroida ja missä muodossa ne ovat, katsomme kaikkea samalla tavalla stm32f10x_gpio.h:

Nyt, jotta voit määrittää pin-parametrit rakenteen avulla, sinun on kirjoitettava sen nimi, laitettava piste ja näkyviin tulee ikkuna, jossa nämä parametrit ilmoitetaan

Kaksoisnapsauta yhtä niistä, ja se ilmestyy riville ja laita sitten = (määritä) ja kirjoita arvo alkaen stm32f10x_gpio.h

Teemme samoin kaikilla parametreilla. Älä unohda jokaisen rivin lopussa olevaa puolipistettä!

GPIO_Init(GPIOC , &GPIO_Init);

Nyt räpyttelemme! Vilkumme syklisesti, teemme silmukkaa samalla kun. Jakson ehto on 1. Yksi on aina tosi, nolla on aina epätosi... siinä se c'est la vie...

Jos haluat käyttää virtaa ulostuloon, sinun on asetettava ulostulo pois päältä, sinun on nollattava bitti. Kuinka tehdä se - kaikki on sama stm32f10x_gpio.h:

Teemme näin:

kun (1)(

GPIO_SetBits(GPIOC, GPIO_Pin_9);

Viive (200 000);

GPIO_ResetBits(GPIOC, GPIO_Pin_9);

Viive (200 000);

1 on aina tosi, mikä tarkoittaa, että silmukka kiertää.

GPIO_SetBits - bitin asetustoiminto

GPIO_ResetBits - bitin palautustoiminto

Viive (200000) - tällä rivillä ohjelman suoritus siirtyy funktioon Viive, sama, jossa sykli varten. Suluissa oleva luku 200000 välitetään tälle funktiolle muuttujana i. (muista rivi mitätön viive (int i)?) ja sama silmukka suoritetaan tässä funktiossa, kaikki 200 000 kertaa. Se on nopea :) syklin päätyttyä varten toiminto DElay lopettaa työnsä, koska hän mitätön, se ei palauta mitään ja ohjelma jatkaa suorittamista.

Koska samalla kun on silmukka, sitten LED päällä, viive, LED pois, viive suoritetaan loputtomana silmukana. Kunnes virta katkeaa tai katkeaa (lisätietoja seuraavassa artikkelissa).

No, ensimmäinen ohjelma on valmis. Paina nyt F7, ohjelma käännetään.

Jos sinulla on virheenkorjauskortti, liitä se USB-johdolla ja paina Lataa koodi Flashiin. Olemme tyytyväisiä tehtyyn työhön ja saatuun tietoon :)

Ja jos sinulla ei ole virheenkorjauskorttia, liitä aiemmin tehty sovitin korttiisi ja sovitin tietokoneen COM-porttiin. Liitä seuraavaksi lähtö BOOT 0 mikro-ohjaimen positiivisella virtalähteellä ja kytke mikro-ohjaimen virta päälle. Tämä saa mikro-ohjaimen siirtymään laiteohjelmistotilaan. Yleensä laiteohjelmistoprosessi ei ole monimutkainen. Sinun tarvitsee vain seurata sovelluksen ohjeita Flash Loader Demonstrator. Ilmoita ensin sen COM-portin numero, jonka kautta mikro-ohjain on kytketty, ja nopeus. Vikojen välttämiseksi on parempi valita pienempi nopeus

Jos ohjelma näkee mikro-ohjaimesi, näkyviin tulee ikkuna, johon kirjoitetaan, kuinka paljon muistia sillä on.

Kun napsautat "Seuraava", näet muistin osoitesivun. Emme tarvitse sitä.

Seuraava askel on tärkein. Voit valita muistin tyhjennyksen tai laiteohjelmiston

Valitse laiteohjelmistoa varten Lataa laitteeseen ja kentällä Lataa tiedostosta valitse käännetty .hex-tiedosto, joka sijaitsee kansiossa CooCox -> CooIDE -> työtila -> projektin_nimi -> projektin_nimi -> Debug -> Bin. Napsauta sitten "Seuraava" uudelleen.

Kun näemme tämän ikkunan:

Katkaise virta mikro-ohjaimesta ja sulje Flash Loader Demonstrator, irrota sovitin ja kytke mikro-ohjain päälle normaali tila(Kun kun se on päällä pin BOOT 0 on kytketty mikro-ohjaimen negatiiviseen virtalähteeseen). Me iloitsemme!

Joten, nyt tiedämme, miksi STM-mikro-ohjaimet ovat parempia kuin muut, tiedämme kuinka mikro-ohjain toimii, tiedämme kuinka mikro-ohjain flash-kortilla ja kortillamme, tiedämme C-kielen perusteet, joita tarvitaan ohjelmoimaan STM32, olemme saaneet kokemusta työskentelystä mikrokontrollerin kanssa (toivottavasti positiivista) ja tärkeintä on, että nyt voit toteuttaa ideasi digitaaliset laitteet elämään (ja kerro niistä rakkaassa RadioKotissamme)! Ne voivat silti olla yksinkertaisia, mutta kaikki syntyy kokemuksesta. Ja seuraavissa artikkeleissa yritän puhua ADC:istä, DAC:ista, keskeytyksistä, virheenkorjauksen käytöstä ja muista hyödyllisistä asioista.

Mitä mieltä olet tästä artikkelista?