Bevezetés a programozásba STM32 ARM Cortex-M 32 bites mikrokontrollerek

ebben a részletes cikkben megtudhatja, hogyan fejleszthet beágyazott firmware-t az STM32 Cortex-M 32 bites mikrokontrollerekhez a különféle fejlesztőeszközök segítségével.

STM32 mikrokontroller

77 részvények

az STM32 sorozat a legnépszerűbb mikrokontrollerek, amelyeket sokféle termékben használnak. Kiváló támogatási bázissal rendelkeznek több mikrokontroller fejlesztési fórumon is.

Az STMicroelectronics mikrokontrollereinek ez a családja az ARM Cortex-M 32 bites processzormagon alapul.

az STM32 mikrovezérlők számos soros és párhuzamos kommunikációs perifériát kínálnak, amelyek mindenféle elektronikus alkatrészhez csatlakoztathatók, beleértve az érzékelőket, kijelzőket, kamerákat, motorokat stb. Minden STM32 változat belső Flash memóriával és RAM-mal rendelkezik.

az STM32-vel elérhető teljesítménytartomány meglehetősen kiterjedt. A legalapvetőbb változatok közé tartozik az STM32F0 és az STM32F1 alsorozat, amelyek csak 24 MHz-es órajel frekvenciával kezdődnek, és mindössze 16 TŰS csomagokban kaphatók.

a másik végletnél az STM32H7 akár 400 MHz-en is működik, és akár 240 tűs csomagokban is kapható.

a fejlettebb modellek lebegőpontos egységekkel (FPU) érhetők el komoly numerikus feldolgozási követelményekkel rendelkező alkalmazásokhoz. Ezek a fejlettebb modellek elmosják a vonalat a mikrokontroller és a mikroprocesszor között.

végül az STM32L alsorozatot kifejezetten kis teljesítményű hordozható alkalmazásokhoz tervezték, amelyek kis akkumulátorról futnak.

Fejlesztőeszközök

Fejlesztőeszközök szükségesek a kód kifejlesztéséhez, a mikrokontroller programozásához és a kód teszteléséhez/hibakereséséhez. A fejlesztőeszközök a következők:

  • Fordító
  • Debugger
  • áramköri Soros programozó (ICSP)
STM32 programozása

az STM32 programozása az áramköri Soros Programozón (ICSP) keresztül.

számos szoftverfejlesztő eszköz áll rendelkezésre az STM32 mikrovezérlők kódfejlesztéséhez. A szoftvereszközök integrált fejlesztői környezetként (ide) érhetők el, amely az összes szükséges eszközt integrált környezetbe egyesíti.

két közös fejlesztési csomag tartalmazza:

  • Keil MDK ARM (uVison5 IDE) – az MDK ARM IDE egy nagyon stabil fejlesztési környezet, amely ingyenesen letölthető. Ez lehetővé teszi a kód fejlesztését 32 KB-os programméretig. Nagyobb programok fejlesztéséhez licencelt verziót kell vásárolni itt.
  • CoIDE-egy ingyenes szerszámlánc, amely az Eclipse IDE kivágott verzióján alapul, az ingyenes GCC fordító beágyazott ARM verziójával együtt.

számos más IDE is elérhető az STM32 mikrokontrollerekhez. Ez a cikk azonban EGY program fejlesztésére és villogására összpontosít a nagyon népszerű Keil MDK ARM uVision5 IDE használatával.

a szoftvereszközökön kívül egy áramköri Soros programozóra (ICSP) van szükség a kód programozásához és teszteléséhez a tényleges mikrokontrolleren. Az ICSP szükséges a mikrokontroller csatlakoztatásához a PC szoftvereszközökhöz USB porton keresztül.

az ARM Cortex-M mikrokontrollerek két programozási protokollt támogatnak: a JTAG-ot (az elektronikai ipar Szövetsége, A Joint Test Action Group) és a Serial Wire Debug-ot (SWD).

