piątek, 28 stycznia 2022

STM32G0 - Bare Metal - SPI

Praca organiczna na rejestrach daje najwięcej satysfakcji. Nie ma innej drogi aby dobrze poznać nasz MCU . Skupiam się w swoim poznawaniu STM-ów na jednej rodzinie STM32G0 , opartej na podrasowanym rdzeniu Cortex M0+. Z tego punktu widzenia jest to wyjątkowy MCU. Ponieważ za pomocą SPI będę rozmawiał z MAX7219 zastosowanym w moim zegarku, dlatego postanowiłem pokazać jak uruchomić moduł SPI w STM32G0, korzystając wyłącznie z rejestrów (bez HAL). Są po drodze małe kruczki z którymi osoby początkujące w programowaniu na rejestrach w STM32, mogą sobie nie poradzić. Dlatego uważam, że ten wpis jest arcy-potrzebny.

czwartek, 13 stycznia 2022

STM32G0 - Bare Metal - portowanie FreeRTOS-a na przykładzie IDE SEGGER

FreeRTOS-a nie trzeba nikomu przedstawiać to jeden z najbardziej popularnych RTOS-ów na rynku. Jest wiele kursów z obsługi tego systemu , więc wiedzę można na jego temat zdobyć bez problemu. Umiejętność posługiwania się RTOS-ami w świecie MCU jest wielce pożądaną umiejętnością.  FreeRTOS jest zintegrowany z STM32 CUBE MX czy z MPLAB HARMONY w przypadku Microchipa. Na rynku istnieją też komercyjne RTOS-y takie jak np. embOS firmy SEGGER czy RTX Keil'a. W przypadku embOS używanie dla celów niekomercyjnych jest bezpłatne. Komercyjne RTOS-y posiadają m.in certyfikaty w zakresie bezpieczeństwa funkcjonalnego, które jest wymagane dla systemów i urządzeń np. w przemyśle, automotive. FreeRTOS nie posiada certyfikatów w zakresie bezpieczeństwa funkcjonalnego dlatego nie wszędzie można go zastosować . No ale to już jako ciekawostkę przyrodniczą podaję bo dla nas hobbystów nie ma to znaczenia żadnego. W artykule pokażę jakie czynności należy wykonać aby portować FreeRTOS-a dla MCU STM32G0 w środowisku SEGGER-a . Dla innych IDE portowanie będzie przebiegać analogicznie. 

wtorek, 11 stycznia 2022

STM32G0 Bare Metal - Maszyna stanów (FSM) i nieblokująca transmisja I2C.

O ile pisanie kodu na MCU jest zwykłym zajęciem o tyle pisanie kodu nieblokującego jest już z pogranicza sztuki :). Taką stawiam tezę. Większość z nas hobbystów standardowo pisze kody blokujące bo tak jest najprościej.  Jeśli chcemy jednak iść dalej i wzbić się ponad przeciętność :) ,stawiać kolejne kamienie milowe w swoim rozwoju w zakresie programowania MCU to prędzej czy później staniemy przed zagadnieniem kodu nieblokującego. Odróżnijmy jednak tutaj naukę pisania kodu nieblokującego od "wyklikania" takiego kodu za pomocą konfiguratorów kodu. Po co mamy sobie zawracać głowę nauką czegokolwiek jeśli kod do nieblokującej obsługi np. I2C możemy "wyklikać" w STM32 CUBE MX . Jeśli ktoś chce być znudzonym niewolnikiem biblioteki jednego producenta to poprzestanie na tym . Ja uważam , że takie biblioteki oczywiście są potrzebne ale zabijają w człowieku kreatywność. W przypadku kodu nieblokującego w zasadzie możemy śmiało mówić o projektowaniu takiego kodu a nie samym pisaniu. Często trzeba się posłużyć grafami np. w języku UML aby opisać zależności w kodzie . Jest to kawał sporej wiedzy po przyswojeniu której staniemy na wyższym "levelu" :) . Patrzmy w górę ku gwiazdom  a nie pod nogi :).