Začátky s platformou STM32

Způsobů, jak pracovat s Nucleem je několik. Pro práci můžeme použít VS Code s nainstalovaným pluginem Platformio, Mbed Studio, nebo můžeme třeba využít online prostředí http://mbed.org

MBED

MBED je middleware pro mikrokontroléry s architekturou ARM Cortex-M, založená na principech objektového programování v C++. Pro vývoj je možné používat online editor nebo programovat offline.

Založení účtu a přidání platformy

  1. https://mbed.org ⇒ MBED OS developer site
  2. Sign up / Sign in
  3. Compiler
  4. Add to your Mbed Compiler
  5. Vrátit se zpět na stránku s přidáním platformy a vybrat NUCLEO-F401RE, select platform

Založení a zkompilování projektu

  1. Založit nový projekt (New)
  2. Vybrat “Blinky LED test for the ST Nucleo boards”
  3. Definovat Digitální výstup pro zelenou ledku na semaforu jako DigitalOut myled(D13);
  4. Compile
  5. Nahrát do Nuclea
  6. Vyjmout mass storage v případě, že nedojde k restartu systému

Pro většinu aplikací, které mají běžet v nekonečné smyčce (nejen embedded systémy) je poté základní konstrukce programu následující:

int main(){
  // inicializace programu
  while(1){
    // nekonečná smyčka, hlavní část programu
  }
  return 0;
}

Platformio - vytvoření projektu

  1. Platformio Home
  2. New Project
  3. Vyber desku ST Nucleo F401RE
  4. Vyber Framework STM32Cube (nebo MBED)

K vytvoření programu je potřeba vytvořit alespoň jeden zdrojový soubor např. main.c pomocí následujícího návodu:

  1. Vlevo kliknout na Explorer
  2. Vyhledat adresář src
  3. Kliknout pravým tlačítkem myši a vybrat New File
  4. Pojmenovat soubor např. main.c
  5. Začít psát vlastní kód, který může vypadat např. následovně:

Example - Blikání s LED

LEDka je umístěna na desce Nuclea uprostřed a připojena k procesoru na pin PA5

#include "stm32f4xx.h"
 
#define setbit(reg, bit)    ((reg) |= (1U << (bit)))
#define clearbit(reg, bit)  ((reg) &= (~(1U << (bit))))
#define togglebit(reg, bit) ((reg) ^= (1U << (bit)))
 
int main(void) {
  volatile i = 0;
 
  setbit(RCC->AHB1ENR, 0);          // Enable clock to GPIOA
 
  setbit(GPIOA->MODER, 10);         // Set pin PA5 as output
  clearbit(GPIOA->MODER, 11);   
 
  clearbit(GPIOA->OTYPER, 5);       // Set Push-Pull output for pin PA5
 
  setbit(GPIOA->OSPEEDR, 10);       // Set GPIO speed of pin PA5 to medium
  clearbit(GPIOA->OSPEEDR, 11);
 
  clearbit(GPIOA->PUPDR, 10);       // Disable Pull-Up/Down for pin PA5
  clearbit(GPIOA->PUPDR, 11);
 
  clearbit(GPIOA->ODR, 5);          // Set Logic 0 for pint PA5
 
  while (1){
    togglebit(GPIOA->ODR, 5);       // Toggle the output bit for pin PA5
    for(i = 0; i < 500000; i++);    // Delay
  }
}

Přeložit a nahrát projekt

Program se zkompiluje při stisknutí na ikonku na spodním stavové liště. Vedle se poté nachází tlačítko k nahrání programu.

V případě problému s přístupem k USB zařízení na Linuxu (Ubuntu distribuce), je třeba povolit přístup pro non-sudo uživatele k USB zařízení (např. /dev/ttyUSB0) následujícím příkazem

sudo usermod -a -G dialout $USER

Ladění kódu

Spuštění ladění kódu se provede přes nabídku Debug z menu Debug nebo stisknutím klávesy F5

Kód se vždy zastaví na prvním řádku funkce main(), kde debugger vyčkává na další akci uživatele. V následující tabulce je poté výčet všech možných aktivit, co se mohou vykonat:

Funkce Hotkey Význam
Continue F5 Pokračuje v kódu dokud program nedojde k dalšímu breakpointu nebo kód není zastaven
Pause F6 Pozastaví vykonávání kódu
Step OverF10 Další řádek kódu v současné funkci (pokud to lze)
Step IntoF11 Začne se ladit kód v dané funkci (pokud to lze)
Restart Ctrl+Shift+F5Restart a spuštění programu od začátku
Stop Shift+F5 Zastavení ladění programu - Program začne od začátku, ale už se nebude nikde přerušovat ani ladit

Všechny tyto funkce jsou dostupné také ve vrchní stavové liště, když se ladí program.

Ladění programu má výhodu v tom, že je možné si prohlédnout stav registrů v jednotlivých částech programu a podle toho např. odhalit případnou chybu programu. Vlastní hodnota se zobrazí pouze v případě zastaveného programu (některá vývojová prostředí umožňují prohlíšet i online), který můžete vyvolat buď pauznutím běhu nebo v případě, když program dojde k breakpointu.

Všechny dostupné registry jsou v levém postranním panelu v sekci Peripherals nebo Registers. V sekci Peripherals je nastavení všech dostupných periferií, které se mohou s daným typem procesoru využít. Zejména je poté možné i za běhu tyto registry přenastavovat, ale zde je třeba dát pozor, aby se procesor nedostal do nestabilního stavu, případně si zapamatovat změnu a tu následně implementovat do programu. V sekci Registers se nachází jednotlivé registry Rxx, kde procesory STM32 jich mají celkem 32 a poté další registry pro běh procesoru.

Hodnoty registrů se dají upravovat následovně:

  1. Vyberte registr, který chcete upravit, pravým tlačítkem myši vyberte položku Update Value
  2. Napište Vaší požadovanou hotnotu, zpravidla v hexadecimálním tvaru. V případě, že v registru některé hodnoty byly, bude možná třeba některé zachovat. Úpravy hotnot registrů obecně není moc doporučování provádět, jelikož neodhalíte úplně přesný chování procesoru.
courses/b2b99ppc/howtos/write_and_debug_stm32.txt · Last modified: 2020/04/28 12:25 by nentvond