számos ICSP programozó áll rendelkezésre, amelyek támogatják ezeket a protokollokat, többek között:

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

az első alkalmazás fejlesztése

mindig a legegyszerűbb egy könnyen elérhető alapkód keretrendszerrel kezdeni. Ezután adja hozzá a mikrokontroller adott alkalmazásához és modelljéhez szükséges kódot.

szerencsére az STMicroelectronics egy nagyon hasznos grafikus eszközt kínál STM32CubeMx néven, amely segít létrehozni egy alapalkalmazási projektet bármely választott STM32 mikrovezérlőhöz. Azt is fel lehet használni, hogy konfigurálja a perifériák a multiplexelt csapok a mikrokontroller.

az STM32CubeMX eszköz innen tölthető le. Az STM32Cube kiterjedt illesztőprogram-készletet tartalmaz minden típusú perifériához, valamint támogatja az opcionális FreeRTOS-t (egy ingyenes valós idejű operációs rendszert), amely előre integrálva van a kóddal.

a következő szakasz részletesen leírja, hogyan lehet létrehozni egy egyszerű UART alkalmazást az STM32F030 mikrokontrollerhez, amely visszhangozza a terminálablakban beírt adatokat.

  • telepítse az STM32CubeMX szoftvert.
  • futtassa az alkalmazást, és válassza az új projekt lehetőséget. Ezután megnyitja az MCU választó ablakot az alábbiak szerint.
  • kattintson duplán a használt mikrokontroller modell kiválasztásához. Ebben az esetben az STM32F030K6 készüléket használjuk. Ezután eljut a kiválasztott mikrokontroller pinout oldalára.

képernyőkép beállítása új projekt STM32CubeMX

az STM32F030K6 egy ARM Cortex-M0 mag 32kB Flash memória és 4KB RAM memória. A példa kód lehetővé teszi az UART, amely a PA9 és PA10 csapok fogadására és továbbítására soros adatok az alábbiak szerint a zöld csapok.

képernyőkép, amely az STM32F030K6 pinout-ját mutatja az STM32CubeMX-ben

állítsa be az UART-beállításokat a konfiguráció lapon, majd válassza ki az UART-beállításokat az alábbiak szerint. Engedélyezze az nvic globális megszakítás opciót az NVIC Beállítások lapon.

képernyőkép mutatja, hogyan kell beállítani UART beállítások STM32CubeMX

Ezután keresse Project–> Beállítások annak érdekében, hogy az új projekt nevét, és válassza ki a szerszámlánc IDE használni. Ebben a példában állítsa a projekt nevét ‘UARTEcho’-ra, majd válassza ki a Keil-MDK5 IDE-t a projektfejlesztéshez.

végül hozza létre a projektkódot a Project -> kód generálása elemre kattintva.

A kód felépítése és villogása

most nyissa meg a létrehozott MDK-ARM projektfájlt UARTEcho\MDK-ARM\UartEcho.uprojx.

Ez a program eddig csak inicializálja az UART perifériát, és megáll egy végtelen hurokban.

fontos megjegyezni, hogy az STM32Cube generálja /* felhasználói kód BEGIN x */ és /* felhasználói kód END x */ megjegyzés blokkokat a felhasználó-specifikus kód megvalósításához. A felhasználói kódot ezekben a megjegyzésblokkokban kell megírni. Amikor a kódot módosított konfigurációkkal újra generálják, az STMCube eszköz megőrzi a felhasználói kódot ezeken a felhasználói megjegyzésblokkokon belül.

ezután adjon meg egy globális változót, hogy bájtot kapjon a fő UART-ból.c forrásfájl:

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

az összes inicializálási kód után engedélyezze az Illesztőprogram számára 1 bájt fogadását. A következő funkció lehetővé teszi az RXNE megszakítási bitet.

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

most adjon hozzá egy visszahívási funkciót a vételi megszakítás kezeléséhez és a fogadott bájt továbbításához.

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

