Stm32 trening fra bunnen av. Rask mestring av STM32 mikrokontrollere

De siste årene har 32-bits mikrokontrollere (MCU) basert på ARM-prosessorer raskt erobret elektronikkens verden. Dette gjennombruddet skyldes deres høye ytelse, avanserte arkitektur, lave energiforbruk, lave kostnader og avanserte programmeringsverktøy.

NOVELLE
Navnet ARM er et akronym for Advanced RISC Machines, hvor RISC (Reduced Instruction Set Computer) står for redusert instruksjonssett prosessorarkitektur. Det overveldende antallet populære mikrokontrollere, som PIC- og AVR-familiene, har også en RISC-arkitektur, som har økt ytelsen ved å forenkle dekodingen av instruksjoner og akselerere utførelse av dem. Fremveksten av avanserte og produktive 32-biters ARM-mikrokontrollere lar oss gå videre til å løse mer komplekse problemer som 8- og 16-bits MCU-er ikke lenger kan takle. ARM-mikroprosessorarkitekturen med en 32-bits kjerne og RISC-instruksjonssett er utviklet av det britiske selskapet ARM Ltd, som utelukkende utvikler kjerner, kompilatorer og feilsøkingsverktøy. Selskapet produserer ikke MK-er, men selger lisenser for deres produksjon. MK ARM er et av de raskest voksende segmentene i MK-markedet. Disse enhetene bruker energisparende teknologier, så de er mye brukt i innebygde systemer og dominerer markedet for mobile enheter der lavt strømforbruk er viktig. I tillegg brukes ARM mikrokontrollere aktivt i kommunikasjon, bærbare og innebygde enheter der høy ytelse er nødvendig. En funksjon ved ARM-arkitekturen er datakjernen til prosessoren, som ikke er utstyrt med noen tilleggselementer. Hver prosessorutvikler må uavhengig utstyre denne kjernen med de nødvendige blokkene for sine spesifikke oppgaver. Denne tilnærmingen har fungert bra for store brikkeprodusenter, selv om den i utgangspunktet var fokusert på klassiske prosessorløsninger. ARM-prosessorer har allerede gått gjennom flere utviklingsstadier og er godt kjent for ARM7, ARM9, ARM11 og Cortex-familiene. Sistnevnte er delt inn i underfamilier av klassiske CortexA-prosessorer, CortexR sanntidsprosessorer og CortexM mikroprosessorkjerner. Det var CortexM-kjernene som ble grunnlaget for utviklingen av en stor klasse med 32-bits MCUer. De skiller seg fra andre varianter av Cortex-arkitekturen først og fremst ved bruk av 16-bits Thumb2-instruksjonssettet. Dette settet kombinerte ytelsen og kompaktheten til "klassiske" ARM- og Thumb-instruksjoner og ble utviklet spesielt for å jobbe med C- og C++-språkene, noe som forbedrer kodekvaliteten betydelig. Den store fordelen med mikrokontrollere bygget på CortexM-kjernen er deres programvarekompatibilitet, som teoretisk sett tillater bruk av høynivåspråkprogramkode i modeller fra forskjellige produsenter. I tillegg til å indikere bruksområdet til kjernen, indikerer MK-utviklere ytelsen til CortexM-kjernen på en ti-punkts skala. I dag er de mest populære alternativene CortexM3 og CortexM4. MCUer med ARM-arkitektur er produsert av selskaper som Analog Devices, Atmel, Xilinx, Altera, Cirrus Logic, Intel, Marvell, NXP, STMicroelectronics, Samsung, LG, MediaTek, MStar, Qualcomm, SonyEricsson, Texas Instruments, nVidia, Freescale, Milander , HiSilicon og andre.
Takket være den optimaliserte arkitekturen er kostnaden for MCUer basert på CortexM-kjernen i noen tilfeller enda lavere enn for mange 8-bits enheter. "Yngre" modeller kan for øyeblikket kjøpes for 30 rubler. for kroppen, noe som skaper konkurranse for tidligere generasjoner MK. STM32 MICROCONTROLLER La oss vurdere den rimeligste og mest utbredte MCU-en i STM32F100-familien fra STMicroelectronics, som er en av verdens ledende produsenter av MCU-er. Selskapet annonserte nylig produksjonsstart av en 32-bit MK som drar nytte av industriell
STM32-kjerner i lavkostapplikasjoner. MCU-er i STM32F100-verdilinjefamilien er designet for enheter der ytelsen til 16-bits MCU-er ikke er nok, og den rike funksjonaliteten til "vanlige" 32-bits enheter er overflødig. STM32F100-linjen med MCUer er basert på en moderne ARM CortexM3-kjerne med periferiutstyr optimert for bruk i typiske applikasjoner der 16-bits MCUer ble brukt. Ytelsen til STM32F100 MCU ved 24 MHz er overlegen de fleste 16-bits MCUer. Denne linjen inkluderer enheter med forskjellige parametere:
● fra 16 til 128 kbyte med programflashminne;
● fra 4 til 8 kbyte RAM;
● opptil 80 GPIO-inn-/utgangsporter;
● opptil ni 16-bits timere med avanserte funksjoner;
● to vakthundtimere;
● 16-kanals høyhastighets 12-bits ADC;
● to 12-bits DAC-er med innebygde signalgeneratorer;
● opptil tre UART-grensesnitt som støtter IrDA-, LIN- og ISO7816-moduser;
● opptil to SPI-grensesnitt;
● opptil to I2C-grensesnitt som støtter SMBus- og PMBus-moduser;
● 7-kanals direkte minnetilgang (DMA);
● CEC-grensesnitt (Consumer Electronics Control) inkludert i HDMI-standarden;
● sanntidsklokke (RTC);
● NVIC nestet avbruddskontroller.

