ARM - jak zacząć? Temat rozwiązany

ODPOWIEDZ
Tom92
Użytkownik
Posty: 6
Rejestracja: 29 sie 2018, 15:35

ARM - jak zacząć?

Post autor: Tom92 » 14 lut 2020, 3:45

Witam szanownych forumowiczów!

Zwracam się do Was o kilka porad. Aktualnie programuję hobbystycznie 8-bitowe mikrokontrolery AVR w języku C, ale myślę nad rozpoczęciem przygody także z 32-bitowymi mikrokontrolerami ARM do "bardziej wymagajacych projektów". Ale ze względu ograniczenia budżetu (zakup i remont domu) chciałbym zacząć w miarę najniższym kosztem.

Jestem całkowicie zielony jeśli chodzi o ARM-y, dopiero teraz zacząłem szukac informacji na ten temat. Wydaje mi się że najbardziej odpowiedni mikrokontroler dla mnie na poczatek to stm32f103, ale mam dla Was kilka pytań:

1. Czy na początek wystarczy ta mała płytka testowa?
https://www.sunduino.pl/male-i-tanie-stm32-dla-kazdego/

2. Znalazłem taki programator, czy się sprawdzi?
https://kamami.pl/stm32/559856-programa ... -stm8.html

3. Jakie środowisko programistyczne wybrać? Mam Eclipse, czy można z niego skorzystać?

4. Polecacie jakieś poradniki? Znalazłem tylko kurs STM32 na stronie forbot.

5. Znalazłem na blogu sunduino.pl kurs STM32 Discovery. Nie wiem czy ma to znaczenie, ale mogę przejść przez ten kurs z mikrokontrolerem stm32f103?

6. Widzę, albo wydaje mi się tylko, że pisze się kody w inny sposob. Czy mogę przenosić programy z AVR na STM32? Wystarczy tylko przeportować czy jest to większy problem? Należy na nowo i w inny sposób napisać kod?

Pewnie jeszcze inne pytania przyjda mi do głowy :P pozdrawiam.

Awatar użytkownika
Nefarious19
Magyster
Posty: 46
Rejestracja: 17 paź 2017, 10:03
Lokalizacja: Łódź

Re: ARM - jak zacząć?

Post autor: Nefarious19 » 14 lut 2020, 8:19

Hej! Fajnie że napisałeś. Chętnie pomożemy.

Zacznijmy od tego że ARM to firma która projektuje rdzenie dla mikroprocesorów oraz mikrokontrolerów. Chodzi Ci z więc z pewnością o rdzenie Cortex-M które umieszczane są w mikrokontrolerach. Producentów mikroklocków z tym rdzeniem jest bardzo wielu ale jak sam zauważyłeś wśród hobbystów najbardziej popularne są STM32 od firmy ST a to z racji tego że firma udostępnia narzędzia deweloperskie w mega niskich cenach oraz całkiem znośne środowisko programistyczne. A teraz do rzeczy.

Ad 1 i Ad 2.

Tak taki zestaw jak najbardziej się sprawdzi. Nie mniej jednak ja proponowałbym na początek takie Nucleo:

https://botland.com.pl/pl/stm32-nucleo/ ... ex-m3.html

Masz tam bardzo fajny mikrokontroler z klasycznej linii F103 z fajnymi bebechami oraz z wbudowanym na PCB debugerem i programatorem. Podłączasz do kompa i kodzisz. Procek ten ma rdzeń Cortex M3 który nie ma co prawda sprzętowego FPU ale i tak jest b szybki. Cortex M0 to dość okrojona konstrukcja i nie ma sensu od niej zaczynać bo wbrew pozorom w wielu aplikacjach jest wolniejsza od Atmendy :D

Co do programatora, jakbyś już miał kupować to szukaj takiego:
https://www.aliexpress.com/item/3289400 ... hweb201603_

Mam ja i wielu na tym forum i sobie chwalimy.

Ad 3.

Co do środowiska programistycznego to ja polecam Atollic True Studio w wersji 9.3. Kolejne wersje to STM32 Cube IDE czy jakoś tak. Róznią się tym że CUBE IDE ma zintegrowanego CUBE'a czyli narzędzie do konfiguracji mikrokontrolera. Moim zdaniem True Studio 9.3 jest lepsze z racji braku Cube'a ale ja pisze na rejestrach. Ty skoro jesteś początkującym to CubeIDE będzie leszym wyborem gdyż na początku i tak pewnie będziesz korzystał z konfiguratora procka.