végül le kell fordítanunk a kódot, és le kell töltenünk a mikrokontrollerre.

a Keil MDK ARM IDE telepítésekor az ST-LINK V2, J-Link és Ulink2 illesztőprogramok elérhetők. Alapértelmezés szerint az ST-Link hibakereső kerül kiválasztásra. Lépjen a Projects–>A Target beállításai elemre, majd a hibakeresés lapon válassza ki a használt ICSP programozót.

Flash a kód kiválasztásával Flash – >letöltés.

megjegyzés: győződjön meg róla, hogy töltse le az ingyenes PDF guide 15 lépés, hogy dolgozzon ki az új elektronikus hardver termék.

a mikrokontroller most visszhangozza az UART-on keresztül kapott adatokat. Meg lehet csatlakoztatni a számítógéphez egy USB-soros átalakító. A számítógépen nyissa meg a COM portot egy terminálalkalmazással az 115200-8-N-1 beállításokkal. Most minden, amit a terminálról küldenek, visszhangzik a mikrokontrolleren keresztül.

megszakítási rendszer

az STM32 megszakítási rendszer az ARM Cortex M mag nvic perifériáján alapul. Az STM32 MCU-k több maszkolható megszakítási csatornát támogatnak, kivéve az ARM mag 16 megszakítási csatornáját.

például az STM32F0 MCU sorozat 32 maszkolható megszakítást támogat. Az MCU-k ezen családjára vonatkozó kivétel és megszakítási vektor táblázat az alábbi táblázatban található.

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 Megszakítások és események vezérlője (EXTI)

az STM32 MCU-knak van egy kiterjesztett megszakítások és események vezérlője, amely kezeli a külső és belső aszinkron eseményeket/megszakításokat, és generálja az eseménykérelmet a CPU/Megszakításvezérlőnek, és egy ébresztési kérelmet az Energiamenedzsernek.

az egy vagy több EXTI vonal mindegyike az NVIC megszakítási Vektorok egyikéhez van hozzárendelve.

a külső megszakítási vonalak esetében a megszakítás létrehozásához a megszakítási Sort be kell állítani és engedélyezni kell. Ez úgy történik, hogy a két trigger regisztert a kívánt élérzékeléssel programozzuk, és engedélyezzük a megszakítási kérést úgy, hogy ‘1’ – et írunk a megszakítási maszk regiszter megfelelő bitjére.

külső megszakítás és GPIO leképezés

a rendszeren elérhető GPIO-k mindegyike beállítható megszakítás létrehozására. De az EXTI megszakítási vonalak mindegyike több GPIO csapra van leképezve. Például PIO0 az összes rendelkezésre álló GPIO porton (A,B,C stb.) az EXTI0 vonalra lesz leképezve. A PIO1 az összes porthoz az EXTI1 vonalhoz lesz hozzárendelve stb.

az EXTI vonalak egy része egyetlen NVIC vektorral van kombinálva. Például az EXTI4_15 egyetlen vektorcímre van leképezve, így egyetlen megszakítási rutin lesz a PIO4-től PIO15-ig tartó összes megszakításhoz. De a megszakítás forrása a megszakítás függőben lévő regiszter elolvasásával azonosítható.

az STM32 MCU-kat használó rendszer tervezése során figyelembe kell venni a GPIO csapok kiválasztását a megszakításokhoz. Lehet, hogy az MCU több mint 16 GPIO-val rendelkezik az eszközön, de csak 16 Külső megszakítási vonal áll rendelkezésre.

például az EXTI_0 leképezhető PA0-ra vagy PB0-ra, de nem mindkettő. Tehát a külső megszakítások csapjainak kiválasztásakor azokat úgy kell megválasztani, hogy azok egyedileg leképezhetők legyenek az egyik EXTI vonalhoz.

a következő szakasz leírja, hogyan kell konfigurálni egy megszakítást az STM32 kocka segítségével.

képernyőkép a megszakítás stm32cubemx beállítása