Funksjonsdiagrammet til STM32F100 er vist i figur 1.

Ris. 1. Arkitektur av MK-linjen STM32F100

En ekstra bekvemmelighet er pin-kompatibiliteten til enhetene, som om nødvendig gjør det mulig å bruke hvilken som helst MK i familien med større funksjonalitet og minne uten å omarbeide det trykte kretskortet. STM32F100-linjen av kontrollere er produsert i tre typer pakker LQFP48, LQFP64 og LQFP100, med henholdsvis 48, 64 og 100 pinner. Tildelingen av pinnene er presentert i figur 2, 3 og 4. Slike tilfeller kan installeres på trykte kretskort uten bruk av spesialutstyr, som er en vesentlig faktor i småskala produksjon.


Ris. 2. STM32 MCU i LQFP48-pakke Fig. 3. STM32 MCU i LQFP64-pakke


Ris. 4. STM32 MCU i LQFP100-pakke

STM32F100 er en rimelig og optimalisert enhet basert på CortexM3-kjernen, støttet av et avansert utviklingsmiljø for STM32-familien av mikrokontrollere, som inneholder
Gratis biblioteker for alle eksterne enheter, inkludert motorkontroll og berøringstastaturer.

TILKOBLINGSDIAGRAM STM32F100C4
La oss vurdere den praktiske bruken av MK ved å bruke eksemplet på den enkleste STM32F100C4-enheten, som likevel inneholder alle hovedblokkene i STM32F100-linjen. Det elektriske kretsskjemaet til STM32F100C4 er vist i figur 5.


Ris. 5. Tilkoblingsskjema for MK STM32F100C4

Kondensator C1 sørger for at MK tilbakestilles når strømmen slås på, og kondensatorer C2-C6 filtrerer forsyningsspenningen. Motstandene R1 og R2 begrenser signalstrømmen til MK-pinnene. Den interne oscillatoren brukes som klokkekilde, så det er ikke nødvendig å bruke en ekstern krystall.


Inngangene BOOT0 og BOOT1 lar deg velge metode for lasting av MK når du slår på strømmen i henhold til tabellen. BOOT0-inngangen er koblet til nullpotensialbussen gjennom motstand R2, som beskytter BOOT0-pinnen mot kortslutning når den brukes som utgangsport på PB2. Ved å bruke kontakt J1 og en jumper kan du endre potensialet ved BOOT0-inngangen, og dermed bestemme hvordan MK-en lastes - fra flash-minnet eller fra den innebygde bootloaderen. Hvis du trenger å laste MK fra RAM, kan en lignende kontakt med en jumper kobles til BOOT1-inngangen.
Programmering av MK utføres via UART1 seriell port eller gjennom spesielle programmerere - JTAG eller STLink debuggere. Sistnevnte er en del av den populære feilsøkingsenheten STM32VLDISCOVERY, vist i figur 6. På STM32VLDIS COVERY-kortet er 4-pinners kontakten til programmereren - STLink debugger - betegnet SWD. Artikkelforfatteren foreslår å programmere MK via UART1-serieporten, siden det er mye enklere, ikke krever spesialutstyr og ikke er dårligere i hastighet enn JTAG eller ST Link. Enhver personlig datamaskin (PC) som har en seriell COM-port eller en USB-port med en USBRS232-omformer kan brukes som en kontrollenhet som er i stand til å generere kommandoer og vise resultatene av MK-programmet, samt som en programmerer.

