Programiranje stm32 u C. ARM

Ovaj članak, koji je još jedan “brzi početak” u savladavanju ARM kontrolera, možda će vam pomoći da napravite prve korake u savladavanju 32-bitnih ARM kontrolera baziranih na Cortex-M3 jezgri - STM32F1xxx serije. Možda će ovaj članak (koji se na ovu temu pojavljuje kao gljive nakon kiše) nekome biti koristan.

Uvod

Zašto ARM?
1. Ima mnogo toga za izabrati ( od strane različitih proizvođača Danas se proizvodi više od 240 ARM kontrolera)
2. Niska cijena(na primjer, za 1 USD možete dobiti 37xI/O, 16K Flash, 4K RAM, 2xUART, 10x12bitADC, 6x16bitPWM).

Započnimo naš rad sa kontrolerima iz ST Microelectronics. Kontrolere bazirane na ARM Cortex-M3 jezgri karakteriše širok spektar perifernih uređaja, visoki nivo performanse, niska cijena
P.S. Na samom početku se čini da su ARM-ovi neka strašna stvorenja (u lemljenju, ožičenju, programiranju, ali to je samo na prvi pogled :) i u to ćete se uvjeriti.

Dakle, proučavat ćemo ARM-ove na primjeru STM32F1 kontrolera. Istovremeno, ova serija ima nekoliko linija:

  • Linija vrijednosti STM32F100 - 24 MHz CPU, kontrola motora, CEC.
  • Pristupna linija STM32F101 - 36 MHz CPU, do 1 MB Flash
  • USB pristupna linija STM32F102 - 48 MHz CPU sa USB FS
  • Performansna linija STM32F103 - 72 MHz, do 1 MB Flash, kontrola motora, USB, CAN
  • Linija povezivanja STM32F105/107 - 72 MHz CPU, Ethernet MAC, CAN, USB 2.0 OTG

Postoji i sljedeća klasifikacija:

STM32 kontroleri mogu biti prisiljeni da se dižu iz 3 memorijska područja (u zavisnosti od stanja pinova BOOT0 i BOOT1 kada se kontroler pokrene ili nakon što se resetuje). Možete napisati program u memoriju kontrolera na sljedeće načine:

1 način:
Koristeći bootloader (već je upisan u sistemsku memoriju) i USART1(USART2 preslikan): Koristi interni signal takta od 8 MHz. Da biste pokrenuli ugrađeni bootloader ožičen u kontroler od strane proizvođača, trebate samo baciti signal iz RS232-3.3V pretvarača (na primjer, baziran na FT232RL) na šape kontrolera TX1, RX1 i prije tog seta BOOT0 = 1 i BOOT1 = 0, pritisnite RESET i možemo ušiti program u kontroler. I zašiven je Flash program Loader Demonstartor od STM-a (za Windows).

PS. Ako koristite LINUX i nemate ploču za otklanjanje grešaka tipa otkrivanja, možete učitati firmver na kontroler preko svima omiljenog rs-232 (zapravo, preko rs-232-3.3V pretvarača). Da biste to učinili, trebate koristiti python skriptu (Ivan A-R) (za LINUX ili MACOSX).
Za početak morate imati instaliran Python 2.6 i biblioteku za rad serijski port- PySerial biblioteka.
Sada, da biste pokrenuli skriptu stmloader.py (naravno sa terminala), morate je malo podesiti da odgovara vašem računaru: otvorite je u uređivaču teksta.
Regrutovanje na komandna linija
~$ dmesg | grep tty
da vidim sve serijski portovi PC.
i nakon kucanja...
~$ setserial -g /dev/ttyS
saznajemo put do naše 232. luke. Ako se sistem žali na setserial, instalirajte ga
~$ sudo apt-get install setserial
saznajemo put do našeg fizičkog porta (na primjer, moj je /dev/ttyS0). Sada morate da upišete ovu putanju do datoteke skripte stm32loader.py umesto podrazumevane „/dev/tty.usbserial-...“. Ukucajte terminal
~$ python stm32loader.py -h
...pozvati pomoć i učitati firmver na naš kontroler.

Metoda 2:
Preko USB-a OTG, koristeći DFU način rada, zahtijeva eksterni kvarc na 8 MHz, 14,7456 MHz ili 25 MHz (nemaju svi kontroleri sa USB OTG-om ovaj bootloader; morate pažljivo pogledati oznake vašeg kontrolera)

