PCB上にピンヘッダ(未実装)がある。
- SWDIO
- SWCLK
- GND
- NRST
- VCC (使わない)
SWD (Serial Wire Debug) 用のもの。ここに ST-Link を繋ぐ。ST-Link といっても中華 ST-Link だけど、こういう感じになる。
VCC 以外を接続する。VCCは普通に電源をオンにして供給する。
事前条件
普通に make して build できる環境にしておく。arm-none-eabi-gcc が入っていればよい。
open-ocd は brew で入るデフォルトではなく、head を入れる必要がある。なぜか texinfo が要求されて死んだので前もって入れたほうがよさそう。
brew install texinfo brew install open-ocd --HEAD
VSCode
普段は vim を使っているが、CUI デバッガは個人的にはつらいので、こういうときは VSCode を使う。
VSCode を入れたのち Cortex-Debug extension を入れて使う。VSCode を開いて、Extensions から検索して Install するのが最速。
tasks.jsonを書く
make を呼ぶようにしておく
{ "tasks": [ { "type": "shell", "label": "build", "command": "make", "args": [ ], "options": { "cwd": "${workspaceRoot}" } } ], "version": "2.0.0" }
launch.json を書く
stlink を使って stm32f0x をデバッグするので以下のようにする。また、デバッグ前に build するようにする。
{ "version": "0.2.0", "configurations": [ { "type": "cortex-debug", "servertype": "openocd", "request": "launch", "name": "OpenOCD-Debug", "executable": "build/ch.elf", "configFiles": [ "interface/stlink.cfg", "target/stm32f0x.cfg" ], "cwd": "${workspaceRoot}", "preLaunchTask": "build", } ] }
デバッグ開始する
Debug を開いて Start Debugging (F5) をする。ビルドしたのち、しばらくする (デバイス側にビルドしたファームが転送される) とデバイス側の画面は白くなり、リセットハンドラでブレークするので、適当な場所にブレークポイントを置いて resume する。
svd ファイルを指定する
追加で SVD (System View Description) ファイル (ST のサイトからダウンロードできる を指定しておく。
"svdFile": "./STM32F0x8.svd",
MCU のレジスタがわかりやすく表示される
備考
OpenOCD の cfg の場所
/usr/local/share/openocd/scripts/
にある。結構 deprecated になっているものも置いたままだったりする。stlink.cfg は ST-Link のバージョンに関係なく共通で使えるものになっている。
リソース