For å koble COM-porten til en PC med en MK, er enhver omformer av RS232-signaler til logiske signalnivåer fra 0 til 3,3 V, for eksempel ADM3232-mikrokretsen, egnet. TXD-overføringslinjen til datamaskinens serielle port, etter nivåomformeren, skal kobles til PA10-inngangen på mikrokontrolleren, og RXD-mottakerlinjen, gjennom en lignende omformer, til PA9-utgangen.

Hvis du trenger å bruke en ikke-flyktig MK-klokke, bør du koble til et CR2032-batteri med en spenning på 3 V og en kvartsresonator med en frekvens på 32768 Hz. For dette formålet er MK utstyrt med Vbat/GND og OSC32_IN/OSC32_OUT pinner. Vbat-pinnen må først kobles fra 3,3 V-strømbussen.

De resterende ledige terminalene til MK kan brukes etter behov. For å gjøre dette, bør de kobles til kontaktene som er plassert rundt omkretsen av det trykte kretskortet for MK, analogt med de populære Arduino-enhetene og STM32VLDISCOVERY feilsøkingskortet.


Ris. 6. Feilsøk enheten STM32VLDISCOVERY


Elektrisk kretsskjema STM32VLDISCOVERY.

Derfor, avhengig av formålet og metoden for å bruke MK, kan du koble de nødvendige elementene til den for å bruke andre funksjonelle blokker og porter, for eksempel ADC, DAC, SPI, I2C, etc. I fremtiden vil disse enhetene bli vurdert mer detaljert.

PROGRAMMERING
I dag tilbyr mange selskaper verktøy for å lage og feilsøke programmer for STM32-mikrokontrollere. Disse inkluderer Keil fra ARM Ltd, IAR Embedded Workbench for ARM, Atol lic TrueStudio, CooCox IDE, GCC og Eclipse IDE. Utvikleren kan velge programvaren i henhold til hans preferanser. Nedenfor vil vi beskrive Keil uVision 4-verktøysettet fra selskapet Keil, som støtter et stort antall typer mikrokontrollere, har et utviklet system med feilsøkingsverktøy og kan brukes gratis med begrensninger på størrelsen på den genererte koden på 32 kbyte ( som faktisk er maksimum for de aktuelle mikrokontrollerne).

Enkel og rask start med CooCox CoIDE.

Så la oss komme i gang. Gå til den offisielle CooCox-nettsiden og last ned den nyeste versjonen av CooCox CoIDE. For å laste ned må du registrere deg, registreringen er enkel og gratis. Installer deretter den nedlastede filen og kjør den.

CooCox CoIDE- et utviklingsmiljø basert på Eclipse, som i tillegg til STM32 støtter en haug med andre familier av mikrokontrollere: Freescale, Holtek, NXP, Nuvoton, TI, Atmel SAM, Energy Micro, etc. Med hver nye versjon av CoIDE, listen over mikrokontrollere oppdateres kontinuerlig. Etter vellykket installasjon av CoIDE, kjør:

Startvinduet for trinn 1 vises, der du må velge produsenten av mikrokontrolleren vår. Trykk ST og gå til trinn 2 (velge en mikrokontroller), der du må velge en spesifikk modell. Vi har STM32F100RBT6B, så klikk på den tilsvarende modellen:

Til høyre viser hjelpevinduet korte karakteristikker for hver brikke. Etter å ha valgt mikrokontrolleren vi trenger, fortsetter vi til det tredje trinnet, trinn 3 - for å velge de nødvendige bibliotekene for arbeid:

La oss lage et enkelt prosjekt for å blinke en LED, slik det er vanlig for å lære mikrokontrollere.

For å gjøre dette trenger vi GPIO-biblioteket, når det er aktivert, vil CoIDE be deg om å opprette et nytt prosjekt. Klikk Ja på dette forslaget, angi mappen der prosjektet vårt skal lagres og navnet. Samtidig vil CoIDE koble til prosjektet 3 andre nødvendige for at biblioteket skal fungere, og vil også lage all nødvendig prosjektstruktur:

En annen god ting med CoIDE er at den har muligheten til å laste eksempler direkte inn i utviklingsmiljøet. I kategorien Komponenter kan du se at det er eksempler for nesten alle biblioteker, klikk på GPIO (med 4 eksempler) og se dem:

Du kan legge til dine egne eksempler der. Som du kan se i skjermbildet ovenfor, inneholder eksemplene allerede kode for å blinke GPIO_Blink LED. Du kan klikke på legg til-knappen og den blir lagt til i prosjektet, men som en inkludert fil, så vi vil gjøre det annerledes og ganske enkelt kopiere hele eksempelkoden inn i main.c-filen. Det eneste er å erstatte void GPIO_Blink(void)-linjen med int main(void). Så, trykk på F7 (eller velg Prosjekt->Bygg fra menyen) for å kompilere prosjektet og... uten hell!

Miljøet trenger en GCC-kompilator, men vi har ikke en. Gå derfor til siden GNU Tools for ARM Embedded Processors, velg din OS-type til høyre og last ned den nyeste versjonen av verktøykjeden. Deretter kjører vi filen og installerer gcc toolchain. Deretter vil vi i CoIDE-innstillingene indikere den riktige banen til verktøykjeden:

Trykk F7 igjen (Prosjekt->Bygg) og se at kompileringen var vellykket:

Alt som gjenstår er å flashe mikrokontrolleren. For å gjøre dette kobler vi brettet til datamaskinen ved hjelp av USB. Deretter, i feilsøkingsinnstillingene, må du installere ST-Link; for å gjøre dette, velg Prosjekt->Konfigurasjon i menyen og åpne kategorien Debugger. Velg ST-Link fra rullegardinlisten og lukk vinduet:

La oss prøve å flashe MK. I menyen, velg Flash->Program Last ned (eller klikk på det tilsvarende ikonet på verktøylinjen) og se at MK har blitt flashet:

Vi ser en blinkende LED på tavlen, jeg tror det ikke gir noen mening å gi en video eller et bilde, fordi... alle så det.

Også forskjellige feilsøkingsmoduser fungerer i CoIDE; for å gjøre dette, trykk CTRL+F5 (eller i Debug->Debug-menyen):

Det er alt. Som du kan se, er det veldig enkelt å sette opp og jobbe med CoIDE. Jeg håper denne artikkelen vil oppmuntre deg til å studere veldig lovende og rimelige STM32-mikrokontrollere.

Innledende artikkel til undervisningsforløpet om programmering av STM32-mikrokontrollere.

Med denne artikkelen begynner jeg en serie leksjoner dedikert til programmering av STM32-mikrokontrollere.

Emnet er veldig interessant, og kan overgå "Arduino Lessons" i popularitet. I prinsippet er dette til en viss grad en videreføring eller utvidelse av "". I det minste skal jeg stadig referere til artikler fra denne delen og trekke en analogi mellom dem og STM32-leksjonene.

Jeg forfekter ikke at du slutter å programmere på Arduino og bare bytter til STM32. Men det er oppgaver som er umulige eller mye vanskeligere å utføre på Arduino. Og er det virkelig ille å kunne lage systemer og enheter på begge typer mikrokontrollere?

Programmeringsspråket er stort sett det samme. Dessuten er maskinvarekomponentene koblet til kontrolleren identiske: knapper, lysdioder, skjermer, moduler av kablet og trådløs kommunikasjonsteknologi, etc.

Mye informasjon er allerede på siden. For eksempel, hvorfor skal jeg snakke om klient-server-teknologi igjen hvis det er en artikkel om det i delen "Arduino Lessons".

STM32-kontrollere er betydelig overlegne i tekniske egenskaper enn Arduino-kort basert på 8-bits mikrokontrollere ATmega328, ATmega2560, etc. De har høyere ytelse, mer minne, og perifere enheter er mer forskjellige i funksjon, rekkevidde og mengde. STM32 lar deg implementere mye mer komplekse oppgaver enn Arduino-brett.

Til tross for det ovennevnte, tror jeg at programmering av STM32 ikke er vanskeligere enn Arduino. Det er i hvert fall slik jeg skal presentere stoffet. Selv om mengden informasjon vil være større.

Leksjonene er laget for både erfarne programmerere som lærer STM32 og folk som tar sine første skritt i programmering. De. Jeg skal gi streng informasjon og følge den med detaljerte forklaringer. For den andre kategorien lesere vil jeg gi lenker til lignende emner i "Arduino Lessons". Jeg vil ikke "tygge" det samme flere ganger.

Jeg vil presentere den optimale tilnærmingen til programmering av STM32 fra mitt ståsted. Noen kan være uenig med ham.