3 način:
JTAG/SWD. Pa, za one koji imaju demo ploču tipa Discovery ili domaći JTAG/SWD programator, možete učitati kod i već na ovaj način otkloniti greške u svom mikrokontroleru. Za JTAG, mikrokontroler ima 6 nogu (TRST, TDI, TMS, TCK, TDO, RST) + 2 za napajanje. SWD koristi 4 signala (SWDIO, SWCLK SWO, RESET) i 2 za napajanje.

PS. U okruženju EAGLE, skicirao sam nekoliko praznih kola za kontrolere sa 48, 64 i 100 nogu (fascikla Eagle), a stm32loader sadrži skriptu stm32loader.py

Upoznavanje sa bilo kojom stvari najbolje je započeti s uputama. U nekim slučajevima je sve jasno pa tako, u drugim - "hmm, ništa ne radi, izgleda da još treba da pročitate uputstva." Mikrokontroleri su prilično složeni uređaji i sa njima sigurno ne možete učiniti ništa korisno bez čitanja dokumentacije, iako...

Nakon nekih AVR-ova, možda ćete doživjeti blagi šok zbog broja različitih PDF-ova za STM32 mikrokontrolere. Gdje prvo pogledati? Kako ga koristiti? Šta se više dešava?? Na prvi pogled ništa nije jasno. Stoga sam odlučio napraviti mali pregled svijeta dokumentacije za ove divne mikrokontrolere. Poseban naglasak stavit ću na STM32F103C8T6, budući da planiram napisati nekoliko lekcija o korištenju ovog kamena.

Glavni dokumenti za STM su sljedeći:

  1. Datasheet
  2. Referentni priručnik
  3. Priručnik za programiranje
  4. Errata Sheet

Datasheet

Datasheet sadrži informacije o prisutnosti određenih perifernih uređaja u određenom MK-u, pinout, električne karakteristike i oznake čipova za STM32F103x8 i STM32F103xB, odnosno za ove koje su zaokružene crvenim pravokutnikom:

Jednostavno, jedan datasheet za 8 mikrokontrolera.

Osnove lista sa podacima

Prije svega, trebate obratiti pažnju na odjeljak 7. Šema informacija o naručivanju, u kojem je naznačeno, tada predstavlja svaki znak u oznaci. Na primjer, za STM32F103C8T6: LQFP-48 paket, 64Kb flash, temperaturni raspon –40 do 85 °C.

Glavna razlika između mikrokontrolera iz različitih kolona je broj nogu i jačina blica, sve ostalo je isto. Mali izuzetak je prva kolona verzije Tx: Ovi mikrokontroleri imaju manje SPI, I2C i USART modula. Numeracija periferije počinje od jedan: to jest, ako je u STM32F103 Cx imamo 2 SPI, onda oni imaju imena SPI1 i SPI2, au STM32F103 Tx Imamo samo SPI1. Pošto imamo Datasheet za mikrokontrolere STM32F103x8 i STM32F103xB, ova tabela vrijedi samo za ove modele. Na primjer STM32F103 C8 ili STM32F103 C.B. odgovaraju ovoj tabeli i STM32F103 C6 ne, postoji poseban list za to.

U poglavlju 2.2 Potpuna kompatibilnost u cijeloj porodici kaže se da su STM32F103xx uređaji softverski, funkcionalni i pin-to-pin (za iste slučajeve) kompatibilni.

U referentnom priručniku postoji podjela na sljedeće "tipove" mikrokontrolera: STM32F103x4 i STM32F103x6 su označeni kao uređaji male gustine , STM32F103x8 i STM32F103xB as uređaji srednje gustine , STM32F103xC, STM32F103xD i STM32F103xE kao uređaji visoke gustine . Uređaji niske gustine imaju manje Flash i RAM memorije, tajmera i perifernih uređaja. Uređaji visoke gustine imaju više Flash i RAM memorije, a imaju i dodatne periferne uređaje kao što su SDIO, FSMC, I2S i DAC, dok su ostali potpuno kompatibilni sa ostalim članovima STM32F103xx porodice. Odnosno, ako je u nekoj fazi razvoja postalo jasno da odabrani mikrokontroler nije dovoljan za implementaciju svih mogućnosti, onda možete sigurno odabrati sofisticiraniji kamen bez potrebe da prepisujete sav postojeći softver, a ako je novi kamen u u istom slučaju, onda Nema potrebe za ponovnim ožičenjem štampane ploče.

