STLINK GDB Server
STの提供しているGDBサーバ、このアプリケーションを用いてターゲットデバイスとなるstm32をデバッグする。
アクセスポートID
GDBサーバのマニュアルではapIDと表記されている。フォーラムではアクセスポイントと記載されることもあり。
-m <apID>, –apid <apID>という感じに指定する。
JTAGやSWDなどのデバッグインターフェースはターゲットデバイスのアクセスポートなる箇所をアクセスして内部のレジスタ情報にアクセスする。このアクセスポートIDなるものがSTM32のデバイスによっては異なる模様。
GDB Serverの起動時の引数としてapIDが指定可能だけど省略しても起動可能。デフォルトは0だと思われる。
どうやら1つのチップ内に複数のコアを持つようなH7デバイスだと気にする必要がある。
ただ、H563などの新しいデバイスに関してはシングルコアでもapIDを省略してはいけない(apIDが0ではない)ものがある。今回使ってみたstm32H563の場合、apIDは1だった。そんなのどこに書いてあるんだよという気持ち。
VSCodeでデバッグしようとしたとき、STLINKがターゲットデバイスを見つけられなくてこの問題に遭遇した。CubeProgrammerでは正常にターゲットデバイスとなるSTM32へアクセスできたため、ハードウェアの問題でないことは切り分けできていた。どうやら、CubeProgrammerでは内部で自動的にapIDを1に変更している模様。
stlink-gdb-server connection mode
stlink-gdb-server and Nucleo-H73SL8
Unable to flash Nucleo-H563ZI with STM32CubeIDE V1.14
どう調べるか
VSCodeでの設定
VSCodeでのlaunch.jsonの設定は以下のような感じ、STM32CubeCLTを入れている前提。
重要なのは、“serverArgs”の部分でGDB Serverをコマンドラインから起動するときと同じように引数を文字列として与える(1をダブルクォーテーションで囲っている)
この設定はH563なのでapIDが1の場合のものである。apIDが0のデバイスの場合、“serverArgs”を省略してもよい。
{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Debug App STLink", "cwd": "${workspaceFolder}", "executable": "./build/bldc_H563.elf", "request": "launch", "type": "cortex-debug", "servertype": "stlink", "interface": "swd", "device": "STM32H563ZI", "runToEntryPoint": "main", "svdFile": "${config:STM32VSCodeExtension.cubeCLT.path}/STMicroelectronics_CMSIS_SVD/STM32H563.svd", "serverpath": "${config:STM32VSCodeExtension.cubeCLT.path}/STLink-gdb-server/bin/ST-LINK_gdbserver", "stm32cubeprogrammer": "${config:STM32VSCodeExtension.cubeCLT.path}/STM32CubeProgrammer/bin", "stlinkPath": "${config:STM32VSCodeExtension.cubeCLT.path}/STLink-gdb-server/bin/ST-LINK_gdbserver", "armToolchainPath": "${config:STM32VSCodeExtension.cubeCLT.path}/GNU-tools-for-STM32/bin", "gdbPath": "${config:STM32VSCodeExtension.cubeCLT.path}/GNU-tools-for-STM32/bin/arm-none-eabi-gdb", "serverArgs": [ "-m", "1", ], "showDevDebugOutput": "raw" } ] }