Så. Jeg satte meg et mål:

  • lære deg praktisk programmering av STM32 mikrokontrollere;
  • utvide kunnskapen din innen programmering i C++, selvfølgelig, hvem mangler det;
  • gi streng teknisk informasjon om STM32-kontrollere på russisk;
  • En del av leksjonene vil bli viet til maskinvaren koblet til mikrokontrolleren.

Generell informasjon om mikrokontrollere i STM32-familien.

Mulighetene til STM32-kontrollere er fantastiske! I hvert fall meg.

Prisen på brettet med STM32F103C8T6 mikrokontroller er sammenlignbar med prisen på Arduino-kort basert på ATmega328 og betydelig billigere enn brett som Arduino Mega2560.

Men det koster bare 175 rubler.

Men i henhold til tekniske egenskaper! Hva er det verdt å bare sammenligne bitdybden til de behandlede dataene. 32 mot 8!

Jeg har en følelse av at jeg sammenligner Arduino ikke med et lite billig brett, men med en dyr monster 32-bits kontroller. Døm selv.

Alternativer STM32F103C8T6 Arduino Nano
Litt dybde 32 bit 8 bit
Frekvens 72 MHz 16 MHz
FLASH volum 64 kByte 32 kByte
RAM-kapasitet 20 kByte 2 kByte
Antall pinner 37 22
Maskinvare multiplisere og dele Ja, 32 biter Kun multiplikasjon, 8 sifre
ADC 2 ADC-er, 12 biter, 10 innganger, 1 µs konverteringstid 10 biter, 8 innganger, 100 µs konverteringstid
Kontrollere for direkte minnetilgang 7 kanaler Nei
Tidtakere 7 3
UART 3 (høyere hastighet, flere moduser) 1
I2C 2 1
SPI 2 1
USB 1 Nei
KAN 1 Nei
Sanntidsklokke Det er Nei
Maskinvare CRC-kodeberegningsmodul Det er Nei

Til dette kan du uendelig legge til med prefikset "mye kraftigere, avansert, funksjonell": avbruddssystem, I/O-porter, kommunikasjonsgrensesnitt, etc.

Og dette er fortsatt langt fra den kraftigste versjonen av STM32. Jeg har et 210MHz STM32F407VET6-kort med en ADC som kan konvertere opptil 7,2 Msamples per sekund. Jeg skal bruke den til å lage dynamisk bakgrunnsbelysning for TV-en, dvs. behandle videosignalet.

Teknisk dokumentasjon.

Publisert 08.09.2016

Mikrokontrollere STM32 blir stadig mer populære på grunn av deres kraft, ganske forskjellige periferiutstyr og fleksibilitet. Vi vil begynne å studere ved å bruke et budsjetttestbrett, hvis kostnad ikke overstiger $2 (fra kineserne). Vi vil også trenge ST-Link programmerer, som koster rundt $2,5 (fra kineserne). Slike utgifter er rimelige for både studenter og skolebarn, så jeg foreslår å starte med dette budsjettalternativet.


Denne mikrokontrolleren er ikke den kraftigste blant STM32, men ikke den svakeste heller. Det er ulike brett med STM32, gjelder også Oppdagelse som koster rundt $20. På slike brett er nesten alt det samme som på brettet vårt, pluss en programmerer. I vårt tilfelle vil vi bruke programmereren separat.

Mikrokontroller STM32F103C8. Kjennetegn

  • ARM 32-bit Cortex-M3 kjerne
  • Maksimal frekvens 72MHz
  • 64Kb Flash-minne for programmer
  • 20Kb SRAM-minne
  • Strømforsyning 2,0 … 3,3V
  • 2 x 12-bits ADC (0 ... 3,6 V)
  • DMA-kontroller
  • 37 5V tolerante innganger/utganger
  • 4 16-bits timere
  • 2 vakthundtimer
  • I2C – 2 busser
  • USART – 3 busser
  • SPI – 2 busser
  • USB 2.0 fullhastighets grensesnitt
  • RTC – innebygd klokke

Tilgjengelig på STM32F103C8-kort

  • Utgangsporter A0-A12, B0-B1, B3-B15, C13-C15
  • Mikro-USB som du kan drive brettet gjennom. Brettet har en 3,3V spenningsstabilisator. 3,3V eller 5V strøm kan leveres til de tilsvarende pinnene på brettet.
  • Knapp Nullstille
  • To hoppere STØVEL0 Og STØVEL1. Vi vil bruke den under blinking via UART.
  • To kvarts 8 MHz og 32768 Hz. Mikrokontrolleren har en frekvensmultiplikator, så med en 8 MHz kvarts kan vi nå den maksimale kontrollerfrekvensen på 72 MHz.
  • To lysdioder. PWR– signaliserer at det kommer strøm. PC13– koblet til utgangen C13.
  • Kobling for programmerer ST-Link.

