Co będzie nam potrzebne żeby rozszerzenie śmigało od strzała

1. Visual Studio Community 2017
Wymagane jest aby mieć zainstalowane funkcjonalności do Programowania aplikacji klasycznych w języku C++.
Jeśli ktoś tego niema to należy dokonać modyfikacji instalacji przez Visual Studio Installer.

2. Arduino IDE for Visual Studio
Potrzebne jest nam rozszerzenie które najlepiej zainstalować przez VS. Czyli MENU:Tools->Extensions and Updates ...

Rozszerzenie znajdujemy jak wyżej na obrazku

3. Konfiguracja VMICRO.
Tworzymy sobie katalog C:\Works\
i przy okazji w nim hardware i libraries (tak ma wyglądać C:\Works\hardware\ i C:\Works\libraries\)
Tutaj wyjaśnienie dlaczego taki a nie inny, chodzi o to że potrzebujemy katalog z naszymi instalacjami płytek arduino oraz projektów i wybrałem możliwie najbardziej czytelną i krótką nazwę. Zalecam tak katalog nazwać bo w kolejnych krokach instalacji będę w skryptach na sztywno używać tej lokalizacji.
W VS już po zainstalowaniu rozszerzenia wchodzimy sobie do konfiguracji MENU:TOOLS->Visual Micro->Configure Arduino Ide Location(s) ...

I tak powinna wyglądać konfiguracja jak wyżej.
4. Instalacja Python i GIT
To są dodatkowe narzędzia które są potrzebne do prawidłowego działania kompilatorów płytek ESP8266,ESP32. Oraz automatyzacja kopiowania z GITHUB.
Python w wersji 2, ( podobno 3 coś nie działa i trzeba się kopać z nim jak innymi narzędziami linuxo pochodnymi)
https://www.python.org/ftp/python/2.7.1 ... .amd64.msi
wersja 64bit i instalujemy jak każdą inną aplikacje w systemie. Można sobie zobaczyć jak się to mniej a więcej robi w moim poprzednim poście na temat instalowania arduino w Visual Studio Code.
GIT ostatnia wersja
https://github.com/git-for-windows/git/ ... 64-bit.exe
Tutaj też wybrałem wersje 64bit i ostatnią dostępną. Jak zainstalować to też można sobie zobaczyć w poprzednim poście.
Po instalacji obu narzędzi zalecam zrestartować system. Chyba że instalatory zadbały o zaaktualizowania zmiennej %path% w DOS, po to aby z każdego miejsca na dysku mieć dostęp do pythona i gita.
5. Instalacja płytek ESP8266
Na tą okazje uszykowałem taki skrypt:
Kod: Zaznacz cały
@c:
cd \Works
cd hardware
mkdir esp8266com
cd esp8266com
git clone https://github.com/esp8266/Arduino.git esp8266
cd esp8266/tools
python get.py
@echo "KONIEC INSTALACJI"
pause
Zwróćcie uwagę w jakim katalogu i jak się nazywa

Uruchamiamy go w eksploatorze windows własnie z tego katalogu...

Po wykonaniu skryptu tak powinno to wyglądać:

Włączmy Visual Studio , stwórzmy projekt i proszę:

6. Instalacja płytek ESP32
Tutaj również uszykowałem skrypt instalcyjny:
Kod: Zaznacz cały
@c:
cd \Works
cd hardware
mkdir espressif
cd espressif
git clone https://github.com/espressif/arduino-esp32.git esp32
cd esp32/tools
get.exe
@echo "KONIEC INSTALACJI"
pause
Uruchamiamy skrypt (jak wyżej przy płytce ESP8266).

Tak powinno to wyglądać


No i prosze , nawet się skompilowało. Trudne ?
eeeeeh chyba nie.
Tutaj muszę nadmienić jedną jeszcze sprawę. Otóż nigdzie nie jest napisane że te silniki tzw Core które wyżej opisałem jak zainstalować nie są wolne od błędów. Tworzone są w środowisku Linuxowym, oraz w większości twórcy dają gwarancje że w Arduino IDE Javovym będzie działać. Tutaj to uruchamiamy na arduino pod Visual Studio z pluginem i zawsze może coś nie tak być. Po prostu, kiedy ja się tym zacząłem zajmować, musiałem się borykać z wieloma niezgodnościami środowiskowymi , z czasem zostały one w oficjalnych wydaniach poprawione , i też nie wykluczone że w przyszłości się coś zmieni i może się okazać że ten przepis na przepyszne ciastka z kremem arduinowym będą wychodzić zakalcowate.


7. Płytki Arduino STM32
Kwestia STM32 jako arduino jest bardziej skomplikowana, będziemy musieli dokonać poprawek w niektórych plikach itd. ale zacznijmy od początku.
Ściągamy z GITHUB aktualny tzw core Arduino STM32.
Posiłkować się będziemy tym https://github.com/rogerclarkmelbourne/Arduino_STM32
Warto zapoznać się z informacjami na pierwszej stronie , są tam linki do forum oraz do dokumentacji.
Zrobimy podobnie jak poprzednio , uszykowałem do tego skrypcik.
Kod: Zaznacz cały
@c:
cd \Works
cd hardware
git clone https://github.com/rogerclarkmelbourne/Arduino_STM32.git Arduino_STM32
@echo "KONIEC INSTALACJI"
pause
i uruchamiamy w tym katalogu.

