Nucleo J-Link化

STM32の開発でJ-Linkというデバッガーがよさそうらしいので
手元のNucleoで試してみる。

準備

今回試すのはNucleo-F401、
ST-Linkの基板が隣にくっついているので
このST-Link部分をJ-Linkにして、
STM32F401REに書き込み、デバッグしてみる。

メインループ
STM32Cube MXのmain.cにあるメインループに書き足す。

while (1)
{
  /* USER CODE END WHILE */
  HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
  HAL_Delay(1000);
  /* USER CODE BEGIN 3 */
}

J-Link化

何はともあれNucleoのST-Link部分をJ-Linkにすることが必要。
https://www.segger.com/downloads/jlink/#STLink_Reflash
f:id:katakanan:20190330010542p:plain

ST-Link書き換え用のソフトウェアを手に入れる。

Nucleoをつなげるとデバイスマネージャーには
ST-Link V2などが認識されている。

STLinkReflash.exeを起動していくつかの同意事項を確認した後、
書き込みを行う。

f:id:katakanan:20190330011002p:plain
バイスマネージャーには以下のようになる。
f:id:katakanan:20190330011340p:plain

J-Linkソフトウェアをインストール

https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack
J-Link Software and Documentation Packを入れた。
f:id:katakanan:20190330013445p:plain

J-Link GDB Server Config

f:id:katakanan:20190330013339p:plain
Nuckleoベースだったので、USBでつなげている。
MCUを選択。
SWDでつながっている(SWDIOとSWCLK)

J-Link GDB Server起動

f:id:katakanan:20190330013936p:plain
起動すると、GDBからの接続待機になる。

arm-none-eabi-gdb

WSLから

arm-none-eabi-gdb test.elf
target remote localhost:2331

GDBの”waiting for connection”が緑になる。
f:id:katakanan:20190331115300p:plain
あとは

load
continue

でelfが書き込まれた後に、
実行が始まる。
continue前に

b HAL_GPIO_TogglePin

とすれば、ここで実行が停止する。
f:id:katakanan:20190331115820p:plain

Amazonでj-linkのデバッガーを探したが
そのものはなかった。
代わりに以下のモジュールにはj-Link Lite SEGGERがついてくるらしい。