válassza ki a Konfiguráció fület, majd válassza ki azt a hardver modult, amelyhez a megszakítást konfigurálni kell. Megnyílik a modul konfigurációs ablak.

Ezután válassza az NVIC beállítások lapot, és engedélyezze a globális megszakítást.

a modul megszakításának engedélyezésére szolgáló kódot az stm32f0xx_hal_msp generálja.c a HAL_<modul>_MSPInit(…) függvényben.

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

az STM32 kocka által generált kód az összes megszakítás IRQ_Handler implementációjával rendelkezik. Ha a megszakítás engedélyezve van, a kód bekerül az alkalmazásba.

általában a generált kód már kezeli az IRQ-t, és törli a megszakítást létrehozó jelzőt. Ezután felhívja az alkalmazás visszahívását, amely megfelel annak az eseménynek, amely a modul megszakítását generálta.

az STM32 HAL (Hardware Abstraction Layer) az illesztőprogram részeként visszahívást hajt végre az egyes modulokon belüli eseménytípusokhoz. Ebben a példában az RX Transfer Complete visszahívást át kell másolni az stm32f0xx_hal_UART-ból.c fájl.

az illesztőprogramon belüli visszahívási funkciók __gyenge linker attribútummal kerülnek végrehajtásra. A felhasználónak végre kell hajtania a szükséges visszahívási funkció másolatát azáltal, hogy eltávolítja a __gyenge attribútumot az egyik alkalmazásfájlban, majd megírja az adott funkción belül szükséges speciális kezelést.

/*** @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.*/}

következtetés

Ez az oktatóanyag bemutatja az STM32 mikrokontroller családdal működő alkalmazás írását. Számos más módszer létezik egy alkalmazás írására, de a tárgyalt STM32Cube egyszerű és intuitív módszer az induláshoz.

Ez az eszköz leegyszerűsíti a mikrokontroller perifériák inicializálását. Javítja a kód karbantarthatóságát is, különösen akkor, ha vannak olyan hardveres módosítások, amelyek megkövetelik a jelek különböző csapokra történő újratervezését.

az STM32Cube eszköz használatának további előnye, hogy jelentést készít a mikrokontroller felhasználói konfigurációjáról. Ebben a jelentésben részletezi az órafát, a pin-leképezést és a hardvermodul konfigurációját, amelyek mind nagyon hasznosak.

számos más kódkönyvtár és példaprogram is rendelkezésre áll az STM32 összes változatához. Több ide támogatása is szerepel.

Ha a projekt egy kifinomult 32 bites mikrokontrollert igényel, akkor nagyon ajánlom az STM32 sorozatot. Nem csak nagy teljesítményűek és népszerűek, de az STM32 mikrovezérlők is meglehetősen megfizethetőek.

további képzésre van szüksége az STM32 mikrokontrollerek programozásához? Ha igen, itt van egy mélyebb bevezető tanfolyam, amelyet meg kell néznie.

ezt a cikket írta Mohan Kashivasi származó Vithamas Technologies. Ő is az egyik rendelkezésre álló szakértő, aki segít a termékében a Hardverakadémián belül.

végül ne felejtsd el letölteni az ingyenes PDF-fájlt: Végső útmutató az új elektronikus hardver termék fejlesztéséhez és értékesítéséhez. Ön is megkapja a heti hírlevelemet, ahol megosztom a prémium tartalmat, amely nem érhető el a blogomban.

egyéb tartalom, ami tetszhet:

  • Bevezetés Az STM32CubeIDE-ba az STM32 mikrokontrollerekhez
  • Hogyan válasszuk ki a mikrokontrollert az új termékhez
  • az Arduino használata beágyazott fejlesztési platformként
  • adatlap áttekintés: Entry-Level STM32 Cortex-M0 Microcontroller (Blog + Video)
  • Introduction to the Ultra High-Performance STM32H7 32-bit Microcontroller
4.52votes
Article Rating

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.