OS X(Mavericks)にSTM32F4DISCOVERY用の開発環境を構築する(サンプル実行編)

前回ビルドしたサンプルプロジェクトの実行方法について説明する。
ST-LinkはSTM32のデバッガ&プログラマで、STM32F4DISCOVERYではジャンパピンの設定によりオンボードでST-Linkが利用できるようになっている。
openocdは、ST-Link経由のマイコンとのインターフェースをTCP/IP通信で提供するもので、gdbなどを用いたデバッグが容易にできる。

openocdの起動

openocdには使用するデバイスごとに詳細な設定を行う必要があるが、openocdをインストールすれば、その中にSTM32F4DISCOVERYへの設定ファイルが含まれているのでそれを利用すればよい。
起動するには、STM32F4DISCOVERYの上側のmini-USBポートとPCのUSBポートを接続した上で、Terminalで以下のコマンドを実行する。
(おそらく接続にはドライバのインストールが必要だと思われるが、ウチの環境では既にあるドライバが使われたのか、問題なく接続できた)

openocd -s ~/local/share/openocd/scripts/ -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg

(MacでSTM32F4-Discoveryの開発環境を構築してChibiOS/RTを動かすより引用)
起動すると、以下のようなメッセージが表示される。

Open On-Chip Debugger 0.8.0-dev-00361-gbc1340c-dirty (2014-03-02-21:12)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v14 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 2.892743
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints

一番最後の行で接続に成功したことがわかる。PCとマイコンが接続されていなければ以下のように表示される。

Info : This adapter doesn't support configurable speed
Error: open failed
in procedure 'transport'
in procedure 'init'

(最後の4行のみ抜粋)

gdbによるサンプルプロジェクトの実行

openocdを起動した状態で別のTerminalを起動し(あるいは新しいタブを開く)、ビルド済のサンプルプロジェクトの入ったフォルダで以下を実行する。

arm-none-eabi-gdb demo.elf

デバッガが起動し、以下のように表示される。

GNU gdb (GDB) 7.5.1
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin13.0.0 --target=arm-none-eabi".
For bug reporting instructions, please see:
...
Reading symbols from /Users/***/sample/demo.elf...done.
(gdb)

起動済みのopenocdに接続する。openocdのデフォルトの接続ポートは3333である。

(gdb) target extended localhost:3333
Remote debugging using localhost:3333
0x00000000 in ?? ()

(1行目の(gdb)以降のみ入力する。以下同様)
なお、上記のコマンドは、tar ext: 3333と省略できる。
マイコンをリセットし、停止させる。

(gdb) monitor reset halt
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08001e40 msp: 0x20020000

(mon reset haltと省略可)
demo.elfをマイコンに書き込む。

(gdb) load
Loading section .isr_vector, size 0x188 lma 0x8000000
Loading section .text, size 0x1d5c lma 0x8000188
Loading section .ARM, size 0x8 lma 0x8001ee4
Loading section .init_array, size 0x8 lma 0x8001eec
Loading section .fini_array, size 0x4 lma 0x8001ef4
Loading section .data, size 0x46c lma 0x8001ef8
Loading section .jcr, size 0x4 lma 0x8002364
Start address 0x8001e41, load size 9064
Transfer rate: 11 KB/sec, 1294 bytes/write.

リセットして実行する。

(gdb) monitor reset

STM32F4DISCOVERY上の下側中央にある4つのLEDが、緑→オレンジ→赤→青の順で点灯し、全消灯した後また点灯しはじめるというデモが始まる。
なお、一旦フラッシュに書き込んだプログラムは電源が切れても消えないため、電源オフ後に再度電源を入れるとデモが自動的に実行される。
次の記事ではサンプルプロジェクトのデバッグ方法について説明する予定である。