Tak to powinno wyglądać jak wyżej.
Kolejną czynnością którą trzeba zrobić już ręcznie, jest znalezienie Toolchain do ARM.
Jeśli już macie na dysku GNU Arm Embedded Toolchain to można pominąć czynność ściągania i instalowania do kroku gdzie będziemy w pliku PLATFORM.TXT zmieniać ścieżkę do kompilatora.
Wchodzimy sobie na stronę https://developer.arm.com/open-source/g ... /downloads
i ściągamy paczkę Windows ZIP.

Co ciekawe, w oryginalnej instrukcji jak zainstalować płytki STM32 jest ten krok instalowania Toolchaina zalecany przez instalowanie płytek Arduino SAM, tam automat ściągnie do tych płytek również kompilator. Ja zdecydowałem się że sam ściągnę ( przy okazji sprawdzę czy to działa

Po pobraniu wskazanego toolczajn, otwieramy archiwum ZIP w taki sposób jak niżej:

natomiast drugie okno szykujemy w katalogu też jak wyżej pokazałem, nie wiem czy nazewnictwo katalogów jest istotne, ale zalecam to zrobić jak wyżej pokazałem, będziemy przynajmniej wiedzieć co tam jest i w jakiej wersji na wejściu.
Oczywiście katalogi gdzie rozpakujemy archiwum tworzymy ręcznie w lokalizacji jak wyżej pokazałem.
Teraz pozostaje przenieść...

Powinno to wyglądać tak jak zdjęciu wyżej i kopiujemy sobie do schowka (CTRL C) zaznaczoną ścieżkę.
C:\Works\hardware\Arduino_STM32\tools\arm-none-eabi-gcc\7-2017-q4
Teraz pozostaje zmienić ścieżki w plikach PLATFORM.TXT właśnie na tą skopiowaną.
-> Edytujemy najpierw ten plik: C:\Works\hardware\Arduino_STM32\STM32F1\platform.txt
-> szukamy zmiennej compiler.path
-> zmieniamy ją na tak: compiler.path=C:\Works\hardware\Arduino_STM32\tools\arm-none-eabi-gcc\7-2017-q4\bin\
-> zapisujemy

Od tej chwili seria płytek opartych na STM32F1xx powinna korzystać z naszego kompilatora.
Sprawdźmy, uruchamiamy Visual Studio i tworzymy testowy projekt i kompilujemy.

No i prosze , chyba nie wymaga komentarza zdjęcie wyżej. (zakładam że wiecie jak posługiwać się IDE do programownaia....)
Aby nie zaginąć w akcji polecam nazywać projekty jak ja to zrobiłem , wtedy wiemy co do czego i jak skonfigurowane...

Jak wyżej widać na zdjęciu od początku mamy tworzone przez nas projekty i wiemy od razu na jakie płytki są pisane.
następnie mamy:
hardware - to katalog praktycznie z całym naszym arduino, jest tam komplet do ESPów oraz STMów


libraries - w tym katalogu znajdować się będą nasze dodatkowe libsy, czy te ściągnięte z internetów czy te nasze co napiszemy. Wszystkie one będą widoczne na każdym rodzaju arduino. z tego co pamiętam można w pliku konfiguracyjnym libsa wskazać na jakie płytki jest przeznaczony, ale myślę że #ifdef ... #define wystarczy aby libs inaczej działał na wybranych płytkach.

Jak jesteśmy przy bibliotekach, od razu ostrzegam że może 5% libsów krążących w internecie do pobrania jest napisanych tak że dodajemy do projektu i używamy, pozostałe 95% niestety nieraz wymagają poprawek, można znaleźć błędy typowo programisty oraz surowe podejście do sprzętu bez kompilacji warunkowej. Więc trzeba być czujnym

No dobrze ... pozostało nam jeszcze projekt wgrać do naszego STMa

pomimo że są tam do wyboru metody upload to ja nie widziałem żeby było można do STM32F103RBT6 wgrać Jlink-iem skompilowany program.
jak dobrze się rozejrzymy w katalogu C:\Works\hardware\Arduino_STM32\tools\win niby widać że jest obsługa Jlinka , nawet STlinka (< nie sprawdzałem)
Podam tu gotową recepturę jak zmusić aby jlinkiem również wgrać do STM32F103RBT6.
Oczywiście potrzebujemy kompletną instalacje do obsługi Jlink od SEGGERa , ja mam ją w katalogu:
C:\Program Files (x86)\SEGGER\JLink_V614b
No to edytujemy otwieramy sobie
C:\Works\hardware\Arduino_STM32\tools\win\jlink_upload.bat
Kod: Zaznacz cały
rem: @echo off
rem: Note %~dp0 get path of this batch file
rem: Need to change drive if My Documents is on a drive other than C:
set driverLetter=%~dp0
set driverLetter=%driverLetter:~0,2%
%driverLetter%
cd %~dp0
rem: the two line below are needed to fix path issues with incorrect slashes before the bin file name
set tmpBinFilePath=%1
set tmpBinFilePath=%tmpBinFilePath:/=\%
rem: create commander script file with the tmp bin that the Arduino IDE creates
@echo erase > %tmpbinfilepath%.jlink
@echo loadbin %tmpbinfilepath% , 0x8000000 >> %tmpbinfilepath%.jlink
@echo r >> %tmpbinfilepath%.jlink
@echo q >> %tmpbinfilepath%.jlink
JLink.exe -device STM32F103C8 -if SWD -speed auto -CommanderScript %tmpBinFilePath%.jlink
Zmieniamy ją na:
"C:\Program Files (x86)\SEGGER\JLink_V614b\JLink.exe" -device %2 -if SWD -speed auto -CommanderScript %tmpBinFilePath%.jlink
i zapisujemy

To tak nie do końca my podajemy ten drugi parametr, musimy wrócić do naszego już edytowanego :
C:\Works\hardware\Arduino_STM32\STM32F1\platform.txt
na samym szarym końcu tego pliku odszukajmy zmienną tools.jlink_upload.upload.pattern
i zmieniamy na tak żeby wyglądała ta linijka:
tools.jlink_upload.upload.pattern="{path}/{cmd}" "{build.path}/{build.project_name}.bin" {upload.devname}
dopisaliśmy drugi argument {upload.devname} do naszego wcześniej zmodyfikowanego skryptu jlinka. eh
Ta {upload.devname} to zmienna która swoją zawartość przyjmuje w pliku:
C:\Works\hardware\Arduino_STM32\STM32F1\boards.txt
tutaj dopiero trzeba namieszać

za dużo chyba niema się co rozpisywać, bo struktury tego pliku już sami twórcy nie potrafią okiełznać

Kod: Zaznacz cały
genericSTM32F103C.menu.device_variant.STM32F103C8.upload.devname=STM32F103C8
genericSTM32F103C.menu.device_variant.STM32F103CB.upload.devname=STM32F103CB
genericSTM32F103R.menu.device_variant.STM32F103R8.upload.devname=STM32F103R8
genericSTM32F103R.menu.device_variant.STM32F103RB.upload.devname=STM32F103RB
genericSTM32F103R.menu.device_variant.STM32F103RC.upload.devname=STM32F103RC
genericSTM32F103R.menu.device_variant.STM32F103RE.upload.devname=STM32F103RE
genericSTM32F103R.menu.upload_method.jlinkMethod=JLink
genericSTM32F103R.menu.upload_method.jlinkMethod.upload.protocol=jlink
genericSTM32F103R.menu.upload_method.jlinkMethod.upload.tool=jlink_upload
genericSTM32F103R.menu.upload_method.jlinkMethod.build.upload_flags=-DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1 -DSERIAL_USB -DGENERIC_BOOTLOADER
Wracamy do naszego otwartego projektu w Visual Studio i tutaj żeby nasze zmiany zostały zauważone przez VS należy wykonać dwie czynności
najpierw:

oraz wybrać inną płytkę i wrócić z powrotem do Generic STM32F103R series .
Po czym następnie wybieramy uploadmethod: powinniśmy już widzieć JLink.
No to testujmy upload jlinkiem do STM32F103RBT6 podłączonym przez SWD.

No i proszę bardzo... nasz JLink wgrał arduinowy program do STM32 z serii RB.
Jak by się komuś chciało dopisać obsługę innej płytki i innego STM32 to należy postępować tak jak ja zrobiłem przy Generic STM32F103rb... dopisać cały upload method zmienijąc nazwy płytek oraz STMów.
Tutaj muszę wspomnieć taką sytuacje z twórcą tego CORE STMowego, bo sugerowałem te poprawki w oficjalnym repo, oraz poprawka w nazewnictwie katalogów przy bibliotece spi.cpp, niestety twórca stwierdził że to działa wszystko... Trzeba te poprawki sobie samemu zrobić.
Oczywiście należy jeszcze zwrócić uwagę na jeszcze jedną sprawe, otóż co jakiś czas wychodzi aktualizacja tego CORE do STM32, i warto sobie kopiować te nowe, są poprawiane niektóre błedy itd, albo dodawane są nowe płytki. Wtedy trzeba te poprawki które tu zasugerowałem wprowadzić ponownie.
Na tym myslę że mogę zakończyć swój krótki tutorial, ale chyba było warto. Takie biblioteki w formacie Arduino oraz całe podejście do programowania dopiero zaczyna mieć sens właśnie na tych mikrokontrolerach które wyżej instalowaliśmy obsługę. Podstawowym czynnikiem jest ilość dostępnej pamięci RAM, i jak to było w przypadku Atmegi że co najwyżej jakiś termostat albo w ogóle wąskie zastosowanie było możliwe tak teraz można od interpretera java po serwer http czy inne cuda śmiało napisać


Życzę udanych blinków
