Introduksjon TIL Programmering STM32 ARM Cortex-M 32-bit Mikrokontrollere

i denne grundige artikkelen lærer du hvordan du utvikler innebygd firmware FOR STM32 Cortex-M 32-bits mikrokontrollere ved hjelp av de ulike utviklingsverktøyene.

STM32 Mikrokontroller

77 Aksjer

STM32-serien er noen av DE mest populære mikrokontrollere som brukes i et bredt utvalg av produkter. De har også en utmerket støttebase fra flere mikrokontrollerutviklingsfora.denne familien av mikrokontrollere Fra STMicroelectronics er basert PÅ ARM Cortex-M 32-bits prosessorkjerne.

STM32 mikrokontrollere tilbyr et stort antall serielle og parallelle kommunikasjon enheter som kan kobles med alle typer elektroniske komponenter, inkludert sensorer, skjermer, kameraer, motorer, etc. ALLE STM32-varianter leveres med internt Flashminne og RAM.

utvalget av ytelse tilgjengelig MED STM32 er ganske ekspansivt. NOEN av de mest grunnleggende varianter inkluderer STM32F0 og STM32F1 sub-serien som starter med en klokkefrekvens på bare 24 MHz, og er tilgjengelig i pakker med så få som 16 pinner.PÅ den andre ytelses ekstreme opererer STM32H7 på opptil 400 MHz, og er tilgjengelig i pakker med så mange som 240 pinner.

de mer avanserte modellene er tilgjengelige Med Flyttallsenheter (Fpu) for applikasjoner med alvorlige numeriske behandlingskrav. Disse mer avanserte modellene slør linjen mellom en mikrokontroller og en mikroprosessor.

Endelig ER stm32l sub-serien designet spesielt for lavt strømforbruk bærbare applikasjoner som kjører fra et lite batteri.

Utviklingsverktøy

Utviklingsverktøy kreves for å utvikle koden, programmere mikrokontrolleren og teste/feilsøke koden. Utviklingsverktøyene inkluderer:

  • Kompilator
  • Debugger
  • In-Circuit Serial Programmerer (ICSP)
  • Programmering AV STM32

    Programmering AV STM32 via IN-Circuit-Serial-Programmerer (ICSP).

    det finnes flere programvareutviklingsverktøy tilgjengelig for kodeutvikling PÅ STM32 mikrokontrollere. Programvareverktøyene er tilgjengelige Som Integrerte Utviklingsmiljøer (IDE) som kombinerer alle nødvendige verktøy i et integrert miljø.To vanlige utviklingspakker inkluderer: Keil MDK ARM (uVison5 IDE) – MDK ARM IDE er et veldig stabilt utviklingsmiljø som kan lastes ned gratis. Det tillater utvikling av kode opp til en programstørrelse på 32 KB. For å utvikle større programmer må en lisensiert versjon kjøpes her.CoIDE-en gratis verktøykjede som er basert på en trimmet ned versjon av Eclipse IDE integrert sammen med en innebygd ARM versjon av free GCC kompilatoren.

Det finnes også flere Andre Ideer som er tilgjengelige for BRUK MED STM32 mikrokontrollere. Denne artikkelen fokuserer imidlertid på å utvikle og blinke et program ved hjelp av Den svært populære Keil MDK ARM uVision5 IDE.Bortsett fra programvareverktøyene, er DET nødvendig MED EN Seriell Programmerer (ICSP) I Kretsen for å programmere og teste koden på den faktiske mikrokontrolleren. ICSP er nødvendig for å grensesnitt mikrokontrolleren TIL PC-programvareverktøyene via EN USB-port.ARM Cortex – m mikrokontrollere støtter to programmeringsprotokoller: JTAG (navngitt Av electronics industry association Joint Test Action Group) og Serial Wire Debug (SWD).

DET er flere ICSP programmerere tilgjengelig som støtter disse protokollene, inkludert:

  • Keil U-Link 2
  • Segger J-Link
  • ST-Link

Utvikle den første søknaden

Det er alltid enklest å starte med en lett tilgjengelig grunnleggende kode rammeverk. Deretter legger du til koden som kreves for den spesifikke applikasjonen og modellen til microcontroller.Heldigvis Gir STMicroelectronics et veldig nyttig grafisk verktøy kalt STM32CubeMx som hjelper til med å skape et grunnleggende applikasjonsprosjekt for ENHVER STM32 mikrokontroller av ditt valg. Det kan også brukes til å konfigurere eksterne enheter på multipleksede pinnene til mikrokontrolleren.