Ad 4. i Ad 5
Ja ze swojej strony polecam to: https://www.elektroda.pl/rtvforum/topic3111562.html Najpierw przeczytać bez kodzenia, a później można zacząć kodzić.
Jest to poradnik bez bibiotek więc możesz to odłożyć na później jak już trochę ogarniesz co i jak.
Na sam początek polecam więc kurs Forbota. Piszą oni że nie używają CUBE'a ale to bzdura bo po prostu nie generują nim kodu ale używają bibiotek HAL z pakietu Cube. Kurs Suna z tego co pamiętam bazuje na StdPeriphs które są moim zdaniem fjanymi libsami i również warto się nimi zainteresowac są choć już leciwe i niewspierane z tego co wiem.

Biblioteki te takie zestawy funkcji napisanych w języku C które pozwalają użytkownikowi na dostęp do peryferiów takich jak UART czy SPI bez zaglądania w rejestry. Jest to bardzo fajne podejście i warto jest stosować. Ja co prawda piszę swoje HAL'e ale nigdy nie odnoszę się bezpośrednio do rejestrów w głównym kodzie aplikacji. Jest to dobra praktyka programistyczna i warto z niej korzystać.


Ad 6.
Kod piszę się tak samo jak i na inne procki. Są pewne wyjątki ale to jak w każdej rodzinie uC. Tutaj masz o wiele większe zasoby niż na AVR czy PIC więc można poszaleć. Liczenie na liczbach 32bit jest np w jednym cyklu wykonywane. Architecura jest oczywiście nieco inna, bardziej rozbudowana ale nadal do ogarnięcia. Tak jak pisałem, jeżeli będziesz pisał swoje libsy w abstrakcji od sprzętu to nie ma żadnego problemu z portowaniem.
Delay np się tu raczej nie stosuje ale masz mnogość timerów czy nawet ten o nazwie SysTick wbudowany w rdzeń które możesz użyć do timingów.
Ciężko opisać to w jednym poście. Zacznij Kodzić, bedziesz miał pytania, załóż wątek to Ci podpowiemy. I nie zniechęcaj się. Zobaczysz jaka moc drzemie w tych klockach i co to znaczy debuger sprzętowy a nie pitolenie o debugowaniu ledem.

Awatar użytkownika
elvis
Użytkownik
Posty: 60
Rejestracja: 30 lis 2018, 17:50

Re: ARM - jak zacząć?

Post autor: elvis » 14 lut 2020, 19:50

Na sam początek polecam więc kurs Forbota. Piszą oni że nie używają CUBE'a ale to bzdura bo po prostu nie generują nim kodu ale używają bibiotek HAL z pakietu Cube. Kurs Suna z tego co pamiętam bazuje na StdPeriphs które są moim zdaniem fjanymi libsami i również warto się nimi zainteresowac są choć już leciwe i niewspierane z tego co wiem.
@Nefarious19, to bardzo miło że polecasz kursy z Forbota, ale jako autor części dla stm32f1 muszę nieco sprostować to co napisałeś. Po pierwsze pierwsza i oryginalna część kursu była oparta o StdPeriph (https://forbot.pl/blog/stm32-praktyce-1 ... sko-id2733). Niestety ST lubi sobie od czasu do czasu zmienić bibliotekę i API samego stdperiph zmieniała kilka razy, a w końcu wyrzuciła całość do śmieci :(
Ponieważ stdperiph nie jest już wspierana, więc kurs został "zaadoptowany" do nowszej wersji, czyli Cube HAL. Nie ma to nic wspólnego z CubeMX, który jest po prostu koszmarnym generatorem jeszcze gorszego kodu - i jest właściwie tylko dowodem na to, że Arduino nie jest najgorszą katastrofą jaka mogła systemy wbudowane spotkać.
Więc CubeHAL to zupełnie co innego niż Cube jako całość, a z CubeMX ma tylko tyle wspólnego że MX może, ale nie musi kodu dla HAL generować. W każdym razie kurs F1 nie tyka CubeMX nawet kijem, chociaż na Forbocie jest jeszcze kurs dla F4, ale o nim wolę się nie wypowiadać.

Tom92
Użytkownik
Posty: 6
Rejestracja: 29 sie 2018, 15:35

Re: ARM - jak zacząć?

Post autor: Tom92 » 14 lut 2020, 23:44

No to poczułem się pewniej, dzięki, że tak rozwinąłeś swoją odpowiedź bo przekonałeś mnie. Jestem ciekaw działania tego debugera :)

