niedziela, 13 lutego 2022

STM32G0 - Bare Metal - MyClock - FreeRTOS

Moje podekscytowanie sięga zenitu mając na uwadze, że zbudowałem własnymi rękami zegarek o docelowo ponad przeciętnych możliwościach oraz to, że wykorzystam w nim RTOS-a i użyję do tego profesjonalnych narzędzi . Czuję taką moc jak młody Jedi :). Czas zacząć mój pierwszy praktyczny projekt pod kontrolą systemu czasu "rzeczywistego" FreeRTOS. Będę popełniał błędy, będę analizował i dociekał, będę się uczył na żywym organizmie .Nie wiem czy docelowo uda mi się całe przedsięwzięcie bo moja wiedza jest tylko hobbystyczna. Ale kto powiedział, że droga na szczyty jest łatwa. Czas wyjść z piaskownicy na szerokie wody. Moja przygoda z RTOS właśnie się zaczyna :). Projekt stawiam od zera w stylu Bare Metal , bez HAL, bez glutenu i bez polepszaczy od STM-a :). Artykuł będzie formą zapisków z uruchomienia projektu zegarka ,ale w trakcie pisania zobaczymy jak to wyjdzie docelowo.

środa, 2 lutego 2022

STM32G0 - Bare Metal - MAX7219

MAX7219 to kultowy układ , który "zrewolucjonizował" sterowanie wyświetlaczami 7-segmentowymi LED . Za jego pomocą możemy sterować do 8-śmiu wyświetlaczy 7-segmentowych, włącznie z kropką lub wyświetlaczami matrycowymi 64 LED (np.8x8). Układ ma wbudowany dekoder BCD co upraszcza sterowanie wyświetlaczami. Mamy też regulację jasności świecenia. Z układem rozmawiamy za pomocą SPI z maksymalną prędkością 10 MHz. Układ wspiera połączenia kaskadowe czyli możemy łączyć wiele układów w szeregu. Cena oryginalnego układu na poziomie  60 zł / szt może trochę szokować. Z odsieczą przybywają nam tutaj potomkowie dzielnego generała Yue Fei., dzięki którym nabędziemy układy za "grosze". Układ wykorzystałem w swoim zegarku do sterowania łącznie 10-segmentami. Działa to rewelacyjnie. Dużą zaletą układu jest prostota w sterowaniu i oprogramowaniu. W artykule pokażę jak sterować układem za pomocą STM32G0 na przykładzie mojego budowanego zegarka.

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 :).

sobota, 18 grudnia 2021

STM32G0 - Bare Metal i zabawy z zegarkiem Microchipa MCP79410


W procesie projektowania i budowania mojego super zegarka , który będzie poligonem doświadczalnym w zakresie programowania , chodzą mi po głowie różne pomysły. Jednym z takich pomysłów jest zastosowanie dwóch MCU z dwóch konkurencyjnych firm tj. STM i Microchip. Ponieważ docelowo mój zegarek będzie miał dwie płytki : front i tył, dlatego jedną płytkę obsadzę STM32G0 a drugą PIC32CM lub ATSAML.  Tym samym podnoszę sobie poprzeczkę i nie pójdę na łatwiznę w postaci MCU 8 bit Microchipa. Płytka frontowa zegarka z STM32G0 jest już na ukończeniu. Zabieram się za uruchomienie zegarka MCP79410 przy pomocy MCU STM32G071. Programuję w stylu Bare Metal czyli za pomocą rejestrów bez użycia HAL .

środa, 6 października 2021

Zegar LED czyli od lamera do Super Bohatera :)