stm32cubemx-verktøyet kan lastes ned herfra. STM32Cube leveres med et omfattende sett med drivere for alle typer eksterne enheter og støtte for En valgfri FreeRTOS (et gratis Sanntids Operativsystem) pre-integrert med koden.følgende avsnitt beskriver i detalj hvordan du lager en enkel uart-applikasjon FOR STM32F030 mikrokontroller som ekko hva som er skrevet på et terminalvindu.

  • Installer STM32CubeMX-programvaren.
  • Kjør programmet og velg Nytt Prosjekt. DET vil da åpne MCU-Velgervinduet som vist nedenfor.
  • Dobbeltklikk for å velge mikrokontrollermodellen som brukes. I dette tilfellet bruker VI STM32F030K6. Det tar deg deretter til pinout-siden for den valgte mikrokontrolleren.

skjermbilde på å sette opp nytt prosjekt I STM32CubeMX

STM32F030K6 ER EN ARM Cortex-M0 kjerne MED 32kb Flashminne OG 4KB RAM-minne. Eksempelkoden gjør DET MULIG FOR UART som bruker pa9 og PA10-pinnene for mottak og overføring av serielle data som vist nedenfor med de grønne pinnene.

skjermbilde som viser pinout for STM32F030K6 I STM32CubeMX

Konfigurer uart-innstillingene under Fanen Konfigurasjon og velg UART-innstillingene som vist nedenfor. Aktiver alternativet nvic global interrupt under FANEN Nvic-Innstillinger.

skjermbilde som viser hvordan du konfigurerer uart-innstillinger STM32CubeMX

neste, naviger Til Project–>Innstillinger for å legge til det nye prosjektnavnet og velge VERKTØYKJEDEN IDE som skal brukes. I dette eksemplet angir du prosjektnavnet Til ‘UARTEcho’ og velger Keil-MDK5 IDE for prosjektutviklingen.

til Slutt generer du prosjektkoden ved å klikke Prosjekt- > Generer Kode.

Bygg og blinkende koden

åpne nå den genererte MDK-ARM prosjektfilen UARTEcho \ MDK-ARM\UartEcho.uprojx.

dette programmet så langt initialiserer BARE uart perifer og stopper i en uendelig sløyfe.

Det er viktig å merke Seg At STM32Cube genererer / * BRUKERKODE START x * / OG / * BRUKERKODE END x * / kommentar blokker for å implementere brukerspesifikk kode. Brukerkoden må skrives innenfor disse kommentarblokkene. Når koden er re-generert med endrede konfigurasjoner STMCube verktøyet beholder brukerkoden i disse bruker kommentar blokker.

neste, definer en global variabel for å motta en byte fra UART i hoved.c kildefil:

/* USER CODE BEGIN PV *//* Private variables ———————————————————*/static uint8_t recv_data;/* USER CODE END PV */

etter all initialiseringskoden, aktiver driveren for å motta 1 byte. Folgende funksjon aktiverer rxne-avbruddsbiten.

/* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart1, &recv_data, 1);/* USER CODE END 2 */

legg nå til en tilbakeringingsfunksjon for å håndtere mottaksavbruddet og overføre mottatt byte.

/* USER CODE BEGIN 0 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){HAL_UART_Transmit(huart, huart->pRxBuffPtr, 1, 1000);}/* USER CODE END 0 */

Til Slutt må vi kompilere koden og flash (laste ned) den til mikrokontrolleren.

Når Keil MDK ARM IDE er installert, er drivere FOR ST-LINK V2, J-Link og Ulink2 tilgjengelige. ST-Link debugger vil bli valgt som standard. Gå Til Prosjekter – >Alternativer For Mål og I Kategorien Debug velg ICSP programmerer brukt.

Flash koden ved å velge Flash->Last Ned.

MERK: sørg for å laste ned gratis PDF guide 15 Trinn For Å Utvikle Din Nye Elektronisk Maskinvare Produkt.

mikrokontrolleren vil nå ekko alle data mottatt over UART. Den kan kobles til EN PC ved HJELP AV EN USB-Til-Seriell Omformer. PÅ PCEN åpner COM-porten MED et terminalprogram ved hjelp av innstillingene til 115200-8-N-1. Nå vil alt som sendes fra terminalen ekko tilbake gjennom mikrokontrolleren.

Interrupt system

stm32 interrupt system er basert PÅ ARM Cortex m kjerne nvic perifer. STM32 Mcuer støtter flere maskerbare avbruddskanaler bortsett fra DE 16 avbruddskanaler I ARMKJERNEN.

FOR EKSEMPEL STØTTER STM32F0 MCU-serien 32 maskerbare avbrudd. Unntaket og avbruddsvektortabellen for Denne Familien Av Mcuer er gitt i tabellen nedenfor.

