STM32(に限らず恐らくほぼすべてのARMマイコン)では,マイコンがプログラムを実行している間,PCでそれを監視したり,任意のタイミングでその実行を一時停止し,マイコン内部の状態を調べたりということができます.これをin-circuit debugなどと呼んだりします.ST-LINKはSWD(Serial Wire Degub)という規格を用いてSTM32マイコンと通信し,PCからのIn-circuit debuggingを可能にします.

デバッグ用の関数

[[前回>プロジェクトの作成]]作成したプロジェクトには,初期状態でデバッグに使用できる有用な関数がいくつか定義されています.以下にそれらの関数を列挙します.これらはいずれも,デバッガを通じて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にそれぞれ対応します.
trace_dump_argsは,(恐らく)main関数の引数をダンプするようですが,調査中です.

ちなみに,これらの関数はUARTなどを使わず,SWD経由でPCにデータを送信します.従って,AVRでprintfデバッグをする時とは違い,USBシリアル変換器が不要となります.

デバッグの実践

 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.      }  }

最終更新:2016年10月01日 00:33