16 marca 2017

Bardzo szybki start...

Na początek warto uruchomić prosty program - nic tak nie poprawia humoru jak migająca dioda. Pierwszy problem to oczywiście wybór sprzętu. Na szczęście właściwie wszystkie płytki ewaluacyjne mają zainstalowaną diodę LED, albo chociaż można łatwo ją podłączyć.


Dioda nie będzie więc problemem, warto za to chwilę zastanowić się nad wyborem modelu mikrokontrolera.
Zacznijmy od rdzenia - do wyboru mamy Cortex-M0, M3, M4 i najnowszy M7.
Cortex-M0 jest zbudowany w oparciu o starszą architekturę ARMv6. Aktualnie dostępna jest już ARMv8, więc ten rdzeń raczej odpada. Jego największa zaleta to niska cena, ale dla jednej sztuki to nie ma znaczenia - a lepiej nauczyć się architektury, która jest popularna i jeszcze nie całkiem przestarzała.
Kolejna skrajność to Cortex-M7. Układ robi ogromne wrażenie mocą obliczeniową, a nazywanie go mikrokontrolerem to nieomal obelga. Jest szybszy niż trzy moje pierwsze komputery PC razem wzięte. Niewątpliwie wspaniały układ, ale może na początek zbyt przytłaczający.
Pozostaje Cortex-M3 oraz Cortex-M4. Największa różnica między układami z tymi rdzeniami, to wyższe częstotliwości taktowania w przypadku M4, bardziej rozbudowane peryferia oraz instrukcje związane z DSP i obsługą liczb zmiennopozycyjnych. Na początek nie są to niezbędne rozszerzenia, zacznę więc od starego już, ale prostego Cortex-M3. Później przejdziemy do Cortex-M4.
Wybór rdzenia za nami, teraz trzeba poszukać pierwszej płytki ewaluacyjnej. Ja mam prawie pod ręką NUCLEO-F103RB (prawie bo fizycznie będę ją miał jutro, jak tylko wrócę do domu) - bardzo fajna płytka, niestety z jedną ogromną wadą. W ramach oszczędności zabrakło na niej kwarcu 8MHz. Nie wiem co w głowach mieli projektanci, zostawili co prawda miejsce, ale wlutowanie kondensatorów w zastosowanej obudowie jest (dla mnie) wyzwaniem. Wykorzystam więc w tej chwili Nucleo tak-jak-jest, a później zmienię płytkę. Od czegoś trzeba zacząć, dalej będzie tylko łatwiej.

Płytka wybrana, czas napisać pierwszy program. Ponieważ to tylko "szybki start", więc zacznijmy niesportowo od gotowca. Może nie będziemy od razu wykorzystywać Keil-a, chociaż to pewnie byłoby najłatwiejsze, ale na pierwsze próby wykorzystamy OpenSTM32. Jest to darmowy zestaw wtyczek do Eclipse-a, który pozwala dosłownie w kilka minut przygotować pierwszy program. Właściwie wszystko dzieje się automatycznie. My musimy tylko akceptować umowy i klikać na przyciski "Next".
Strona OpenSTM32 dostępna jest pod adresem: http://www.openstm32.org/HomePage. Znajdziemy tam dwie opcje instalacji - jako gotowy duży plik instalacyjny (Eclipse oraz wtyczki) oraz instrukcję jak dodać wtyczki OpenSTM32 do własnej kopii Eclipse. Którą opcję wybierzemy nie ma znaczenia. Ja używam wtyczek do mojego Eclipse-a, ale wcześniej instalowałem całość jako jedną paczkę - różnic chyba nie ma.


Warto wspomnieć, że OpenSTM32 jest nie tylko darmowy (chociaż przed pobraniem może wymagać zarejestrowania się na stronie), ale również dostępny na różne systemy operacyjne: Windows, Linux i Mac OS. Dla mnie jest to ogromna zaleta, bo bardzo nie lubię okienek. Oczywiście czasem się przydają, ale jeśli tylko mogę to unikam.
Po instalacji i ewentualnym restarcie Eclipse zobaczymy standardowe środowisko. Żeby utworzyć pierwszy projekt wybieramy opcję menu File->New->C Project, a następnie typ projektu "Ac6 STM32 MCU Project".


Przechodząc przez kolejne ekrany dotrzemy do wyboru płytki. Tutaj widać prawdziwy powód wybrania Nucleo - jest na liście wspieranych płytek. Oczywiście można dodać dowolną inną, ale skoro miało być szybko, to niech będzie szybko. Wybieramy płytkę z listy i przycisk już prawie gotowe.

Przed nami ostatnie, ale bardzo ważne pytanie (last but not least): którą bibliotekę chcemy wykorzystać.

Do Webber mamy możliwości:

  • No firmware
  • Standard Peripheral Library (StdPeriph)
  • Hardware Abstraction Layer (Cube HAL)

Pierwsza opcja jest świetna, ale nie utworzy nam kompilowalnego projektu - skoro to szybki start mamy do wyboru dwie pozostałe.
Najlepiej wybrać obie, tzn. utworzyć dwa projekty, każdy z inną biblioteką i porównać. Za każdym razem będziemy musieli pobrać odpowiednie biblioteki, ale OpenSTM32 robi właściwie wszystko automatycznie - wystarczy nacisnąć przycisk "Download target firmware".

Standard Peripheral Library

Jeszcze niedawno ST promowało tę bibliotekę do wszystkich układów STM32. Aktualnie jest traktowana jako przestarzała i nie polecana (a często i niedostępna) dla nowych układów. Skoro jednak jest, warto o niej wspomnieć. Projekt utworzony z jej wykorzystaniem wygląda następująco:
Jak widzimy funkcja main() to pusta pętla, a program i tak zajmuje ponad 1kB, a dane kolejny. Niby niewiele, ale może zastanawiać skąd się to wzięło.
Warto popatrzeć co dostaliśmy w zestawie obowiązkowym. A jest tego na prawdę sporo - ciężko na początek połapać się co jest do czego. Mamy więc szybki start, ale niekoniecznie łatwy.

Hardware Abstraction Layer 

Jest to nowa biblioteka, która ma zastąpić StdPeriph. Jak zwykle ST promuje ją jako idealną i stara się wcisnąć każdemu, nawet jeśli szukamy starej wersji. Oczywiście jak tylko wydadzą kolejną, ta będzie przestarzała i niezalecana. Tym niemniej projekt utworzony z jej wykorzystaniem wygląda następująco:
Teraz wygenerowany kod jest jeszcze większy - wraz z danymi to prawie 4kB. Sporo jak na pustą pętlę while(). Sam projekt jest też bardziej rozbudowany. W końcu na tym polega nowoczesność, w każdej kolejnej wersji dostajemy więcej kodu. Inaczej nie chcielibyśmy przecież kupować większych procesorów.



1 komentarz:

  1. Dzisiaj trafiłem na Pana bloga, podoba mi się !!!
    A ostatnie zdania to sedno sprawy.
    Bardzo dziękuję za świetny wstęp do STM32, ja zaczynam.
    Z uwagą czytam i dziękuję za to, że Pan to opublikował.

    OdpowiedzUsuń