Så la oss starte med å prøve å flashe mikrokontrolleren. Dette kan gjøres via USART, eller ved hjelp av en programmerer ST-Link.

Du kan laste ned testfilen for fastvaren. Programmet blinker LED på tavlen.

STM32-fastvare ved hjelp av USB-Uart-adapter for Windows

I systemminnet STM32 Det er Bootloader. Bootloader registreres på produksjonsstadiet og enhver mikrokontroller STM32 kan programmeres via grensesnitt USART ved hjelp av en USART-USB-adapter. Slike adaptere er oftest laget på grunnlag av populære mikrokretser FT232RL. Først av alt, koble adapteren til datamaskinen og installer driverne (hvis nødvendig). Du kan laste ned drivere fra produsentens nettsted FT232RL– ftdichip.com. Du må laste ned drivere VCP(virtuell com-port). Etter at du har installert driverne, skal en virtuell seriell port vises på datamaskinen.


Kobler til RX Og TX utganger til de tilsvarende pinnene USART1 mikrokontroller. RX koble adapteren til TX mikrokontroller (A9). TX koble adapteren til RX mikrokontroller (A10). Siden USART-USB har 3,3V strømutganger, vil vi levere strøm til kortet fra det.

For å sette mikrokontrolleren i programmeringsmodus, må du stille inn pinnene STØVEL0 Og STØVEL1 til ønsket tilstand og start den på nytt med knappen Nullstille eller slå av og på strømmen til mikrokontrolleren. Til dette har vi hoppere. Ulike kombinasjoner tvinger mikrokontrolleren til forskjellige moduser. Vi er kun interessert i én modus. For å gjøre dette har mikrokontrolleren STØVEL0 det bør være en logisk en, og utgangen STØVEL1– logisk null. På brettet er dette følgende hopperposisjon:

Etter å ha trykket på knappen Nullstille eller koble fra og til strømmen, må mikrokontrolleren gå inn i programmeringsmodus.

Firmware programvare

Hvis vi bruker en USB-UART-adapter, vil portnavnet være noe sånt som dette /dev/ttyUSB0

Få brikkeinformasjon

Resultat:

Vi leser fra brikken inn i filen dump.bin

sudo stm32flash -r dump.bin /dev/ttyUSB0

Skriv til brikken

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

Resultat:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Bruke Parser: Raw BINARY Interface serial_posix: 57600 8E1 Versjon: 0x22 Alternativ 1: 0x00 Alternativ 2: 0x00 Enhets-ID: 0x0410 (Medium-Bid: 5 bootloader) - Flash: 128KiB (sektorstørrelse: 4x1024) - Alternativ RAM: 16b - System RAM: 2KiB Skriv til minne Sletter minne Skrevet og bekreftet adresse 0x08012900 (100,00%) Ferdig. Starter kjøring på adresse 0x08000000... ferdig.

STM32-fastvare med ST-Link-programmerer for Windows

Når du bruker en programmerer ST-Link konklusjoner STØVEL0 Og STØVEL1 brukes ikke og må være i standardposisjon for normal drift av kontrolleren.

(bok på russisk)

STM32-merking

EnhetsfamilieProdukttypeEnhetsunderfamilieAntall pinnerFlash-minnestørrelsePakkeTemperaturspenn
STM32 =
ARM-basert 32-bits mikrokontroller
F = Generell bruk
L = Ultra-lav-effekt
TS = berøringsskjerm
W = trådløst system-på-brikke
60 = multitouch resistiv
103 = ytelseslinje
F = 20 pinner
G = 28 pinner
K = 32 pinner
T = 36 pinner
H = 40 pinner
C = 48/49 pinner
R = 64 pinner
O=90 pinner
V = 100 pinner
Z = 144 pinner
I = 176 pinner
B = 208 pinner
N = 216 pinner
4 = 16 Kbyte med Flash-minne
6 = 32 Kbyte med Flash-minne
8 = 64 Kbyte med Flash-minne
B = 128 Kbyte med Flash-minne
Z = 192 Kbyte med Flash-minne
C = 256 Kbyte med Flash-minne
D = 384 Kbyte med Flash-minne
E = 512 Kbyte med Flash-minne
F = 768 Kbyte med Flash-minne
G = 1024 Kbyte med Flash-minne
I = 2048 Kbyte med Flash-minne
H = UFBGA
N=TFBGA
P = TSSOP
T = LQFP
U = V/UFQFPN
Y = WLCSP
6 = Industrielt temperaturområde, –40…+85 °C.
7 = Industrielt temperaturområde, -40…+ 105 °C.
STM32F103 C8 T6