Poczyniłem kilka lat temu projekt zegarka LED. Mózgiem zegarka był AVR, wtedy jeszcze nawet nie słyszałem o PIC-ach :). Była to moja pierwsza "poważna" konstrukcja oparta o mikrokontroler, która po dzień dzisiejszy napawa mnie satysfakcją i dumą. Wykonałem kilka takich zegarków dla rodziny i chodzą bezawaryjnie od lat. Zegarek stał się przyjacielem domu. Inaczej spogląda się na twór własnej pracy a inaczej na gotowy produkt kupiony w sklepie. Postanowiłem stać się ponownie Super Bohaterem i wykonać udoskonalony produkt tak, aby cieszył oko domowników przez kolejne lata. Tym razem zegarek będzie większy, inteligentniejszy i ładniejszy :). Czyli zrobię sobie zegarek , który w chwilach niepowodzeń pogada ze mną , wysłucha , udzieli rad i porad w tym psychoterapeutycznych :). Czyli zegarek psychoterapeuta. No okay ale taki to dopiero zrobię w wersji nr 3. :).

wtorek, 18 maja 2021

Interfejsy jako jedna z technik tworzenia kodu w embedded - zajęcia praktyczne

Sztuką jest biegle opanować tworzenie modułów oprogramowania nadających się do wielokrotnego wykorzystania, które stanowią  budulec dla dużych i niezawodnych aplikacji. W przeciwieństwie do nowoczesnych języków obiektowych, język C nie ma zbyt wielu mechanizmów pozwalających łatwo tworzyć interfejsy programisty (API), a tym bardziej mechanizmów zachęcających do opracowywania takich interfejsów. Większość programistów C korzysta na co dzień z różnego rodzaju gotowych API i bibliotek je implementujących, ale względnie niewielu tworzy i udostępnia nowe API ogólnego przeznaczenia. 

sobota, 8 maja 2021

Maszyna stanów przyjaciel embedownika :)


Maszyna stanów skończonych to pojęcie abstrakcyjne ,  definiuje zachowanie systemów dynamicznych jako maszyny o  skończonej liczbie stanów i  skończonej liczbie przejść pomiędzy tymi stanami. Definicja ta wydaje się dość abstrakcyjna , ale lepszej chwilowo nie znalazłem :).  Maszyny stanów skończonych odgrywają bardzo ważną rolę w  programowaniu w szczególności w świecie mikrokontrolerów. Umożliwiają m.in panowanie nad rozbudowaną sekwencją zdarzeń w programie i zwiększają znacząco niezawodność kodu.  W wielu przypadkach maszyna stanów w połączeniu z przerwaniami może okazać się lepszym wyborem niż np. RTOS ,choć z drugiej strony nie w każdym przypadku maszyna stanów znajdzie zastosowanie. Bardzo powszechnym obecnie nurtem jest stosowanie maszyny stanów do nieblokującej obsługi interfejsów np.I2C, SPI, UART. W szczególności ten nurt możemy zaobserwować w bibliotekach Microchipa gdzie np. taki framework jak HARMONY "wypluwa" standardowo kod oparty o maszynę stanów. Ale i w MCC widzę , że maszyna stanów zaczyna być częstym gościem . Skoro producenci MCU opierają swoje biblioteki o maszynę stanów to znaczy, że coś w tym musi być  I dlatego warto temu zagadnieniu przyjrzeć się bliżej.

poniedziałek, 3 maja 2021

STM32G0 - EXTI , konfiguracja przerwania zewnętrznego.


Konfiguracja przerwania zewnętrznego w STM32G0 dla wybranego źródła może być nie lada wyzwaniem dla osoby , która po raz pierwszy zetknie się z tym zagadnieniem. STM pogmatwał tutaj trochę i przynajmniej na początku odczujemy dyskomfort konfigurując ten moduł. W artykule postaram się pokazać jak poprawnie skonfigurować wybrany pin do współpracy z przerwaniem zewnętrznym.

czwartek, 29 kwietnia 2021

STM32G0 - randka z MDK ARM


MDK Microcontroller Development Kit
firmy Keil to najwyżej oceniane w branży zintegrowane środowisko do programowania i debugowania MCU z architekturą ARM. Jak pisze producent, MDK jest najbardziej wszechstronnym rozwiązaniem programistycznym dla mikrokontrolerów opartych na architekturze ARM i zawiera wszystkie komponenty potrzebne do tworzenia, budowania i debugowania aplikacji wbudowanych. Jeśli na rynku pojawi się jakiś nowy MCU zbudowany w oparciu o architekturę ARM wydany przez dowolnego producenta to pierwszym środowiskiem w którym on się pojawi będzie MDK Keila. W zasadzie MDK jest wzorem środowiska do którego reszta może tylko się próbować równać. W artykule zerknę na środowisko MDK przez pryzmat STM32G0.

