STM32(に限らず恐らくほぼすべてのARMマイコン)では,マイコンがプログラムを実行している間,PCでそれを監視したり,任意のタイミングでその実行を一時停止し,マイコン内部の状態を調べたりということができます.これをin-circuit debugなどと呼んだりします.ST-LINKはSWD(Serial Wire Degub)という規格を用いてSTM32マイコンと通信し,PCからのIn-circuit debuggingを可能にします.
この項は,講座を一通り終わらせてから学習すべき...かも.
ところで,プログラミングを初めるとき,まず最初に書くのは"Hello World"でしょう.
なので,本講座ではまず最初に,デバッグチャンネルからHello Worldを出力するプログラムを書きます.
デバッグ用の関数
前回作成したプロジェクトには,初期状態でデバッグに使用できる有用な関数がいくつか定義されています.以下にそれらの関数を列挙します.これらはいずれも,デバッガを通じてPCに情報を送信するもので,プログラムの実行を止めることなくプログラムに異常がないかを調べることができます.所謂printfデバッグ.
int trace_printf(const char* format, ...)
int trace_puts(const char *s)
int trace_putchar(int c)
void trace_dump_args(int argc, char* argv[])
trace_printf,trace_puts,trace_putcharはそれぞれ,C言語の標準ライブラリに定義されるprintf,puts,putcharにそれぞれ対応します.
ちなみに,これらの関数はUARTなどを使わず,SWD経由でPCにデータを送信します.従って,AVRでprintfデバッグをする時とは違い,USBシリアル変換器が不要となります.
自動生成されたmain関数に,次のようにtrace_puts関数の呼び出しを加えます.
int main(int argc, char* argv[])
{
// At this stage the system clock should have already been configured
// at high speed.
trace_puts("Hello, the world of STM32 ARM microcontrollers!");
// Infinite loop
while (1)
{
// Add your code here.
}
}
最初のビルド
変更を加えたプログラムをビルドしてみましょう.
メニューのProject -> Build all またはビルドのアイコンをクリックしてビルドします.
ビルドエラーが発生しなければ次のステップに進みます.
デバッグの設定
次はPC側でデバッグの設定をしていきます.
メニューの Run -> Debug Configurations... または虫のアイコンを選択して,デバッグの設定画面を開きます.
画面左側の GDB OpenOCD Debugging という項目をダブルクリックして,現在開いているプロジェクトのためのデバッグ設定を新規追加します.
画面右側の Main のタブから, C/C++ Application の欄に正しくプログラムファイルが指定されているか確認します.何も書いてない場合は Search project... から,プログラムファイルを指定します.
画面右側の Debugger のタブから,デバッガの設定が正しいことを確認します.
Config Optionsの欄に
-s "${openocd_path}\..\scripts" -f interface/stlink-v2.cfg -f target/stm32f1x.cfg
と書いてあることを確認してください.
ST-LINK/V2-1を使用する場合は
-s "${openocd_path}\..\scripts" -f interface/stlink-v2-1.cfg -f target/stm32f1x.cfg
と書いてあることを確認してください.
デバッグの実践
設定が完了したら,デバッグ機能が正常に動作することを確認します.
ターゲット(マイコン)の電源を入れ,デバッガ(ST-LINK)をマイコンとPCに接続します.
再びデバッグ設定画面を開き,先程追加したデバッグ設定を選択して右下のDebugを押します.
するとデバッグが開始されます.main関数の中括弧がハイライトされ,その左側に青色の矢印が表示されているはずです.
これは,現在プログラムが実行されていて,その実行がメイン関数の手前で一時停止されていることを意味します.STM32の開発では,任意の行にブレークポイントを置くことで,その行の直前でプログラムの実行を一時停止させることができます.
main関数の手前には自動でブレークポイントが置かれます.先程のデバッグ設定画面から変更することもできます(詳細略).
プログラムの実行が一時停止された状態から再開するには,メニューのResumeアイコンを押すか,F8キーを押します.すると,プログラムの実行が再開され,eclipseの画面下部にあるConsole欄に
Hello, the world of STM32 ARM microcontrollers!
と出力されます.
これでHello Worldができました.簡単でしょ?
次回はLチカを書きながらGPIOの使用方法を学びます.
最終更新:2017年08月18日 17:17