Referentni priručnik

Idemo dalje. Referentni priručnik sadrži Detaljan opis sve periferije, registre, pomake i tako dalje. Ovo je glavni dokument koji se koristi prilikom kreiranja firmvera za mikrokontroler. Referentni priručnik je sastavljen za veliku grupu mikrokontrolera, u našem slučaju za sve STM32F10xxx, odnosno STM32F101xx, STM32F102xx, STM32F103xx i STM32F105xx/STM32F107xx. Ali STM32F100xx nisu uključeni u ovaj RM, postoji jedan za njih.

Glavna stvar u Referentnom priručniku

Kao što je gore spomenuto, u referentnom priručniku postoji podjela na sljedeće "tipove" mikrokontrolera: niske, srednje, visoke gustoće i povezivost
linija. IN 2.3 Pojmovnik objasnio ko je ko:

  • Uređaji niske gustine Riječ je o mikrokontrolerima STM32F101xx, STM32F102xx i STM32F103xx sa veličinama Flash memorije između 16 i 32 kbajta.
  • Uređaji srednje gustine to su STM32F101xx, STM32F102xx i STM32F103xx, veličine fleš memorije između 64 i 128 kbajta.
  • Uređaji visoke gustine to su STM32F101xx i STM32F103xx, veličine fleš memorije između 256 i 512 kbajta.
  • Uređaji XL gustoće to su STM32F101xx i STM32F103xx, veličine fleš memorije između 768 kbajta i 1 megabajta.
  • Uređaji za povezivanje To su mikrokontroleri STM32F105xx i STM32F107xx.

Naš STM32F103C8T6 je uređaj srednje gustine. Ovo će biti korisno znati kada proučavate periferne uređaje, na primjer, postoje odvojeni odjeljci o RCC-u za uređaje niske, srednje, visoke i XL gustoće i uređaje za povezivanje.

Priručnik za programiranje

Priručnik za programiranje nije bitan dokument na samom početku upoznavanja STM-a, ali je veoma važan kada se ovi mikrokontroleri detaljno proučavaju. Sadrži informacije o jezgri procesora, skupu instrukcija i perifernim uređajima jezgre. Štaviše, ovo nije ista periferija koja je opisana u Referentnom priručniku. To uključuje:

  • Sistemski tajmer - sistemski tajmer
  • Ugniježđeni vektorski kontroler prekida - prioritetni kontroler prekida
  • Kontrolni blok sistema
  • Jedinica za zaštitu memorije

Kada počnemo da se upoznajemo s prekidima u STM32, trebat će nam dio 4.3 Ugniježđeni vektorski kontroler prekida (NVIC). Pa, sistemski tajmer je vrlo kul stvar koja će biti korisna u nekim RTOS-ima ili za kreiranje softverskih tajmera.

Errata Sheet

Errata Sheet je kolekcija svih poznatih hardverskih grešaka i zastoja mikrokontrolera i savjeta kako ih zaobići. Prilično zabavan dokument 🙂 Prije korištenja bilo koje periferije, savjetujem vam da pogledate. Ovo može pomoći u smanjenju broja izgubljenih nervnih ćelija prilikom otklanjanja grešaka u vašem čudesnom firmveru, koji jednostavno ne želi da radi :)

Nedavno me je kolega navukao na ideju da napravim pametnu kuću, a uspio sam čak i naručiti desetine različitih senzora za sebe. Postavilo se pitanje izbora Mikrokontroler(u daljem tekstu MK) ili ploče. Nakon nekog traženja našao sam nekoliko opcija. Među njima su bili Arduino(uključujući njegove klonove, od kojih sam jedan naručio za sebe samo da se zabavim) i Launchpad, ali sve je to suvišno i glomazno (iako je programski mnogo jednostavnije, ali neću pokretati temu o holivarima, svako ima svoj ukus). Na kraju sam odlučio da se ne odlučim za gotovu ploču, već da uzmem samo MK i uradim sve od nule. Na kraju sam birao između Atmel ATtiny (2313), Atmel ATmega(odlučio da odbijem jer nisam mogao da ga nađem za adekvatan novac), STM32(Korteks na jezgru ARM). Već sam se igrao sa tinejdžerom, pa sam to uzeo za sebe STM32VL-Discovery. Ovo se može nazvati uvodom u seriju članaka o STM32. Odmah da rezervišem: neću biti autor većine ovih članaka, jer... Ja tek učim, ovdje ih objavljujem prvenstveno za sebe, da lakše tražim ako nešto zaboravim. I tako idemo!

