Podłączyliśmy programator ST-LINK (przez SWD) do naszego BluePilla, działa ArduinoIDE, ale STM32IDE się buntuje, ponieważ nie rozpoznaje naszego BluePilla i przy próbie uruchomienia debuggera jest błąd? Jest na to sposób.
Piny włączone w CubeMX
Po pierwsze, aby debugger działał trzeba włączyć CubeMX w System Core -> SYS -> Mode: Debug: SERIAL WIRE (timebase source SysTick) oraz pozostawić piny PA13 (SWDIO) i PA14 (SWCLK) włączone. Bez tego SWD nie zadziała. Co więcej, jeśli nie ustawimy tego poprawnie, STM32 SWD się zablokuje i aby go zaprogramować trzeba przestawić zworkę 1 na programowanie i wgrać oprogramowanie przez FTDI.
FTDI z STM32CubeIDE
Jest możliwe wgrywanie kodu wygenerowanego w STM32CubeIde przez FTDI. W tym celu trzeba pobrać ze strony ST-Link program Flasher:
https://www.st.com/en/development-tools/flasher-stm32.html
(w tym celu trzeba podać swój email na tej stronie).
Po zainstalowaniu i uruchomieniu: podajemy port COM X (reszta na pierwszej planszy jest domyślna), jeśli programator zostanie wykryty na drugiej planszy trzeba zmienić wersję STM32 na 64kB, na trzeciej wybieramy plik *.hex wygenerowany w CubeMX (zaznacz erase przy koniecznych rekordach tylko) i rozpoczynamy flashowanie, po zakończeniu pasek zaświeci się na zielono.
Pliki hex nie są generowane automatycznie – trzeba ustawić odpowiednią opcję w CubmeMX IDE.
Problem z rozpoznawalnością chipu STM32
Debugger wykrywa, że nasz STM32F103 nie jest rozpoznawalny (kopia?), w celu włączenia go mimo to:
W katalogu c:\ST szukamy pliku
stm32f1x.cfg
Np. może to wyglądać tak:
1 | c:\ST\STM32CubeIDE_1.4.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.debug.openocd_1.4.0.202007081208\resources\openocd\st_scripts\target\stm32f1x.cfg |
Szukamy bloku
#jtag scan chain
Zmieniamy wartość set CPUTAPID w DRUGIM BLOKU na
1 | set _CPUTAPID 0x2ba01477 |
Teraz będzie wyglądać tak:
1 2 3 4 5 6 7 8 9 10 11 12 | #jtag scan chain if { [info exists CPUTAPID] } { set _CPUTAPID $CPUTAPID } else { if { [using_jtag] } { # See STM Document RM0008 Section 26.6.3 set _CPUTAPID 0x3ba00477 } { # this is the SW-DP tap id not the jtag tap id 0x1ba01477 set _CPUTAPID 0x2ba01477 } } |
Teraz projekt prawym klawiszem myszy klikamy, Debug as -> Debugger Configurations -> Debugger zmieniamy: Debug probe na z ST-LINK na ST-LINK OCD.
Teraz normalnie: projekt prawym -> Debug As -> STM32…
Działa.
Tu można poczytać o tym problemie:
https://stackoverflow.com/questions/58783393/atollic-couldnt-verify-st-device