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

C, STM32