Interrupt Description Vector Address
Reserved 0x00000000
Reset Reset 0x00000004
NMI Non maskable interrupt. The RCC clock security system (CSS) is linked to the NMI vector 0x00000008
HardFault All class of faults 0x0000000C
SVCall System service call via SWI Instruction 0x0000002C
PendSV Pendable request for system service 0x00000038
SysTick System tick timer 0x0000003C
WWDG Window watchdog interrupt 0x00000040
PVD_VDDIO2 PVD and VDDIO2 supply comparator interrupt (combined with EXTI lines 16 and 31) 0x00000044
RTC RTC interrupts (combined EXTI lines 17, 19 and 20) 0x00000048
Flash Flash global interrupt 0x0000004C
RCC_CRS RCC and CRS global interrupts 0x00000050
EXTI0_1 EXTI line interrupts 0x00000054
EXTI2_3 EXTI line interrupts 0x00000058
EXTI4_15 EXTI line interrupts 0x0000005C
TSC Touch sensing interrupt 0x00000060
DMA_CH1 DMA channel 1 interrupt 0x00000064
DMA_CH2_3
DMA2_CH1_2
DMA channels 2 and 3 interrupts
DMA2 channel1 and 2 interrupts
0x00000068
DMA_CH4_5_6_7
DMA2_CH3_4_5
DMA channel 4,5,6 and 7 interrupts
DMA2 channel 3, 4, and 5 interrupts
0x0000006C
ADC_COMP ADC and COMP interrupts (Combined EXTI lines 21 and 22) 0x00000070
TIM1_BRK_UP_TRG_COM TIM1 break, update, trigger and commutation interrupts 0x00000074
TIM1_CC TIM1 capture compare interrupt 0x00000078
TIM2 TIM2 global interrupt 0x0000007C
TIM3 TIM3 global interrupt 0x00000080
TIM6_DAC TIM6 global interrupt and DAC underrun interrupt 0x00000084
TIM7 TIM7 global interrupt 0x00000088
TIM14 TIM14 global interrupt 0x0000008C
TIM15 TIM15 global interrupt 0x00000090
TIM16 TIM16 global interrupt 0x00000094
TIM17 TIM17 global interrupt 0x00000098
I2C1 I2C1 global interrupt (combined with EXTI line 23) 0x0000009C
I2C2 I2C2 global interrupt 0x000000A0
SPI1 SPI1 global interrupt 0x000000A4
SPI2 SPI2 global interrupt 0x000000A8
USART1 USART1 global interrupt (combined with EXTI line 25) 0x000000AC
UART2 USART2 global interrupt (combined with EXTI line 26) 0x000000B0
USART3_4_5_6_7_ 8 USART3, USART4, USART5, USART6, USART7, USART8 global interrupts (combined with EXTI line 28) 0x000000B4
CEC_CAN CEC and CAN global interrupts (combined with EXTI line 27 0x000000B8
USB USB global interrupt (combined with EXTI line 18) 0x000000BC

Extended Avbrudd og Hendelseskontroller (EXTI)

Stm32 Mcu-Ene har En Utvidet avbrudd og Hendelseskontroller som styrer de eksterne og interne asynkrone hendelsene/avbruddene og genererer hendelsesforespørselen TIL CPU/Avbruddskontrolleren og en vekkeforespørsel til Power Manager.

HVER AV EN ELLER flere EXTI-linjer er kartlagt til EN AV nvic-avbruddsvektorene.

for de eksterne avbruddslinjene, for å generere et avbrudd, bør avbruddslinjen konfigureres og aktiveres. Dette gjøres ved å programmere de to utløserregistrene med ønsket kantdeteksjon og ved å aktivere avbruddsforespørselen ved å skrive en ‘ 1 ‘ til den tilsvarende biten i avbruddsmaskeregisteret.

Ekstern Interrupt og GPIO mapping

HVER AV GPIO tilgjengelig på systemet kan konfigureres til å generere et avbrudd. MEN HVER AV EXTI-avbruddslinjene er kartlagt til flere gpio-pinner. FOR EKSEMPEL, PIO0 på alle tilgjengelige gpio-porter(A, B, C, etc.) vil bli kartlagt TIL EXTI0-linjen. PIO1 for alle porter vil bli kartlagt TIL EXTI1 linje og så videre.

NOEN AV EXTI-linjene er kombinert til en ENKELT nvic-vektor. FOR eksempel er EXTI4_15 kartlagt til en enkelt vektoradresse, så det vil være en enkelt avbruddsrutine for alle avbruddene FRA PIO4 TIL PIO15. Men kilden til avbruddet kan identifiseres ved å lese avbruddets ventende register.En viktig ting å vurdere når du designer et system ved HJELP AV STM32 Mcuer, er valget AV GPIO-pinnene for avbruddene. MCU kan ha mer enn 16 GPIOs tilgjengelig på enheten, men det er bare 16 eksterne avbruddslinjer tilgjengelig.FOR eksempel KAN EXTI_0 tilordnes TIL ENTEN PA0 eller PB0, men ikke begge deler. Så mens du velger pinnene for eksterne avbrudd de bør velges slik at de kan være unikt kartlagt til EN AV EXTI linjene.

følgende avsnitt beskriver hvordan du konfigurerer et avbrudd ved HJELP AV Stm32-Kuben.

skjermbilde konfigurere avbrudd STM32CubeMX

Velg Fanen Konfigurasjon og velg maskinvaremodulen som avbruddet må konfigureres for. Vinduet modulkonfigurasjon åpnes.

velg deretter fanen nvic-innstillinger og aktiver det globale avbruddet.

koden for å aktivere avbrudd for modulen vil bli generert i stm32f0xx_hal_msp.c I HAL_ <modul>_MSPInit (…) – funksjonen.

/* USART1 interrupt Init */HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART1_IRQn);