Opće informacije

Mikrokontroleri porodice STM32 sadrži do sedam 16-bitnih I/O portova sa imenima od PORTA do PORTG. IN specifičan model mikrokontroler Bez izuzetka, dostupni su svi pinovi portova, čiji ukupan broj zavisi od tipa kućišta i naveden je u DataSheet-u za odgovarajuću podporodicu.

Da biste omogućili port x, prvo ga morate povezati na APB2 sabirnicu postavljanjem odgovarajućeg IOPxEN bita u registru za omogućavanje perifernog sata RCC_APB2ENR:

RCC->APB2ENR |= RCC_APB2ENR_IOPxEN; // Omogući taktiranje PORTx-a.

Upravljanje lukom STM32 izvedeno korištenjem skupova od sedam 32-bitnih registara:

  • GPIOx_CRL, GPIOx_CRH– postaviti režim rada svakog od bitova porta kao ulaz ili izlaz, odrediti konfiguraciju ulaznih i izlaznih stupnjeva.
  • GPIOx_IDR– registar ulaznih podataka za očitavanje fizičkog stanja pinova porta x.
  • GPIOx_ODR– izlazni registar upisuje podatke direktno u port.
  • GPIOx_BSRR– registar atomskog resetovanja i podešavanja bitova porta.
  • GPIOx_BSR– registar za poništavanje bitova porta.
  • GPIOx_LCKR– registar zaključavanja konfiguracije pinova.

Načini rada GPIO pina

Načini rada pojedinačnih pinova određeni su kombinacijom bitova MODEy I CNFy registri GPIOx_CRL I GPIOx_CRH(u daljem tekstu: x je naziv porta, y je broj bita porta).

GPIOx_CRL- pin konfiguracijski registar 0...7 portova x:

Struktura registra GPIOx_CRH slična struktura GPIOx_CRL i dizajniran je za kontrolu načina rada starijih pinova porta (bitovi 8...15).

MODEy bitovi specificiranih registara određuju smjer izlaza i ograničenje brzine prebacivanja u izlaznom modu:

  • MODEy = 00: Način unosa (stanje nakon resetovanja);
  • MODEy = 01: Režim izlaza maksimalna brzina– 10 MHz;
  • MODEy = 10: Režim izlaza, maksimalna brzina – 2 MHz;
  • MODEy = 11: Režim izlaza, maksimalna brzina – 50 MHz.

CNF bitovi određuju konfiguraciju izlaznih stupnjeva odgovarajućih pinova:

u načinu prijave:

  • CNFy = 00: Analogni ulaz;
  • CNFy = 01: Ulaz u trećem stanju (stanje nakon resetovanja);
  • CNFy = 10: Ulaz sa pull-up otpornikom (ako je PxODR=1) ili pull-down (ako je PxODR=0);
  • CNFy = 11: Rezervirano.

u izlaznom modu:

  • CNFy = 00: Push-pull izlaz opće namjene;
  • CNFy = 01: Izlaz otvorenog odvoda opće namjene;
  • CNFy = 10: Push-pull izlaz sa alternativnom funkcijom;
  • CNFy = 11: Otvoreni izlaz za odvod sa alternativnom funkcijom.

Kako bi se povećala otpornost na buku, svi ulazni baferi sadrže Schmidt trigere. Dio zaključaka STM32, opremljen zaštitnim diodama povezanim na zajedničku magistralu i sabirnicu napajanja, označeni su u podatkovnom listu kao FT (5V tolerantno) - kompatibilni sa naponom od 5 volti.

Zaštita bitova GPIO konfiguracije

Za zaštitu bitova u konfiguracijskim registrima od neovlaštenog upisivanja u STM32 obezbeđen je registar zaključavanja postavki GPIOx_LCKR
GPIOx_LCKR- registar za zaključavanje izlaznih postavki porta:

Da biste zaštitili postavke individualnog pina porta, mora se postaviti odgovarajući LCKy bit. Zatim izvršite sekvencijalno snimanje u kategoriji LCKK vrijednosti "1" - "0" - "1" i dvije operacije čitanja registra LCKR, koji će u slučaju uspješnog blokiranja dati za bit LCKK vrijednosti "0" i "1". Zaštita bitova za podešavanje će ostati na snazi ​​do sljedećeg ponovnog pokretanja mikrokontrolera.

Datoteka definicije periferije mikrokontroleri STM32 stm32f10x.h definira odvojene grupe registara ujedinjenih zajedničkom funkcionalnom svrhom (uključujući GPIO), kao strukture jezika C, a sami registri kao elementi ove strukture. Na primjer:

GPIOC->BSRR– GPIOC port set/reset registar BSRR.
Koristimo definicije iz datoteke stm32f10x.h da ilustrujemo kako se radi sa I/O registrima mikrokontrolera STM32F100RB instaliran u starter kit STM32VLDISCOVERY:

#include "stm32F10x.h" u32 tmp; int main (void) ( RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // Omogući taktiranje PORTC-a. GPIOC->CRH |= GPIO_CRH_MODE8; // Izlaz LED4 PC8 za izlaz. GPIOC->CRH &=~GPIO_CRH_CNF8; // Push-pul GPIOC->CRH |= GPIO_CRH_MODE9 // Izlaz LED3 PC9 &=~GPIO_CRH_CNF9. GPIOC->LCKR = GPIO_LCKR_LCK8|GPIO_LCKR_LCKK->LCKR = GPIO_LCKR_LCK8|GPIO_LCKR_LCK9|GPIO_LCKR_LCKK;tmp=GPIOC->LCKR;tmp=GPIOC->LCKR;

Pišite i čitajte GPIO

Ulazni portovi su namijenjeni za pisanje i čitanje GPIOx_IDR i slobodan dan GPIOx_ODR registre podataka.

Upisi u izlazni registar ODR port konfigurisan za izlaz, postavlja nivoe izlaza svih bitova porta u skladu sa snimljenom vrednošću. Ako je pin konfiguriran kao pull-up ulaz, stanje odgovarajućeg bita registra ODR aktivira povlačenje izlaza na sabirnicu napajanja (pull-up, ODR=1) ili opštu sabirnicu mikrokontrolera (pull-down, ODR=0).

Pročitaj registar IDR vraća vrijednost stanja pinova mikrokontrolera koji su konfigurirani kao ulazi:

// Ako je dugme pritisnuto (PA0=1), postavite bite porta C, u suprotnom resetujte. if (GPIOA->IDR & GPIO_IDR_IDR0) GPIOC->ODR=0xFFFF; ostalo GPIOC->ODR=0x0000;

Resetovanje i postavljanje bitova porta

Za atomsko resetovanje i postavljanje bitova GPIO u mikrokontrolerima STM32 registar je namijenjen GPIOx_BSRR. Tradicionalno za arhitekturu ARM metoda upravljanja bitovima registra koja ne zahtijeva upotrebu operacije tipa "čitaj-modifikuj-piši" omogućava vam postavljanje i resetovanje bitova porta jednostavnim upisivanjem jednog u postavljene bitove BS (BitSet) i reset BR (BitReset) registar BSRR. U ovom slučaju, upisivanje nula bitova u registar ne utiče na stanje odgovarajućih pinova.

GPIOx_BSRR– registar za resetiranje i postavljanje bitova porta:

GPIOC->BSRR=GPIO_BSRR_BS8|GPIO_BSRR_BR9; // Upali LED4 (PC8), isključi LED3. GPIOC->BSRR=GPIO_BSRR_BS9|GPIO_BSRR_BR8; // Upali LED3 (PC9), isključi LED4.

