piątek, 16 grudnia 2022

STM32G0 - Bare Metal - Przekierowanie printf() na UART.

W artykule pokażę jak przekierować dane wysłane ze standardowej bibliotecznej funkcji printf() na UART. Może mieć to zastosowanie zarówno w przypadku debugowania programu jak i poza debugowaniem do wysyłania komunikatów. Warto tu wspomnieć, że STM32 ma takie usługi jak SWV (Serial Wire Viewer) czy semihosting  ale poza trybem "debugu" to nam nie zadziała a dodatkowo STM32 z rdzeniami M0 i M0+ są wykastrowane z SWV. Ja mam zamiar wykorzystać opisany w artykule mechanizm do współpracy z modułem sieciowym Ethernet W5500 . Będę obrazował komunikaty sieciowe na UART i odczytywał je w terminalu na PC



wtorek, 6 grudnia 2022

STM32 programowanie Bare Metal - przygotowanie środowiska STM32 CUBE IDE.

Zdaję sobie sprawę, że najprostsze rzeczy mogą sprawiać problem początkującym adeptom programowania Bare Metal czyli bez użycia bibliotek HAL. Dlatego ten artykuł poświęcę zagadnieniu konfiguracji środowiska STM32 CUBE IDE pod względem ergonomii i pokażę jak utworzyć szablon projektu do takiego stylu programowania. Nauka programowania z użyciem rejestrów umożliwia w efektywny sposób bliższe poznanie MCU i jego możliwości . Na pewno taka wiedza będzie miała większą wagę niż sama znajomość biblioteki HAL. Dlatego pomimo regresu w umiejętności posługiwania się rejestrami wśród osób zajmujących się hobbystycznie programowaniem MCU, gorąco zachęcam do podjęcia tego trudu.

środa, 30 listopada 2022

STM32G0 Bare Metal - konfiguracja DMA dla UART

 

W artykule pokażę jak skonfigurować  DMA dla potrzeb transmisji po UART w STM32G0. Konfiguracja taka różni się nieco w stosunku do  starszych konstrukcji typu STM32F0...F4. W STM32G071 na którym skupiam swoją uwagę znajdziemy jeden moduł DMA wyposażony w 7 kanałów. Dodatkowo znajdziemy tutaj wydzielony moduł do routingu DMA i synchronizacji - DMAMUX. Moduł ten jest domeną nowych konstrukcji STM32. Przyjrzyjmy się zatem jaką drogę trzeba przejść aby np. wysłać stringa po UART przy pomocy DMA. Konfiguracja bez użycia HAL-a tylko czysta praca organiczna na rejestrach. 

piątek, 4 listopada 2022

STM32G0 + UART + moduł radiowy LORA firmy CDEBYTE

Sezon rowerowy dobiega końca czas zatem zmienić dyscyplinę sportu na bardziej stacjonarną. W lukach startowych mam przygotowane dwa zestawy modułów LORA E220-400T22D firmy CDEBYTE sterowane po UART. Moim zadaniem będzie uruchomienie transmisji UART w STM32G0 i rozmowa z modułem radiowym oraz komunikacja pomiędzy dwoma modułami radiowymi . Dla urozmaicenia program testowy napiszę w STM32CUBE IDE , oczywiście bez użycia HAL-a. Pokażę krok po kroku jak  będę dochodził do wyznaczonego celu .

poniedziałek, 6 czerwca 2022

Czas na rower.

Słoneczko świeci czas rozruszać zastały przez zimę organizm. Coraz mniej mam ochotę siedzieć przed PC, kiedy za oknem ładna pogoda. Aby dodać sobie większej inspiracji do ruszania się, zakupiłem w bieżącym sezonie rower MTB XC. Dotychczas poruszałem się starym Authorem , który przez 15 lat ani razu mnie nie zawiódł. Ale czas na zmiany. Technologia poszła do przodu choć nie zawsze w lepszym kierunku . Mój nowy nabytek to Romet Mustang M7 model 2021 na oponach 29", kupiłem go w zasadzie oczami a nie rozumem :). Jest piękny , dostojny i z Polskiej fabryki.

czwartek, 26 maja 2022

Moduł radiowy LoRa z nowym chipem LLCC68 - projekt płytki testowej.

Szukając jakiegoś sensownego modułu RF dla mojego zegarka poczyniłem zakup kontrolny modułu E220-400T22D z nowym chipem LoRa LLCC68 na pokładzie. Aby go przetestować i nie bawić się w płytki stykowe , zaprojektowałem w tempie ekspresowym rozszerzenie w standardzie mikroBUS firmy Mikroelektronika. Rozszerzenie zaaplikuję do mojej nowej płytki z STM32G0, mam akurat zrobione dwie sztuki i na tej platformie je przetestuję. Moduł radiowy sterowany jest przez UART . Brak chyba możliwości ingerowania w parametry toru radiowego oprócz mocy , czyli taki moduł "idioto-odporny". Moduł radiowy mam zamiar wykorzystać w projekcie mojego zegarka do synchronizacji czasu i wymiany danych z chmurą.

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.