Na płytce STM32 można wgrać system operacyjny Mbed OS.

Wymaga to osobnego kompilatora, ale na szczęście dostępne są narzędzia kompilacji przez stronę mbed.com
Tu jest poradnik autorów systemu Mbed.

W skrócie – przyda się płytka kompatybilna z Mbedos np. Nucleo F103RB. Po podłączeniu przez USB ma wgrany plik MBED.HTM

  1. Tworzymy konto na stronie mbed.com
  2. Do konta można przypisać płytkę
  3. Po zalogowaniu, aktywowaniu mailem konta otwieramy plik MBED.HTM na dysku USB (widocznym po podłączeniu płytki)
  4. Odpalamy IDE online – np. aby importować pierwszy projekt ze strony klikamy na poradniku żółty przycisk „Importing into MBED IDE”
  5. Teraz klikamy „Compile” i po wszystkim pobieramy skompilowany plik
  6. Otwieramy folder z tym plikiem, przeciągamy go na folder USB (ten z plikiem MBED.HTM)
  7. Teraz następuje flashowanie, plik za chwilę zniknie z folderu
  8. Po wszystkim można zrobić RESTART (ale często sam rusza program)

Hello world

Przykład ze strony producenta z komentarzem

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "mbed.h"


// Blinking rate - czas mrugania diody1
#define BLINKING_RATE     1500ms


int main()
{
    // Led1 pin- ustawiamy na output
    DigitalOut led(LED1);

    while (true) {
        led = !led; //zmiana statusu diody
        ThisThread::sleep_for(BLINKING_RATE); //zatrzymanie wątku jak w nowoczesnych bibliotekach Thread
    }
}

UART USB – konsola

W tym przykładzie jest kod wpisywania (znak po znaku) przez konsolę UART (USB w tym przypadku) z prędkością 9600 baud (wymagana w PuTTy).
https://os.mbed.com/docs/mbed-os/v6.0/apis/serial-uart-apis.html

Dyskoteka w systemie 2

Pobawimy się emulatorem systemu na stronie
1. Dodajemy 4 diody do projektu p5,p6,p7,p8 myszką po prawej
2. Wklejamy kod, bit oznacza zapalenie diody:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "mbed.h"

BusOut myleds(LED1, LED2, LED3, LED4, p5, p6 ,p7, p8);

int main() {
    myleds = 1;
    int diody;
    while(1) {
            diody = myleds;
            diody <<= 1; //i;
            myleds = diody;
           
            wait(0.25);
            if (myleds == 0b10000000)
            {
               myleds = 0b00000001;
               wait(0.25);
            }        
    }
}
C, STM32