Alternativne funkcije GPIO i njihovo preraspoređivanje (premapiranje)
Gotovo svi vanjski krugovi posebne namjene STM32(uključujući vodove za povezivanje kvarcnih rezonatora, JTAG/SWD i tako dalje) može biti omogućeno na odgovarajućim pinovima mikrokontrolera, ili onemogućeno iz njih kako bi se omogućilo njihovo korištenje kao pinovi opće namjene. Odabir alternativne izlazne funkcije vrši se pomoću registara s prefiksom „AFIO”_.
Osim toga, registri AFIO _ omogućavaju vam da odaberete nekoliko opcija rasporeda posebne funkcije na pinovima mikrokontrolera. Ovo se posebno odnosi na izlaze komunikacionih sučelja, tajmera (registra AFIO_MAPR), eksterni prekidni pinovi (registri AFIO_EXTICR) itd.

Pozdravljam sve ljubitelje programiranja, mikrokontrolera i elektronike općenito na našoj web stranici! U ovom članku ću vam reći nešto o tome šta ćemo ovdje raditi, odnosno o kursu obuke o ARM mikrokontrolerima.

Dakle, prvo, hajde da shvatimo šta trebate znati i biti u mogućnosti da počnete učiti ARM. Ali, u principu, ništa superkomplicirano i očaravajuće 😉 Naravno, ljudi obično prelaze na ARM kontrolere nakon što su se već dovoljno poigrali sa PIC-ovima i AVR-ovima, odnosno većina njih su iskusni programeri. Ali pokušat ću što detaljnije i jasnije opisati sve što ćemo analizirati, kako bi oni koji su se odlučili prvi put okušati u programiranju mikrokontrolera mogli lakše razumjeti materijal. Usput, ako imate bilo kakvih pitanja, ili ako nešto jednostavno ne radi kako je predviđeno, napišite u komentarima, pokušat ću to shvatiti i pomoći.

A sada idemo na tehnička pitanja) Već sam nekoliko puta spomenuo ime " Obuka ARM“, ali, uglavnom, to nije sasvim tačno. Ne postoji takva stvar kao što je ARM mikrokontroler. Postoji kontroler sa ARM jezgrom(!), ali ovo, vidite, još uvijek nije ista stvar. Dakle, takve uređaje proizvodi niz kompanija, među kojima se ističu STMicroelectronics i NXP Semiconductors. U skladu s tim proizvode STM i LPC kontrolere. Odlučio sam se za STM32, samo su mi se više svidjeli =) Sa STM-om je vrlo zadivljujuće da kada jednom prođete bilo koji MK iz STM32F10x linije, nećete imati problema ni sa jednim drugim. Jedan red – jedan list sa podacima. Usput postoji velika količina kako skupe tako i ne tako skupe razvojne ploče sa STM32 kontrolerima, što je jako drago, iako ćemo u početku debugirati naše programe u simulatoru kako bismo procijenili mogućnosti kontrolera prije kupovine hardvera. Evo, za svaki slučaj, službena web stranica STMicroelectronics -.

Nekako smo glatko prešli na temu kompajlera, pa ću reći nekoliko riječi o tome. Bez razmišljanja, izabrao sam Keila, ne samo zbog moćnog ugrađenog simulatora. Možete pogledati UART tamo, i bilo koji registar, pa čak je dostupan i logički analizator. Jednom riječju, Keil je na mene ostavio uglavnom samo prijatne utiske, mada ima i nedostataka, naravno, ali ne katastrofalnih. Tako da možete bezbedno preuzeti Keil uvision4 sa off. site(). Istina, postoji jedno ALI - IDE se plaća, ali je dostupan demo mod sa ograničenjem koda od 32 kB, što nam je za sada više nego dovoljno. Kome ovo nije dovoljno, postoji ogroman broj crackova za Keila 😉 Sve se instalira bez problema - guramo dalje par puta i sve se savršeno instalira i radi bez dodatnih plesova s ​​tamburom.

Zapravo, to je sve što sam vam ovdje htio reći, vrijeme je da pređete s riječi na djela, ali to je u sljedećem članku. Naučit ćemo programirati STM32 mikrokontrolere od nule!

Objavljeno 08.09.2016

Mikrokontroleri STM32 postaju sve popularniji zbog svoje snage, prilično raznolikih perifernih uređaja i fleksibilnosti. Počet ćemo učiti koristeći proračunsku testnu ploču, čija cijena ne prelazi 2 dolara (od Kineza). I nama će trebati ST-Link programer, čija je cijena oko 2,5 dolara (od Kineza). Ovakvi iznosi troškova dostupni su i studentima i školarcima, pa je iz ovoga budžetska opcija Predlažem da počnemo.


