21 października 2018

Brudnopis do kursu programowania stm32

Wcześniej napisałem jak bardzo nie spodobało mi się TrueSTUDIO oraz używanie domyślnych narzędzi. Okazuje się jednak, że czasem trzeba polubić nawet rzeczy za którymi nie przepadamy. Większość osób jednak lubi system Windows oraz środowiska oparte o Eclipse - a wiersz poleceń systemu Linux oraz starego dobrego make-a jakoś mniej. Nie mam więc wyjścia tylko chociaż na chwilę poddać się ogólnej modzie i opisać jak programować stm32 za pomocą tych narzędzi.
Ten i najbliższe wpisy będą niejako brudnopisem, który może kiedyś zmieni się w kolejny kurs na stronie Forbot-a.
Na początek jak zwykle wybór narzędzi. System i środowisko już wspomniałem, teraz mikrokontroler oraz płytka. Próby z F4 pokazały, że programowanie na poziomie rejestrów jest świetne, ale znacznie lepiej pasuje do prostych peryferiów niż np. pamięci SDRAM, czy wyświetaczy. Stąd pomysł użycia układów z rodziny F0 - w nich chociaż peryferia są łatwiejsze do opanowania.
Wybrałem więc STM32F030 jako jeden z najprostszych i najtańszych układów. Będę używał płytki Nucleo dostępnej np. tutaj: https://kamami.pl/stm32-nucleo/212019-nucleo-f030r8-zestaw-startowy-z-mikrokontrolerem-z-rodziny-stm32-stm32f030.html
Na początek szybki start, czyli instalacja TrueSTUDIO ze strony: https://atollic.com/truestudio/ oraz programu STM32 Cube Programmer: https://www.st.com/en/development-tools/stm32cubeprog.html
Ten drugi program warto najpierw uruchomić oraz podłączyć płytkę Nucleo. W moim przypadku okazało się, że Nucleo ma starszą wersję firmware-u i nie będzie działało z TrueSTUDIO. Za pomocą STM32CubeProgrammer-a udało mi się wykryć przyczynę problemów oraz uaktualnić oprogramowanie.
Kolejny krok to utworzenie projektu w TrueStudio. Opiszę to krok po kroku na potrzeby przyszłego kursu - i trochę dla siebie, żeby nie zapomnieć. Nadal uważam, że make to genialne narzędzie, chociaż nie trzeba tylu zrzutów ekranu żeby zapamiętać jak utworzyć projekt.
Na początek z menu File opcja New oraz Project... Następnie można wybrać jeden z miliona typów projektów - "C Project" wydaje się dobrym wyborem:


Teraz należy podać nazwę projektu oraz doprecyzować jego typ - tym razem wybieram "Embedded C Project" i przechodzę dalej:


Wybierania ciąg dalszy: trzeba się zdecydować jaki ma być typ mikrokontrolera albo wręcz model płytki ewaluacyjnej. Wybieram mikrokontroler STM32F030R8:


Nie jest łatwo, teraz wybór "konfiguracji oprogramowania". Domyślnie zaproponowana biblioteka Newlib-nano brzmi dobrze, rezygnuję za to z "Use tiny printf/sprintf/fprintf" - na początek nie będę z nich korzystać, kiedyś pewnie do tematu wrócę. Opcje optymalizacji zostawiam domyślne:


Następne okno i następne pytania. Tym razem typ programatora - Nucleo ma ST-Link na pokładzie, więc taki wybieram:


Jeszcze pytanie to wybór konfiguracji. Domyślne Debug i Release brzmią rozsądnie, chociaż sam nie wiem po co mi dwie konfiguracje do tak prostego projektu, ale może kiedyś się przydadzą.



Niesamowite, udało się utworzyć projekt! Pytań było mnóstwo, ale warto było - coś powstało:


Domyślnie wygenerowany kod składa się praktycznie z samych komentarzy, chyba ST płaci programistom za liczbę okienek w kreatorach oraz liczbę linijek w plikach, niekoniecznie kodu - im więcej i bardziej bez sensu tym lepiej. Kasuję więc kod i wstawiam własny:

#include "stm32f0xx.h"

int main(void)
{
    RCC->AHBENR |= RCC_AHBENR_GPIOAEN;

    GPIOA->MODER |= GPIO_MODER_MODER5_0;
    GPIOA->MODER &= ~GPIO_MODER_MODER5_1;

    while (1)
    {
        GPIOA->ODR |= GPIO_ODR_5;

        for (volatile uint32_t dly = 0; dly < 100000; dly++)
            ;

        GPIOA->ODR &= ~GPIO_ODR_5;

        for (volatile uint32_t dly = 0; dly < 100000; dly++)
            ;
    }
}

Nie jest może ładniejszy, ale może chociaż działa. Program kompiluje się (o przepraszam buduje) poprawnie, czas wgrać go na płytkę. Po drodze kolejne okienko, tym razem ustawienie debuggera:


Naciskam OK, czekam niecierpliwie a tutaj znowu coś się pojawia:



No tak, na pewno bardzo chciałem mieć breakpoint-a w funkcji main, wybieram kontynuowanie i... mogę się cieszyć migającą diodą.


1 komentarz:

  1. Bardzo dobry artykuł! Ja dopiero zaczynam przygodę z programowaniem dlatego postanowiłam zacząć od kursu HTML dla początkujących - https://teoriabiznesu.pl/internet/kurs-html-dla-poczatkujacych-i-linki-nofollow/ Jak załapię o co chodzi to będę myśleć o kolejnych, trudniejszych kursach. Branża IT bardzo dynamicznie się rozwija, pozwala na spore zarobki. Poza tym tworzenie czegoś od zera daje mnóstwo satysfakcji.

    OdpowiedzUsuń