W dziale mikrokontrolery ARM znajdziecie bezpłatny (do osobistego użytku edukacyjnego) poradnik STM32 przygotowany przez szczywronek. Materiał dostępny jest w temacie: [STM32][C] - Poradnik dla początkujących (bez bibliotek)
W wątku możecie dodać swoje uwagi i pytania, które mogą wpłynąć na treść kolejnych wersji poradnika.
techekspert: Do kogo kierowany jest poradnik, jakie podstawy powinien mieć opanowane czytelnik? Czy znajomość określonej rodziny mikrokontrolerów ułatwi korzystanie z poradnika?
szczywronek: Poradnik od początku pisany był z myślą o nowicjuszach, którzy zaczynają przygodę z mikrokontrolerami STM32. Czytelnik powinien mieć opanowany język C w stopniu... nazwijmy to „komunikatywnym”. Starałem się aby przykładowe programy w poradniku były jak najprostsze, ale od narzędzi takich jak np. wskaźniki czy struktury nie można całkiem uciec. Założyłem ponadto, że Czytelnik ma jakieś minimalne doświadczenie w programowaniu mikrokontrolerów. Odrobinę uprzywilejowani mogą się czuć Ci, którzy pracowali z popularnymi układami AVR (ATtiny, ATmega). AVRy są aktualnie najczęściej wybieraną rodziną wśród hobbystów i początkujących. Moja przygoda z mikrokontrolerami zaczęła się właśnie od nich. W kilku miejscach w poradniku traktuję je jako punkt odniesienia/porównania. Oczywiście zachęcam do lektury również osoby mające większe doświadczenie z mikrokontrolerami STM32. Być może odnajdą w poradniku coś ciekawego lub będą mogły pomóc w jego rozwoju.
techekspert: Dlaczego poradnik wprowadza w zagadnienia związane z STM32, bez użycia bibliotek? Jakie korzyści dla odbiorcy przyniesie takie podejście? Czy w późniejszym czasie sięgnięcie po biblioteki będzie nieuniknione?
szczywronek: Gdy zaczynałem przygodę z STM32, królowała biblioteka SPL (Standard Peripheral Library). Na forum można bez problemu znaleźć długie spory zwolenników i przeciwników tej biblioteki. Przekonały mnie głosy przeciwników. Z tego względu, od początku mojej przygody z STMami, zdecydowałem się nie korzystać z biblioteki do obsługi układów peryferyjnych.
Obsługa peryferiów poprzez bezpośredni dostęp do ich rejestrów konfiguracyjnych gwarantuje pełną kontrolę nad układami mikrokontrolera i sprawia większą frajdę przy programowaniu
Kod jest krótszy, zajmuje mniej pamięci, szybciej się wykonuje. Nie trzeba się martwić o ewentualne błędy w funkcjach bibliotecznych czy też o to, że producent za jakiś czas zaprzestanie rozwijania biblioteki. Taki los spotkał właśnie bibliotekę SPL.
Wielokrotnie spotkałem się z uzasadnianiem potrzeby korzystania z biblioteki ze względu na to, że zwalnia ona z konieczności dogłębnego poznawania mikrokontrolera i umożliwia szybki start bez wgłębiania się w dokumentację. Nigdy nie rozumiałem tego podejścia. Aby korzystać z funkcji bibliotecznych trzeba poznać i bibliotekę (aby wiedzieć jak coś ustawić) i mikrokontroler (aby wiedzieć co ustawić). Dwa razy więcej roboty. Nie da się programować mikrokontrolerów bez korzystania z ich dokumentacji. Swoją drogą, obserwując tematy na forach internetowych zauważam, że część osób początkujących poświęca tyle czasu na szukanie gotowych rozwiązań i „walkę” z gotowcami skopiowanymi z sieci, że spokojnie zdążyliby w tym okresie opanować dokumentację producenta i napisać program od zera.
"W późniejszym czasie"? To znaczy "w miarę tworzenia bardziej rozbudowanych projektów"? Absolutnie nie. W poradniku kompleksowo omówiona jest większość najczęściej używanych układów peryferyjnych. W tym te „bardziej” rozbudowane jak np. liczniki i przetworniki ADC. W wymyślnych projektach konfiguracja układów peryferyjnych będzie taka sama jak w prostych przykładach. Komplikować będzie się jedynie wyższa warstwa oprogramowania.
techekspert: Jakie narzędzia powinien przygotować czytelnik aby w praktyce przetestować zdobytą wiedzę?
szczywronek: Software'owe czy hardware'owe? Od narzędzi programowych generalnie umywam ręce. Każde środowisko, które pasuje programiście i pozwala skupić się na programowaniu a nie walce z samym narzędziem jest ok. Ja zdecydowałem się na zestaw Eclipse + GCC + OpenOCD według przepisu forumowego kolegi Freddie Chopin (Link). Zdaję sobie jednak sprawę, że to nie jest najprostsza z opcji. Jeśli ktoś nie czuje się na siłach by samodzielnie skonfigurować środowisko Eclipse, może skorzystać z gotowych narzędzi dedykowanych mikrokontrolerom STM32 - np. CooCox (darmowy) czy Keil (dostępna jest darmowa wersja z ograniczeniami).
Jeżeli zaś chodzi o sprzęt to cały poradnik opiera się na dwóch zestawach edukacyjnych: chińskiej płytce HY-mini z mikrokontrolerem STM32F103 i płytce STM32F429i-Disco z mikrokontrolerem STM32F429. Oczywiście nic nie stoi na przeszkodzie, aby Czytelnik wykorzystywał inny zestaw. W poradniku koncentruję się na układach peryferyjnych samego mikrokontrolera w marginalnym stopniu wykorzystując elementy zestawów rozwojowych.
Oprócz samego mikrokontrolera niezbędny jest programator/debugger. Pod tym względem warto zdecydować się na kupno firmowego zestawu rozwojowego ST (serii Nucleo lub Discovery). Są to gotowe płytki rozwojowe z mikrokontrolerem, różnymi bajerami i wbudowanym programatorem/debuggerem. Dzięki temu, za rozsądne pieniądze (seria Nucleo - około 60zł, seria Discovery - od około 50zł), mamy wszystko co potrzeba do rozpoczęcia przygody z STM. Wbudowany programator/debugger pozwala również na pracę z innymi mikrokontrolerami, spoza zestawu.
Ponadto przyda się to co można znaleźć w szufladzie każdego elektronika zajmującego się mikrokontrolerami: przewody połączeniowe, multimetr, oporniki, diody świecące, enkoder obrotowy, przejściówka UART ↔ USB. Jedynie w kilku przykładach związanych z licznikami i przetwornikiem DAC, do obserwacji wyników niezbędny jest analizator logiczny lub oscyloskop. W poradniku zamieszczone są „zrzuty” rezultatów, więc jeśli ktoś nie dysponuje tymi przyrządami to może bazować na zamieszczonych obrazach.
techekspert: Czy możemy określić do jakiego poziomu dotrzemy ucząc się z poradnikiem? Czy będzie to dokładne poznanie rdzenia, interfejsów, mechanizmów obniżających zużycie energii? Czy możemy określić obszary, którymi warto się zainteresować po ukończeniu kursu?
szczywronek: Poradnik jest tylko punktem wyjścia. Na początku staram się obalić mit o skomplikowanych STMach i tysiącach stron dokumentacji, w której nie sposób się odnaleźć. Poradnik rozpoczyna się od dosyć długiego wstępu opisującego podstawowe kwestie: sposób nazewnictwa mikrokontrolerów STM32, źródła dokumentacji, jej podział i organizację, konwencję według której zbudowane są nazwy rejestrów i bitów konfiguracyjnych, sposób odwoływania się do nich oraz inne kwestie niezbędne przed startem. W następnych rozdziałach opisuję przede wszystkim najważniejsze peryferia mikrokontrolera (porty, liczniki, przetworniki, itd…). Cały czas staram się jednak zachęcać Czytelnika do samodzielnych poszukiwań w dokumentacji, prób rozwiązywania przykładowych zadań przed obejrzeniem moich rozwiązań i późniejszego porównania wyników.
Reszta zależy od Czytelnika. Tak jak napisałem gdzieś we wstępie do poradnika: najważniejsza jest samodzielna praca, przezwyciężenie lęku przed samodzielnymi próbami rozwiązywania problemów i zaufanie sobie. Trzeba nauczyć się korzystać z dokumentacji producenta i (o ironio!) uwolnić się od kursów i poradników. Każdy poradnik się kiedyś kończy! Ważne aby Czytelnik, po skończonej lekturze, umiał coś więcej niż tylko kopiować omówione przykłady.
techekspert: Czym jeszcze można zachęcić do rozpoczęcia przygody z STM32? Jakie przykładowe urządzenie możemy zbudować w oparciu o STM32, które byłoby ciężkie do realizacji z wykorzystaniem np. 8 bitowego mikrokontrolera z rodziny ATMega?
szczywronek: Mikrokontrolery STM32 mają zdecydowanie większe możliwości niż popularne Atmelki. Według mnie na szczególną uwagę zasługują rozwinięte peryferia. W poradniku znajduje się kilka przykładowych programów pokazujących ciekawe możliwości peryferiów. Jednym z nich jest generator przebiegu sinusoidalnego oparty o układ licznika, przetwornik DAC i kontroler DMA. Całość działa w pełni sprzętowo, rdzeń mikrokontrolera można uśpić!
Pod względem możliwości i wydajności mikrokontrolery STM32 biją małe AVRy na każdym polu. Wydaje mi się jednak, że w środowisku hobbystów i pasjonatów możliwości i parametry mikrokontrolera mają drugorzędne znaczenie. Często decydującym czynnikiem jest cena układu, łatwość programowania i ilość dostępnych przykładów oraz materiałów. Poradnikiem staram się nieco odczarować STMy, które części hobbystów mogą się wydawać nieprzystępne. Co do ceny układów, cóż... popularna ATmega328 w najbliższym mi „osiedlowym” sklepie elektronicznym kosztuje około 18zł. Płytka rozwojowa z mikrokontrolerem STM32F103, złączem USB, rezonatorami kwarcowymi, listwami pinowymi i regulatorem napięcia kosztuje na ebay'u 14zł z darmową dostawą do domu.
Jest jeszcze jedna, dosyć rzadko, poruszana kwestia. Przesiadka na zupełnie inną architekturę mikrokontrolerów (np. z AVR na STM32) niesamowicie rozwija ogólną wiedzą na temat systemów mikroprocesorowych. To co przy AVRach było jasne, oczywiste i nie budziło wątpliwości (np. oddzielne przestrzenie adresowe pamięci) nagle zrealizowane jest inaczej. Rodzą się pytania: dlaczego jest tak a nie inaczej? Czy można to zrealizować w jeszcze inny sposób? Jeśli wystarczy zapału do poszukiwania odpowiedzi, to można się dzięki temu bardzo dużo nauczyć. Sam, kilka dni temu, dowiedziałem się ciekawej rzeczy na temat mikrokontrolerów AVR (pozdrawiam kolegę BlueDraco). Wydawało mi się, że sporo o nich wiem, a jednak zostałem zupełnie zaskoczony
Zachęcam do lektury tematu poświęconego poradnikowi.
techekspert: Dziękujemy za rozmowę i zapraszamy do zapoznania się z tematem: [STM32][C] - Poradnik dla początkujących (bez bibliotek)
W wątku możecie dodać swoje uwagi i pytania, które mogą wpłynąć na treść kolejnych wersji poradnika.
techekspert: Do kogo kierowany jest poradnik, jakie podstawy powinien mieć opanowane czytelnik? Czy znajomość określonej rodziny mikrokontrolerów ułatwi korzystanie z poradnika?
szczywronek: Poradnik od początku pisany był z myślą o nowicjuszach, którzy zaczynają przygodę z mikrokontrolerami STM32. Czytelnik powinien mieć opanowany język C w stopniu... nazwijmy to „komunikatywnym”. Starałem się aby przykładowe programy w poradniku były jak najprostsze, ale od narzędzi takich jak np. wskaźniki czy struktury nie można całkiem uciec. Założyłem ponadto, że Czytelnik ma jakieś minimalne doświadczenie w programowaniu mikrokontrolerów. Odrobinę uprzywilejowani mogą się czuć Ci, którzy pracowali z popularnymi układami AVR (ATtiny, ATmega). AVRy są aktualnie najczęściej wybieraną rodziną wśród hobbystów i początkujących. Moja przygoda z mikrokontrolerami zaczęła się właśnie od nich. W kilku miejscach w poradniku traktuję je jako punkt odniesienia/porównania. Oczywiście zachęcam do lektury również osoby mające większe doświadczenie z mikrokontrolerami STM32. Być może odnajdą w poradniku coś ciekawego lub będą mogły pomóc w jego rozwoju.
techekspert: Dlaczego poradnik wprowadza w zagadnienia związane z STM32, bez użycia bibliotek? Jakie korzyści dla odbiorcy przyniesie takie podejście? Czy w późniejszym czasie sięgnięcie po biblioteki będzie nieuniknione?
szczywronek: Gdy zaczynałem przygodę z STM32, królowała biblioteka SPL (Standard Peripheral Library). Na forum można bez problemu znaleźć długie spory zwolenników i przeciwników tej biblioteki. Przekonały mnie głosy przeciwników. Z tego względu, od początku mojej przygody z STMami, zdecydowałem się nie korzystać z biblioteki do obsługi układów peryferyjnych.
Obsługa peryferiów poprzez bezpośredni dostęp do ich rejestrów konfiguracyjnych gwarantuje pełną kontrolę nad układami mikrokontrolera i sprawia większą frajdę przy programowaniu

