Skocz do zawartości
Zaloguj się, aby obserwować  
deshipu

Programowanie płytek STM32F103C przy pomocy Arduino

Pomocna odpowiedź

STM32 robi się coraz bardziej dostępne -- można już zamówić z Chin płytkę z STM32 za niecałe $2. Ale jak się za to zabrać nie mając programatora i nie znając platformy? Można zacząć od starego dobrego Arduino IDE, które już znamy i w miarę oswajania się z nową płytką stopniowo przesiąść się na bardziej zaawansowane techniki (lub nie).

Od paru lat już istnieje projekt STM32duino (http://www.stm32duino.com/), który umożliwia nam łatwe programowanie właśnie tych (a także wielu innych) płytek. Niestety większość instrukcji znajduje się na forum, gdzie nie są łatwo dostępne -- trzeba się przekopywać przez wieloletnie wątki. Dlatego postanowiłem napisać prostą i łatwą instrukcję. Większość tego wyczytałem w wątku http://www.stm32duino.com/viewtopic.php?f=28&t=117, gdzie na samym początku widzimy oznaczenia pinów naszej płytki:

Płytka ta ma port USB pozwalający na programowanie, niestety domyślnie przychodzi bez bootloadera. Na szczęście ten mikrokontroler ma też wbudowany bootloader pozwalający wgrać nasz kod (albo właściwy bootloader do USB) poprzez port szeregowy -- potrzebować będziemy jedynie konwerter USB2TTL, taki sam jak do programowania płytek Pro Mini (można też użyć płytki Arduino z wyciągniętym mikrokontrolerem, ale nie będę tu opisywał tego dokładnie).

Podłączamy zatem cztery nóżki: zasilanie do 5V, gnd do gnd, RX do A9 i TX do A10. Musimy także pzełączyć zworkę od BOOT0 na 1 tak, aby nasza płytka uruchomiła się w trybie wgrywania kodu przez port szeregowy.

Następnie zajmijmy się oprogramowaniem. Potrzebne będzie Arduino IDE w wersji co najmniej 1.6.9. Wchodzimy w ustawienia i dopisujemy dodatkowy URL z definicjami płytek: http://dan.drown.org/arduino/package_STM32duino_index.json. Następnie w menu "Tools" wybieramy w "Boards" opcję "Board Manager", wyszukujemy "STM32" i instalujemy definicje dla "STM32F1*". Dalej, wybieramy "STM32F103C", programowanie przez port szeregowy, z przykładów wybieramy "Blink", zmieniamy w nim "13" na "PC13", podłączamy nasz USB2TTL, wybieramy w "Tools" jego port szeregowy i klikamy "Upload".

Ja w tym momencie zobaczyłem błąd i musiałem zrobić drobne obejście -- w katalogu "~/.arduino15/packages/stm32duino/tools/stm32tools/1.0.9/" gdzie zainstalowały się definicje płytek musiałem zrobić link symboliczny z katalogu "linux64" do "linux" -- z jakiegoś powodu Arduino oczekiwało właśnie takiej ścieżki. Pewnie drobny błąd, który niebawem będzie poprawiony.

W każdym razie możemy już podziwiać naszą migającą diodę.

No dobra, ale chciałoby się jednak wgrywać te programy przez USB, a nie męczyć się z portem szeregowym za każdym razem. Zatem wgrajmy bootloader. Użyjemy do tego osobnego programu, który nazywa się pod Linuksem "stm32flash" i możemy go zainstalować w większości dystrybucji z pakietu o tej samej nazwie. Ściągamy z https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/STM32F1/binaries plik generic_boot20_pc13.bin, wydajemy polecenie "stm32flash /dev/ttyUSB0 -w generic_boot20_pc13.bin" i nasz bootloader jest wgrany.

Jest jeszcze jeden mały problemik. Te chińskie płytki bardzo często mają zły opornik wlutowany jako R10, co uniemożliwia resetowanie płytki przez USB. Sprawdzamy to omomierzem. Jeśli pomiędzy nóżką 3.3V a A12 mamy większą oporność niż 1.5kΩ (na przykład 10kΩ lub 4.7kΩ), to opornik jest zły i mamy dwa wyjścia: albo wylutowujemy go i zastępujemy opornikiem 1.5kΩ, albo po prostu dajemy zewnętrzny opornik o wartości 1.8kΩ pomiędzy nóżkę A12 i 3.3V.

Po tej operacji możemy w "Tools"->"Upload Method" włączyć bootloader USB, przestawić obie zworki na naszej płytce na 0 i programować przez USB.

[ Dodano: 18-08-2016, 00:36 ]

A, jeszcze jedno, słowo do wyszukiwania na Aliexpress czy eBay w celu zakupu płytki to "STM32F103C8T6".

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

dzięki za wstawke, przyda się gdyż planuje zrezygnować z arduino uno ze względu na wymiary i szukam czegoś mniejszego do mało wymagających projektów.

po wgraniu bootloadera program wgrywa sie tak samo jak na arduino ??

czy kod arduino a STM32F103C8T6 duzo sie rozni ?

ps. Czy inne mniejsze płytki łatwe w programowaniu(za pomocą kabla usb) do mnie jwymagających projektów i w miare tanie mógłbyś polecić ??

Najlepiej z wgranym bootloaderem gdyż nigdy tego nie wgrywałem

Udostępnij ten post


Link to post
Share on other sites

Po wgraniu bootladera można programować przez usb. Biblioteki zapewniają w zasadzie takie samo środowisko, jak dla normalnego Arduino, więc są digital/analog Read/Write, biblioteka WIre, SPI, etc. Różnice są w timerach i przerwaniach -- tu już wypada zajrzeć do dokumentacji.

Co do mniejszych płytek kompatybilnych z Arduino, to osobiście głównie używam Pro Mini, bo jest najmniejsza i najtańsza, a w zasadzie jest to takie UNO. Tylko nie ma portu USB, trzeba go na czas programowania osobno podłączać -- dzięki temu jest jednak mniejsza i tańsza.

Jak jednak chcesz ten port USB koniecznie, to masz jeszcze Nano, które w zasadzie jest klonem UNO, tylko mniejszym, i Pro Micro, które jest klonem Leonardo, więc pozwala ci programować port USB.

Jest też sporo małych płytek opartych na attiny, ale tego raczej początkującym nie polecam, bo jednak trochę mało zasobów, szczególnie jak 1/3 pamięci zajmuje bootloader.

Udostępnij ten post


Link to post
Share on other sites

Bawię się takimi płytkami z STM32: Maple Mini i Bluepill z Arduino. Dostępne tanio na Ebay z Chin.

Są bardzo wydajne, ale trochę sie trzeba pobawić z portowaniem projektów Arduino AVR na Arduino STM, choć nie napotkałem jeszcze barier nie do przejścia.

Problemy wynikają z różnic podstawowych i dodatkowych bibliotek dla STM i AVR.

Czasem jest to zwykła kosmetyka np zamiana #define WARTOSC na deklarację zmiennej, też takie niuanse jak PinMode(port,INPUT_PULLUP) dla STM a dla AVR PinMode(port,INPUT); digitalWrite(port, HIGH);, ale są też trudniejsze niedopasowania wynikajace z architektury.

Generalnie daje się przeżyć, choć czasem trzeba poświęcić sporo czasu na wypracowanie lub znalezienie rozwiazań.

Właśnie sobie ćwiczę taki oscyloskop, który mam na AVR na wyświetlaczu Nokia 5110 i widzę że pasmo na Atmega8 program w Bascom mam lepsze niż na STM32 na Arduino, ale sądzę że trzeba popracować nad szybkim odczytem ADC w STM32, wyłaczeniem przerwań gdy zbierane są dane, użycie DMA....

Generalnie procesor jest sporo wydajniejszy, ma więcej wewnętrznych peryferiali i warto się pomęczyć.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...