Ovaj mikrokontroler nije najmoćniji među njima STM32, ali ne i najslabiji. Postoje razne ploče sa STM32, uključujući Discovery koja košta oko 20 dolara. Na takvim pločama je skoro sve isto kao i na našoj, plus programator. U našem slučaju, programator ćemo koristiti zasebno.

Mikrokontroler STM32F103C8. Karakteristike

  • ARM 32-bitna Cortex-M3 jezgra
  • Maksimalna frekvencija 72MHz
  • 64KB Flash memorija za programe
  • 20Kb SRAM memorije
  • Napajanje 2.0 … 3.3V
  • 2 x 12-bitni ADC (0 ... 3.6V)
  • DMA kontroler
  • 37 5V tolerantni ulazi/izlazi
  • 4 16-bitna tajmera
  • 2 watchdog tajmera
  • I2C – 2 autobusa
  • USART – 3 autobusa
  • SPI – 2 autobusa
  • USB 2.0 interfejs pune brzine
  • RTC – ugrađeni sat

Dostupno na STM32F103C8 ploči

  • Izlazni portovi A0-A12, B0-B1, B3-B15, C13-C15
  • Micro-USB preko kojeg možete napajati ploču. Ploča ima 3.3V stabilizator napona. Napajanje od 3,3 V ili 5 V može se napajati na odgovarajuće pinove na ploči.
  • Dugme Resetovati
  • Dva skakača BOOT0 I BOOT1. Koristićemo ga tokom flešovanja putem UART.
  • Dva kvarca 8 MHz i 32768 Hz. Mikrokontroler ima množitelj frekvencije, tako da sa kvarcom od 8 MHz možemo dostići maksimalnu frekvenciju kontrolera od 72 MHz.
  • Dvije LED diode. PWR– signalizira da je napajanje isporučeno. PC13– spojeno na izlaz C13.
  • Konektor za programator ST-Link.

Dakle, počnimo s pokušajem flešovanja mikrokontrolera. Ovo se može uraditi putem USART-a ili pomoću programatora ST-Link.

Možete preuzeti test fajl za firmver. Program treperi LED na ploči.

STM32 firmver koji koristi USB-Uart adapter za Windows

IN sistemska memorija STM32 Tu je Bootloader. Bootloader se snima u fazi proizvodnje i bilo koji mikrokontroler STM32 može se programirati preko interfejsa USART koristeći USART-USB adapter. Takvi se adapteri najčešće izrađuju na bazi popularnih mikro krugova FT232RL. Prije svega, povežite adapter sa računarom i instalirajte drajvere (ako je potrebno). Možete preuzeti upravljačke programe sa web stranice proizvođača FT232RL– ftdichip.com. Morate preuzeti drajvere VCP(virtuelni com port). Nakon instaliranja drajvera, virtuelni serijski port bi se trebao pojaviti na vašem računaru.


Povezivanje RX I TX izlazi na odgovarajuće pinove USART1 mikrokontroler. RX priključite adapter na TX mikrokontroler (A9). TX priključite adapter na RX mikrokontroler (A10). Pošto USART-USB ima izlaze od 3.3V, napajaćemo ploču sa njega.

Da biste stavili mikrokontroler u režim programiranja, potrebno je postaviti pinove BOOT0 I BOOT1 do željenog stanja i ponovo ga pokrenite dugmetom Resetovati ili isključite i uključite napajanje mikrokontrolera. Imamo džempere za ovo. Različite kombinacije ubacuju mikrokontroler različiti načini rada. Nas zanima samo jedan način rada. Da bi to uradio, mikrokontroler ima BOOT0 trebao bi postojati logičan i izlaz BOOT1– logička nula. Na tabli ovo je sljedeća pozicija skakača:

Nakon pritiska na dugme Resetovati ili isključivanjem i spajanjem napajanja, mikrokontroler mora ući u režim programiranja.

Firmware softver

Ako koristimo USB-UART adapter, naziv porta će biti otprilike ovako /dev/ttyUSB0

Dobijte informacije o čipu

rezultat:

Čitamo sa čipa u datoteku dump.bin

sudo stm32flash -r dump.bin /dev/ttyUSB0

Pišite na čip

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