Wielokrotnie spotkałem się z uzasadnianiem potrzeby korzystania z biblioteki ze względu na to, że zwalnia ona z konieczności dogłębnego poznawania mikrokontrolera i umożliwia szybki start bez wgłębiania się w dokumentację. Nigdy nie rozumiałem tego podejścia. Aby korzystać z funkcji bibliotecznych trzeba poznać i bibliotekę (aby wiedzieć jak coś ustawić) i mikrokontroler (aby wiedzieć co ustawić). Dwa razy więcej roboty. Nie da się programować mikrokontrolerów bez korzystania z ich dokumentacji. Swoją drogą, obserwując tematy na forach internetowych zauważam, że część osób początkujących poświęca tyle czasu na szukanie gotowych rozwiązań i „walkę” z gotowcami skopiowanymi z sieci, że spokojnie zdążyliby w tym okresie opanować dokumentację producenta i napisać program od zera.
"W późniejszym czasie"? To znaczy "w miarę tworzenia bardziej rozbudowanych projektów"? Absolutnie nie. W poradniku kompleksowo omówiona jest większość najczęściej używanych układów peryferyjnych. W tym te „bardziej” rozbudowane jak np. liczniki i przetworniki ADC. W wymyślnych projektach konfiguracja układów peryferyjnych będzie taka sama jak w prostych przykładach. Komplikować będzie się jedynie wyższa warstwa oprogramowania.
techekspert: Jakie narzędzia powinien przygotować czytelnik aby w praktyce przetestować zdobytą wiedzę?
szczywronek: Software'owe czy hardware'owe? Od narzędzi programowych generalnie umywam ręce. Każde środowisko, które pasuje programiście i pozwala skupić się na programowaniu a nie walce z samym narzędziem jest ok. Ja zdecydowałem się na zestaw Eclipse + GCC + OpenOCD według przepisu forumowego kolegi Freddie Chopin (Link). Zdaję sobie jednak sprawę, że to nie jest najprostsza z opcji. Jeśli ktoś nie czuje się na siłach by samodzielnie skonfigurować środowisko Eclipse, może skorzystać z gotowych narzędzi dedykowanych mikrokontrolerom STM32 - np. CooCox (darmowy) czy Keil (dostępna jest darmowa wersja z ograniczeniami).
Jeżeli zaś chodzi o sprzęt to cały poradnik opiera się na dwóch zestawach edukacyjnych: chińskiej płytce HY-mini z mikrokontrolerem STM32F103 i płytce STM32F429i-Disco z mikrokontrolerem STM32F429. Oczywiście nic nie stoi na przeszkodzie, aby Czytelnik wykorzystywał inny zestaw. W poradniku koncentruję się na układach peryferyjnych samego mikrokontrolera w marginalnym stopniu wykorzystując elementy zestawów rozwojowych.
Oprócz samego mikrokontrolera niezbędny jest programator/debugger. Pod tym względem warto zdecydować się na kupno firmowego zestawu rozwojowego ST (serii Nucleo lub Discovery). Są to gotowe płytki rozwojowe z mikrokontrolerem, różnymi bajerami i wbudowanym programatorem/debuggerem. Dzięki temu, za rozsądne pieniądze (seria Nucleo - około 60zł, seria Discovery - od około 50zł), mamy wszystko co potrzeba do rozpoczęcia przygody z STM. Wbudowany programator/debugger pozwala również na pracę z innymi mikrokontrolerami, spoza zestawu.
Ponadto przyda się to co można znaleźć w szufladzie każdego elektronika zajmującego się mikrokontrolerami: przewody połączeniowe, multimetr, oporniki, diody świecące, enkoder obrotowy, przejściówka UART ↔ USB. Jedynie w kilku przykładach związanych z licznikami i przetwornikiem DAC, do obserwacji wyników niezbędny jest analizator logiczny lub oscyloskop. W poradniku zamieszczone są „zrzuty” rezultatów, więc jeśli ktoś nie dysponuje tymi przyrządami to może bazować na zamieszczonych obrazach.
techekspert: Czy możemy określić do jakiego poziomu dotrzemy ucząc się z poradnikiem? Czy będzie to dokładne poznanie rdzenia, interfejsów, mechanizmów obniżających zużycie energii? Czy możemy określić obszary, którymi warto się zainteresować po ukończeniu kursu?
szczywronek: Poradnik jest tylko punktem wyjścia. Na początku staram się obalić mit o skomplikowanych STMach i tysiącach stron dokumentacji, w której nie sposób się odnaleźć. Poradnik rozpoczyna się od dosyć długiego wstępu opisującego podstawowe kwestie: sposób nazewnictwa mikrokontrolerów STM32, źródła dokumentacji, jej podział i organizację, konwencję według której zbudowane są nazwy rejestrów i bitów konfiguracyjnych, sposób odwoływania się do nich oraz inne kwestie niezbędne przed startem. W następnych rozdziałach opisuję przede wszystkim najważniejsze peryferia mikrokontrolera (porty, liczniki, przetworniki, itd…). Cały czas staram się jednak zachęcać Czytelnika do samodzielnych poszukiwań w dokumentacji, prób rozwiązywania przykładowych zadań przed obejrzeniem moich rozwiązań i późniejszego porównania wyników.
Reszta zależy od Czytelnika. Tak jak napisałem gdzieś we wstępie do poradnika: najważniejsza jest samodzielna praca, przezwyciężenie lęku przed samodzielnymi próbami rozwiązywania problemów i zaufanie sobie. Trzeba nauczyć się korzystać z dokumentacji producenta i (o ironio!) uwolnić się od kursów i poradników. Każdy poradnik się kiedyś kończy! Ważne aby Czytelnik, po skończonej lekturze, umiał coś więcej niż tylko kopiować omówione przykłady.
techekspert: Czym jeszcze można zachęcić do rozpoczęcia przygody z STM32? Jakie przykładowe urządzenie możemy zbudować w oparciu o STM32, które byłoby ciężkie do realizacji z wykorzystaniem np. 8 bitowego mikrokontrolera z rodziny ATMega?
szczywronek: Mikrokontrolery STM32 mają zdecydowanie większe możliwości niż popularne Atmelki. Według mnie na szczególną uwagę zasługują rozwinięte peryferia. W poradniku znajduje się kilka przykładowych programów pokazujących ciekawe możliwości peryferiów. Jednym z nich jest generator przebiegu sinusoidalnego oparty o układ licznika, przetwornik DAC i kontroler DMA. Całość działa w pełni sprzętowo, rdzeń mikrokontrolera można uśpić!
Pod względem możliwości i wydajności mikrokontrolery STM32 biją małe AVRy na każdym polu. Wydaje mi się jednak, że w środowisku hobbystów i pasjonatów możliwości i parametry mikrokontrolera mają drugorzędne znaczenie. Często decydującym czynnikiem jest cena układu, łatwość programowania i ilość dostępnych przykładów oraz materiałów. Poradnikiem staram się nieco odczarować STMy, które części hobbystów mogą się wydawać nieprzystępne. Co do ceny układów, cóż... popularna ATmega328 w najbliższym mi „osiedlowym” sklepie elektronicznym kosztuje około 18zł. Płytka rozwojowa z mikrokontrolerem STM32F103, złączem USB, rezonatorami kwarcowymi, listwami pinowymi i regulatorem napięcia kosztuje na ebay'u 14zł z darmową dostawą do domu.
Jest jeszcze jedna, dosyć rzadko, poruszana kwestia. Przesiadka na zupełnie inną architekturę mikrokontrolerów (np. z AVR na STM32) niesamowicie rozwija ogólną wiedzą na temat systemów mikroprocesorowych. To co przy AVRach było jasne, oczywiste i nie budziło wątpliwości (np. oddzielne przestrzenie adresowe pamięci) nagle zrealizowane jest inaczej. Rodzą się pytania: dlaczego jest tak a nie inaczej? Czy można to zrealizować w jeszcze inny sposób? Jeśli wystarczy zapału do poszukiwania odpowiedzi, to można się dzięki temu bardzo dużo nauczyć. Sam, kilka dni temu, dowiedziałem się ciekawej rzeczy na temat mikrokontrolerów AVR (pozdrawiam kolegę BlueDraco). Wydawało mi się, że sporo o nich wiem, a jednak zostałem zupełnie zaskoczony

techekspert: Dziękujemy za rozmowę i zapraszamy do zapoznania się z tematem: [STM32][C] - Poradnik dla początkujących (bez bibliotek)
Cool? Ranking DIY