wtorek, 13 kwietnia 2021

STM32G0 - Hello World w Segger Embedded Studio

Jestem już w posiadaniu mojej płytki dla STM32G0. Jest fajna, jest czarna i oczy cieszy. Uśmiech na gębie od ucha do ucha. Na płytce dałem niebieskiego LED-a do wykorzystania przez użytkownika, czerń z niebieskim w półmroku powala :). Lubię cieszyć się z rzeczy prostych. Czas sprawdzić czy wszystkie komponenty czyli IDE i programator będą współpracować z moją płytką. Ostatnio kolega śmiał się ze mnie, że programuję MCU nie posiadając go fizycznie na płytce :). No tak jest najzabawniej :). A śmiech służy zdrowiu :). W artykule, napiszemy pierwszy program w ultra szybkim i lekkim środowisku SEGGER-a i za pomocą miluśkiego programatorka J-Link Edu Mini, spróbujemy wgrać wsad do STM32G071KBT6 , który znajduje się na mojej płytce. Życzę sobie powodzenia :).

sobota, 3 kwietnia 2021

STM32G0 - I2C , uruchomienie sterownika dotyku CAP1296 firmy Microchip .

Zadanie jakie sobie wytyczyłem tym wpisem to zapoznanie się z interfejsem I2C w STM32G0 . Ale aby zapoznanie nie było nudne, spróbuję uruchomić przy okazji sterownik dotyku Microchipa, CAP1296. W STM32G0 w wersji 32 pin, której używam mamy do dyspozycji dwa interfejsy I2C. Przy czym ten drugi czyli I2C2 jest trochę wykastrowany z funkcjonalności w stosunku do pierwszego czyli I2C1. Ale nie będzie to przedmiotem moich dociekań. Oba interfejsy oprócz standardowych prędkości 100 i 400 kHz mają możliwość pracy z prędkością 1 Mbit/s.

niedziela, 28 marca 2021

STM32G0 - ustawienie zegara.

W STM32G0 mamy do dyspozycji cztery podstawowe źródła taktowania. 

LSI RC - wewnętrzny zegar 32kHz

LSE OSC - zewnętrzny zegar 32.768 kHz

HSI16 RC - wewnętrzny zegar 16 MHz

HSE OSC - zewnętrzny zegar 4-48 MHz

Dla wersji z USB mamy dodatkowo dedykowany wewnętrzny zegar HSI48 RC .

czwartek, 25 marca 2021

STM32G0 - zapis do rejestrów, wybrane zagadnienia.


W MCU 8-bitowych wszystko było proste, rejestry były proste, zapisy do nich były proste , życie było proste. W rejestrach nie było praktycznie pól bitowych o rozmiarze większym niż jeden bit, zapis sprowadzał się do operowania na jednym bicie .Człowiekowi było mało , więc  stworzył 32-bitowe monstra. Rozmowa z nimi drastycznie się skomplikowała, wydłużyły się rejestry pojawiły się pola bitowe . Skoro rozmowa z MCU się skomplikowała to zaczęto wprowadzać dodatkową abstrakcje w postaci opasłych bibliotek typu HAL. Biblioteki tego typu uprościły komunikację użytkownika z rejestrami i migrację ale wprowadziły jednocześnie niepożądane zjawiska takie jak błędy związane z rozwojem biblioteki , dodatkowy narzut zasobów MCU jakie trzeba poświecić do obsługi biblioteki oraz wyraźne spowolnienie wykonywania zadań przez MCU w tym spowalnianie działania interfejsów komunikacyjnych . Dlatego w krytycznych czasowo aplikacjach tam gdzie nie można sobie pozwolić na luksus związany z wygodą stosowania biblioteki HAL, tam  pożądana jest umiejętność rozmowy z MCU w technice określanej jako "Bare Metal" czyli to co w MCU 8-btowych było chlebem powszednim.