Skocz do zawartości

Programowanie płytek STM32F103C przy pomocy Arduino


deshipu

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
Link do komentarza
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

Link do komentarza
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.

Link do komentarza
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ć.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.