Hvordan fjerne skrive/lesebeskyttelse?

Hvis du mottok et brett med STM32F103, men programmereren ikke ser det, betyr dette at kineserne har beskyttet Flash-minnet til mikrokontrolleren. Spørsmålet "hvorfor?" la oss ignorere det. For å fjerne blokkeringen kobler vi til en UART-adapter og programmerer gjennom den. Vi setter hopperne for programmering og går i gang:

Jeg vil gjøre dette fra Ubuntu ved å bruke stm32flash-verktøyet.

1. Sjekk om mikrokontrolleren er synlig:

Sudo stm32flash /dev/ttyUSB0

Du bør få noe sånt som dette:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Grensesnitt serial_posix: 57600 8E1 Versjon: 0x22 Alternativ 1: 0x00 Alternativ 2: 0x00 Enhets-ID: 0x0410 (Medium-density) - Flash RAM: 512KiB reservert: 512KiB. 128KiB (sektorstørrelse: 4x1024) - Alternativ RAM: 16b - System RAM: 2KiB

2. Fjern lesebeskyttelsen og deretter skrivebeskyttelsen:

Sudo stm32flash -k /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Grensesnitt serial_posix: 57600 8E1 Versjon: 0x22 Alternativ 1: 0x00 Alternativ 2: 0x00 Enhets-ID: 0x0i-densitet: 0x00 (Medium-ID: 0x0i) 512b reservert av bootloader) - Flash: 128KiB (sektorstørrelse: 4x1024) - Alternativ RAM: 16b - System RAM: 2KiB Read-UnProtecting flash Ferdig. sudo stm32flash -u /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Grensesnitt serial_posix: 57600 8E1 Versjon: 0x22 Alternativ 1: 0x00 Alternativ 2: 0x00 Enhets-ID: 0x00 (Medium-ID: 0x0i) (MediumBi-densitet: 0x0) 512b reservert av bootloader) - Flash: 128KiB (sektorstørrelse: 4x1024) - Alternativ RAM: 16b - System RAM: 2KiB Skriveavbeskyttende flash Ferdig.

Nå kan du jobbe normalt med mikrokontrolleren.

Kurset vil hjelpe deg å mestre ferdighetene til å programmere mikrokontrollere fra bunnen av. Et feilsøkingstavle tas som eksempel for arbeid. STM32F3Oppdagelse med installert mikrokontroller STM32F303VCT6.

Vi vil installere programvareverktøy for å jobbe med dette utviklingskortet, bli kjent med I/O-porter, tidtakere-tellere og andre perifere moduler og lære å bruke dem.

Leksjon 1: Introduksjon

Introduksjon til mikrokontrollerprogrammering. Valg av maskinvare. Første bekjentskap med feilsøkingsbrettet.

Leksjon 2: Installere IAR

Introduksjon til produsenten ST Microelectronics. Installasjon av IAR utviklingsmiljø.

Leksjon 3: Ytterligere verktøy

Installasjon av STM32Cube-konfiguratorprogrammet. Installasjon av minneprogrammet ST Visual Programmer.

Leksjon 4: Opprette et prosjekt

Opprette en prosjektkonfigurasjon i STM32Cube og generere et prosjekt for IAR Embedded Workbench.

Leksjon 5. FLASH-minne

Leksjon 6. I/O-porter

Konseptet med porter og inngangs-/utgangslinjer. Laster programmet inn i utviklingstavlen ved hjelp av IAR-utviklingsmiljøet. Slå på lysdiodene på brettet.

Leksjon 7. Lysdioder og knapp

Implementering av "running fire", samt bytte av lysdioder med knapp.

Leksjon 8. Lagre data

Lagre ikke-flyktige data i FLASH-minnet til en mikrokontroller ved å bruke eksemplet med å huske LED-en som kjørelyset slo seg på før strømmen ble slått av

Leksjon 9. Tidsmålere

Bruke en timer-teller perifer modul for å generere forsinkelse.

Leksjon 10. Avbryter

Bruk av TIM6 timer-teller overløpsavbrudd for å implementere forsinkelse.

Leksjon 11. Eksterne avbrudd

Bruk av ulike avbrudd og deres prioriteringer.

Leksjon 12. Klokking