koden generert AV Stm32-Kuben vil Ha IRQ_Handler-implementeringen av alle avbruddene. Når avbruddet er aktivert koden vil bli inkludert i programmet.

vanligvis den genererte koden håndterer ALLEREDE IRQ og fjerner flagget som genererte avbrudd. Det kaller deretter et program tilbakeringing som tilsvarer hendelsen som genererte avbrudd for modulen.

STM32 HAL (Hardware Abstraction Layer) implementerer en tilbakeringing for hver av hendelsestypene i hver modul som en del av driveren. I dette eksemplet Rx Transfer Komplett tilbakeringing skal kopieres fra stm32f0xx_hal_UART.c-fil.

tilbakeringingsfunksjonene i driveren vil bli implementert med et __weak linker-attributt. Brukeren må implementere en kopi av den nødvendige tilbakeringingsfunksjonen ved å fjerne _ _ weak-attributtet i en av programfilene og deretter skrive den spesifikke håndteringen som kreves i den funksjonen.

/*** @brief Rx Transfer completed callback.* @param huart UART handle.* @retval None*/__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){/* Prevent unused argument(s) compilation warning */UNUSED(huart);

/* NOTE : This function should not be modified, when the callback is needed,the HAL_UART_RxCpltCallback can be implemented in the user file.*/}

Konklusjon

denne opplæringen er en introduksjon til å skrive et program som fungerer MED STM32-familien av mikrokontrollere. Det finnes flere andre metoder for å skrive et program, Men stm32cube diskutert er en enkel og intuitiv metode for å komme i gang.

dette verktøyet forenkler initialiseringen av mikrokontrollerens eksterne enheter. Det forbedrer også vedlikehold av koden, spesielt når det er maskinvarerevisjoner som krever remapping av signalene til forskjellige pinner.En annen fordel Ved å bruke stm32cube-verktøyet er at det genererer en rapport om brukerkonfigurasjonen for mikrokontrolleren. I denne rapporten detaljer det klokke treet, pin kartlegging og maskinvare modul konfigurasjon som alle er svært nyttig.

det finnes også flere andre kodebiblioteker og eksempelprogrammer tilgjengelig for ALLE stm32-varianter. Støtte for flere Ideer er også inkludert.

hvis prosjektet krever en sofistikert 32-biters mikrokontroller, anbefaler JEG STM32-serien. IKKE bare er de kraftige og populære, MEN STM32 mikrokontrollere er også ganske rimelige.

Trenger du mer trening PÅ programmering AV STM32 mikrokontrollere? I så fall, her er et mer grundig introduksjonskurs som du bør sjekke ut.Denne artikkelen ble skrevet Av Mohan Kashivasi Fra Vithamas Technologies. Han er også en av ekspertene som er tilgjengelige for å hjelpe deg med produktet ditt i Maskinvareakademiet.

Til Slutt, ikke glem å laste ned DIN GRATIS PDF: Ultimate Guide Til Å Utvikle Og Selge Ditt Nye Elektroniske Maskinvareprodukt. Du vil også motta mitt ukentlige nyhetsbrev der jeg deler premium-innhold som ikke er tilgjengelig på bloggen min.

Annet innhold du kan like:

  • Introduksjon Til STM32CubeIDE FOR STM32 Mikrokontrollere
  • Slik Velger Du Mikrokontrolleren for Ditt Nye Produkt
  • Ved Hjelp Av Arduino som En Innebygd Utviklingsplattform
  • Dataark Gjennomgang: Entry-Level STM32 Cortex-M0 Microcontroller (Blog + Video)
  • Introduction to the Ultra High-Performance STM32H7 32-bit Microcontroller
4.52votes
Article Rating

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.