rezultat:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Korištenje parsera: Raw BINARY Interface serial_posix: 57600 8E1 Verzija: 0x22 Opcija 1: 0x00 Opcija 2: 0x00 ID uređaja: 0x0410 rezerva: 0x0410 rezerva od 0410 M. bootloader) - Flash: 128KiB (veličina sektora: 4x1024) - Opcija RAM: 16b - Sistemska RAM: 2KiB Zapisivanje u memoriju Brisanje memorije Upisana i potvrđena adresa 0x08012900 (100,00%) Urađeno. Pokretanje izvršenja na adresi 0x08000000... završeno.

STM32 firmver koristeći ST-Link programator za Windows

Kada koristite programator ST-Link zaključci BOOT0 I BOOT1 se ne koriste i moraju biti u standardnom položaju za normalan rad kontrolera.

(knjiga na ruskom)

STM32 oznaka

Porodica uređajaVrsta proizvodaPodfamilija uređajaBroj pinovaVeličina fleš memorijePaketRaspon temperature
STM32 =
32-bitni mikrokontroler baziran na ARM-u
F = Opće namjene
L = ultra male snage
TS=TouchScreen
W = bežični sistem na čipu
60 = multitouch otporan
103 = linija performansi
F = 20 pinova
G = 28 pinova
K = 32 igle
T = 36 pinova
H = 40 pinova
C = 48/49 pinova
R = 64 pinova
O = 90 pinova
V = 100 pinova
Z = 144 pinova
I = 176 pinova
B = 208 pinova
N = 216 pinova
4 = 16 kbajta fleš memorije
6 = 32 kbajta fleš memorije
8 = 64 kbajta fleš memorije
B = 128 kbajta fleš memorije
Z = 192 kbajta fleš memorije
C = 256 kbajta fleš memorije
D = 384 kbajta fleš memorije
E = 512 kbajta fleš memorije
F = 768 kbajta fleš memorije
G = 1024 kbajta fleš memorije
I = 2048 kbajta fleš memorije
H = UFBGA
N=TFBGA
P = TSSOP
T = LQFP
U = V/UFQFPN
Y = WLCSP
6 = Industrijski temperaturni opseg, –40…+85 °C.
7 = Industrijski temperaturni opseg, -40…+ 105 °C.
STM32F103 C8 T6

Kako ukloniti zaštitu od pisanja/čitanja?

Ako ste dobili ploču sa STM32F103, ali je programer ne vidi, to znači da su Kinezi zaštitili Flash memoriju mikrokontrolera. Pitanje "zašto?" zanemarimo to. Da bismo uklonili blokadu, spojit ćemo UART adapter i programirati kroz njega. Postavljamo skakače za programiranje i krećemo:

Ovo ću učiniti iz Ubuntua koristeći uslužni program stm32flash.

1. Provjerite da li je mikrokontroler vidljiv:

Sudo stm32flash /dev/ttyUSB0

Trebalo bi da dobijete nešto ovako:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Interfejs serial_posix: 57600 8E1 Verzija: 0x22 Opcija 1: 0x00 Opcija 2: 0x00 ID uređaja: 0x0410 (Srednja gustoća) - Fleš rezerva:20KbRAM 128KiB (veličina sektora: 4x1024) - Opcija RAM: 16b - Sistemska RAM: 2KiB

2. Uklonite zaštitu od čitanja i zatim zaštitu od pisanja:

Sudo stm32flash -k /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interfejs serial_posix: 57600 8E1 Verzija: 0x22 Opcija 1: 0x00 Opcija 2: 0x00M 0x00M Device iB ( 512b rezervisano bootloaderom) - Flash: 128KiB (veličina sektora: 4x1024) - Opcioni RAM: 16b - Sistemska RAM memorija: 2KiB Read-Unprotecting flash Urađeno. sudo stm32flash -u /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interfejs serial_posix: 57600 8E1 Verzija: 0x22 Opcija 1: 0x00 Opcija 2: ID: 0x00M Device: 0x00 0M Device iB ( 512b rezervisano bootloaderom) - Flash: 128KiB (veličina sektora: 4x1024) - Opcioni RAM: 16b - Sistemska RAM memorija: 2KiB Bljesak bez zaštite od pisanja Gotovo.

Sada možete normalno raditi sa mikrokontrolerom.

Dijeli