Masz rację płytka Nucleo bedzie dobrym wyborem bo odrazu jest tam kilka elementów do testowa. Natomiast programator jakbym zamówił z linku, który podałeś to nie będzie z nim problemów? Widziałem, że w Polsce jest dużo droższy :P

Nie wiem czy dobrze zrozumiałem, dlatego dopytam. Z tymi bibliotekami CubeHAL i StdPeriphs to chodzi o to że mogę uruchomić np. Timery, UART, SPI itd. bez zaglądania do dokumentacji mikrokontrolera? To są gotowe funkcje konfiguracyjne i inicjalizujace różne peryferia mikrokontrolera?

Delayów staram sie nie używać wcale, nawet mi zaczęło wychodzić :P w pytaniu o przeniesienie kodu chodziło mi także o kod, w którym wykorzystuję np. Timery sprzętowe i przy przeniesieniu go z AVR na STM32 bede pewnie musiał zmienić koncepcję?

Dodano po 8 minutach 29 sekundach:
Elvis czyli jakbym korzystał z bibliotek to opierać sie na CubeHAL bo StdPeriphs już nie ma?

Awatar użytkownika
elvis
Użytkownik
Posty: 60
Rejestracja: 30 lis 2018, 17:50

Re: ARM - jak zacząć?

Post autor: elvis » 15 lut 2020, 8:33

StdPeriph jest już niestety martwa, więc uczenie się jej raczej nie ma sensu. Dostępna jest tylko dla starszych modeli mikrokontrolerów, a nowych wersji raczej nie będzie.
Jak chodzi o biblioteki od ST to do wyboru jest Cube / HAL oraz LL. Można oczywiście używać rejestrów, ale to i tak kończy się napisaniem własnego HAL-a, co więcej nie zawsze jest takie proste - szczególnie w przypadku "większych" modeli.
Zanim się zdecydujesz na wybór biblioteki proponowałbym jeszcze poszukać niezależnych rozwiązań jak np. mbed, czy nawet Arduino... Takie biblioteki są chociaż niezależne od producenta.

Awatar użytkownika
SunRiver
Administrator
Posty: 822
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: ARM - jak zacząć?

Post autor: SunRiver » 15 lut 2020, 14:34

Tom92 pisze:
14 lut 2020, 23:53
No to poczułem się pewniej, dzięki, że tak rozwinąłeś swoją odpowiedź bo przekonałeś mnie. Jestem ciekaw działania tego debugera :)

Masz rację płytka Nucleo bedzie dobrym wyborem bo odrazu jest tam kilka elementów do testowa. Natomiast programator jakbym zamówił z linku, który podałeś to nie będzie z nim problemów? Widziałem, że w Polsce jest dużo droższy :P

Nie będzie problemu to w odróżnieniu od innych stlinków jak choćby to coś podobne do pendrive to klony zaś ten z linku Nefa to faktyczny pełny debuger STlink v2 posiadający zarówno JTAG jak i SWD oraz SWIM jedyna różnica ze był na rynek chiński.

Ja w obecnej chwili używam STLink v3 SET - ale również posiadam ów rzeczony v2 , z nieco zmasakrowaną obudową , ale cały czas pewny i sprawny
jak będziesz chciał to możemy się dogadać.

https://www.sunduino.pl/stmicroelectron ... od-srodka/

W kwestii tej jednakowoż .... Jak zakupisz nukleo to masz tam również ST-Linka na pokładzie v2 , posiadającego tylko SWD i UART niemniej zawsze możesz odłamać od nucleo i używać z każdym innym STM32 , gdyż i tak najczęściej używa sie właśnie SWD do programowania STM32.

Co do bibliotek , stdPeriph to już dinozaury choć jeszcze są tacy co ich używają (nawet spore firmy) niemniej zastąpiono je przez HAL
tu dobrą radą jest na początek pobawienie się mbed , ew arduino i nie dlatego że libsy są niezależne od producenta a dlatego że są przystępniejsze na początku , do większych prtojektów lepiej używać hal czy rejestrów ....

niem,niej sam musisz zdecydować , spróbować tego i tamtego ...
wiekszość programów w stdP da się łatwo przeportować na hal -- choć są tacy co będą uważać że to za trudne (ale jak saię nie umie :))
najważniejsze jednak żebyś zaczął :)
.... z każdym bitem serca ....
💫SunDUINO
💦GitHUB
💦Google Drive
💦Sotton

Awatar użytkownika
Zealota
Użytkownik
Posty: 17
Rejestracja: 18 lis 2017, 17:45
Lokalizacja: Gliwice
Kontakt:

Re: ARM - jak zacząć?

Post autor: Zealota » 15 lut 2020, 22:25

Nefarious19 pisze:
14 lut 2020, 8:39
Ad 3.
Co do środowiska programistycznego to ja polecam Atollic True Studio w wersji 9.3. Kolejne wersje to STM32 Cube IDE czy jakoś tak. Róznią się tym że CUBE IDE ma zintegrowanego CUBE'a czyli narzędzie do konfiguracji mikrokontrolera. Moim zdaniem True Studio 9.3 jest lepsze z racji braku Cube'a ale ja pisze na rejestrach. Ty skoro jesteś początkującym to CubeIDE będzie leszym wyborem gdyż na początku i tak pewnie będziesz korzystał z konfiguratora procka.
Wg mnie jednak lepiej zacząć od System Workbench for STM32. W przeciwieństwie do Atollica ten projekt nadal jest rozwijany. Nadal pojawiają się aktualizacje, ostatnia chyba była pod koniec roku 2019 i można się spodziewać, że kolejne będą - ale oczywiście gwarancji nie ma :) Dzięki temu można bez rzeźbienia programować najnowsze serie włącznie z STM32G.
Dodatkowo ustawienia tego środowiska są bliższe filozofii znanej z Eclipse dla AVR - no chyba, że nie używałeś. Jeśli używałeś to na początek możesz się odbić w Atollicu od braku wgrywania wsadu bez debuggera - ale to taki szczegół, który może nie być istotny dla Ciebie, ale jednak z doświadczenia wiem, że użytkownicy o to pytają.
Nefarious19 pisze:
14 lut 2020, 8:39
Ad 4. i Ad 5
Ja ze swojej strony polecam to: https://www.elektroda.pl/rtvforum/topic3111562.html Najpierw przeczytać bez kodzenia, a później można zacząć kodzić.
Jestem tego samego zdania. Ten poradnik nie ma odpowiednika dla innych platform i na prawdę przyjemnie można przejść od AVR do STM32, a zarazem być bliżej sprzętu. Sam od pewnego czasu idę tą drogą i w razie potrzeby mogę służyć tu na forum skromną pomocą. Udało mi się ogarnąć większość podstawowych zagadnień, ale nie obiecuję, że będziesz miał doczynienia z poradami jakiegoś wyjątkowego specjalisty :) Nie mniej jednak zachęcam do zadawania pytań na forum. Może gdy forum zapełni się od wątków, to powstanie dedykowane podforum do programowaniu "na rejestrach", ot takie marzenie :).

Tom92
Użytkownik
Posty: 6
Rejestracja: 29 sie 2018, 15:35

Re: ARM - jak zacząć?

Post autor: Tom92 » 16 lut 2020, 3:10

Dziękuję Wam bardzo za konkretne odpowiedzi :)
SunRiver pisze:
15 lut 2020, 14:34
Jak zakupisz nukleo to masz tam również ST-Linka na pokładzie v2 , posiadającego tylko SWD i UART niemniej zawsze możesz odłamać od nucleo i używać z każdym innym STM32 , gdyż i tak najczęściej używa sie właśnie SWD do programowania STM32.
W takim razie na początek zaopatrze się w plytke nukleo, zacznę się wdrażać i później kupię ST-linka v2. W końcu wiem juz coś o programatorach bo byłem całkowicie zielony :P
Zealota pisze:
15 lut 2020, 22:25
Dodatkowo ustawienia tego środowiska są bliższe filozofii znanej z Eclipse dla AVR
Wlasnie eclipsa używałem, cenna uwaga :)

Jeszcze raz dziekuje Wam za wprowadzenie mnie w temat 32-bitowców. Teraz zostało mi poczekać na sprzęt i zacząć programować, a jeśli nie będę umiał sobie z czymś poradzić to zakładać duuuużo tematów z banalnymi dla Was pytaniami :) myślę, że sie nie wkurzycie :P

Pozdrawiam :)

Awatar użytkownika
SunRiver
Administrator
Posty: 822
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: ARM - jak zacząć?

Post autor: SunRiver » 16 lut 2020, 10:28

O to się nie martw :) jesteśmy cierpliwi i staramy się pomagać , i odpowiadać na każde nawet potencjalnie
najdziwniejsze pytanie :)
.... z każdym bitem serca ....
💫SunDUINO
💦GitHUB
💦Google Drive
💦Sotton

ODPOWIEDZ

Wróć do „Na luzie”