Stille inn klokkefrekvensen til kjerne- og periferimodulene.

Leksjon 13. Pulsbreddemodulasjon

Konfigurasjon og bruk av pulsbreddemodulasjon på TIM1 timerkanaler med forskjellige frekvenser.

Leksjon 14. Watchdog Timer

Ved hjelp av en uavhengig og system-vakthund-timer. Ved hjelp av vindusregisteret.

Leksjon 15. Analog-til-digital-omformer

Bruker en analog-til-digital-omformer og en intern temperatursensor.

Leksjon 16. Hoved- og ekstra ADC-kanaler

Bruk av flere kanaler i en enkelt ADC-modul.

Leksjon 17. Direkte minnetilgang

Bruk av direkte minnetilgang for å oppnå analog-til-digital konverteringsresultater.

Leksjon 18. Diskretisering

Bruk av en timer for å synkronisere ADC-utløsere med resultater lagret via direkte minnetilgang.

Leksjon 19. Digital-til-analog-omformer

Bruke en digital-til-analog-omformer for å generere et trekantsignal, et støysignal eller en konstant analog verdi.

Leksjon 20. Egendefinert signal

Bruke en digital-til-analog-omformer for å generere en vilkårlig bølgeform.

Jeg ønsker alle elskere av programmering, mikrokontrollere og elektronikk generelt velkommen til nettstedet vårt! I denne artikkelen skal jeg fortelle deg litt om hva vi skal gjøre her, nemlig om kurset på ARM-mikrokontrollere.

Så la oss først finne ut hva du trenger å vite og være i stand til å gjøre for å begynne å lære ARM. Men i prinsippet er det ikke noe superkomplisert og fortryllende 😉 Selvfølgelig bytter folk vanligvis til ARM-kontrollere etter å ha spilt nok med PIC-er og AVR-er, det vil si at de fleste av dem er erfarne utviklere. Men jeg vil prøve å beskrive så detaljert og tydelig som mulig alt vi skal analysere, slik at de som bestemte seg for å prøve seg på programmering av mikrokontrollere for første gang, lett kan forstå materialet. Forresten, hvis du har spørsmål, eller hvis noe rett og slett ikke fungerer etter hensikten, skriv i kommentarfeltet, jeg skal prøve å finne ut av det og hjelpe.

La oss nå gå videre til tekniske problemer) Jeg har allerede nevnt navnet "ARM Training Course" flere ganger, men i det store og hele er dette ikke helt sant. Det er ikke noe slikt som en ARM-mikrokontroller. Det er en kontroller med en ARM-kjerne(!), men dette, ser du, er fortsatt ikke det samme. Så slike enheter produseres av en rekke selskaper, blant dem skiller STMicroelectronics og NXP Semiconductors seg ut. Følgelig produserer de STM- og LPC-kontrollere. Jeg valgte STM32, jeg likte dem bare bedre =) Det er veldig fengslende med STM at når du først har håndtert en MK fra STM32F10x-linjen, vil du ikke ha noen problemer med noen andre. Én linje – ett datablad. Forresten, det er et stort antall både dyre og ikke så dyre utviklingskort med STM32-kontrollere, noe som er veldig gledelig, selv om vi først vil feilsøke programmene våre i en simulator for å evaluere egenskapene til kontrolleren før vi kjøper maskinvare. Her, for sikkerhets skyld, er den offisielle nettsiden til STMicroelectronics -.

På en eller annen måte gikk vi jevnt over til emnet for kompilatoren, så jeg skal si noen ord om det. Uten å tenke to ganger valgte jeg Keil, ikke minst på grunn av den kraftige innebygde simulatoren. Du kan se på UART der, og på et hvilket som helst register, og til og med en logikkanalysator er tilgjengelig. I et ord, Keil etterlot meg stort sett bare hyggelige inntrykk, selv om det er noen ulemper, selvfølgelig, men ikke katastrofale. Så du kan trygt laste ned Keil uvision4 fra off. nettstedet(). Riktignok er det en MEN - IDE er betalt, men en demomodus er tilgjengelig med en kodegrense på 32 kB, som er mer enn nok for oss foreløpig. For dem er dette ikke nok, det er et enormt antall sprekker for Keil 😉 Alt er installert uten problemer - vi pirker videre et par ganger og alt installeres perfekt og fungerer uten ekstra danser med en tamburin.

Egentlig er det alt jeg ønsket å fortelle deg her, det er på tide å gå fra ord til handling, men det er i neste artikkel. Vi skal lære å programmere STM32 mikrokontrollere fra bunnen av!