Web制作、Web開発の歩き方

STM32入門(組み込み開発)

■第9話:最適化とデバッグ

(最終更新日:2025.02.16)

C言語のイメージ
この記事は5分で読めます!
(絵が小さい場合はスマホを横に)

「デバッグツールを上手に使おう」

組み込みシステム開発において、最適化とデバッグは不可欠なプロセスだ。 本章ではSTM32を例に取りながら、 デバッグツールの活用方法と低消費電力モードの効果的な使い方について詳しく解説する。


1.デバッグツールの活用法

デバッグツールを適切に使うことで、開発の効率を飛躍的に向上させることができる。 STM32の開発環境では、ブレークポイント、ステップ実行、CubeMonitor、SWV(Serial Wire Viewer)など、 強力なデバッグ機能が用意されている。


1.1 デバッグ機能(ブレークポイント、ステップ実行)

デバッグの基本となるのが、ブレークポイントとステップ実行だ。 IAR Embedded WorkbenchやSTM32CubeIDEでは、これらの機能を利用して、プログラムの動作を細かく検証できる。

ブレークポイント(Breakpoint)は、プログラムの特定の箇所で実行を一時停止させる機能だ。 使い方としては、バグが発生していると思われる箇所にブレークポイントを設定し、 プログラムを実行してブレークポイントで停止したら、変数やレジスタの値を確認する。

その際、ステップ実行(Step Over, Step Into)を行い、プログラムの流れを追いながら、バグの発生した箇所を特定する。 基本的な使い方は、Web開発やWindows向けのソフトウェア開発で使用されるデバッガーツールとほぼ一緒だ。 下記に使い方を簡単に記す。

    デバッガーツール、ステップ実行の活用
  1. Step Over(ステップオーバー): 関数を一気に実行し、次の行に進む
  2. Step Into(ステップイン): 関数の中に入って詳細な動作を確認
  3. Step Out(ステップアウト): 関数から抜けて元の呼び出し元へ戻る

ステップ実行は、プログラムを1行ずつ実行しながらデバッグできる機能で、 これらの機能を駆使することで、意図しない動作をしている箇所を特定しやすくなる。

1.2 CubeMonitorやSWVでの動作確認

ブレークポイントやステップ実行に加え、CubeMonitorやSWV(Serial Wire Viewer)を活用すると、リアルタイムでシステムの動作を解析できる。 CubeMonitorは、STM32マイコンの動作をリアルタイムでモニタリングできるツールだ。 主な機能としては、変数のリアルタイム可視化、イベントトリガー、複数の変数を同時観測などがある。 CubeMonitorを使うことで、デバッグのために一時停止せずに、システムの挙動をモニタリングできる。 特に、リアルタイム処理を行う場合に有効になる。

一方、SWVは、STM32のデバッグインターフェース(SWD: Serial Wire Debug)を使い、CPUの動作をリアルタイムで解析できる機能だ。 変数の値をリアルタイムでトレースしたり、イベントの発生タイミングを測定したり、電力消費やCPU負荷を可視化することができる。 例えば、シリアル通信のデータの流れや、割り込みの発生タイミングを解析するのに便利である。

2.低消費電力モードの活用

組み込み機器では、特にバッテリー駆動時に低消費電力モードを適用することが重要だ。 STM32では、用途に応じてスリープモードやスタンバイモードを使い分けることで、消費電力を大幅に削減できる。

2.1 スリープモードとスタンバイモードの違い

スリープモードとスタンバイモードの違いを以下の表にまとめる。 スリープモードでは、CPUは停止するが、ペリフェラル(UART、タイマー)は動作が可能である。 一方、スタンバイモードではCPUとメモリが停止し、最低限の回路のみが動作する。

表:スリープモード、スタンバイモード

モード 消費電力 CPU RAM ウェイクアップ時間 主な用途
スリープモード 低い 一時停止 維持 短い 短時間のアイドル時
スタンバイモード 非常に低い 停止 消去(保持可能) 長い 長時間の待機
2.2 スリープモードの実装

スリープモードの移行は、HALを使うことで簡単に実装することができる。 下記のコードになる。PWR_MAINREGULATOR_ONはメインレギュレータを維持、PWR_SLEEPENTRY_WFIは割り込みが入るまで待機を意味する。 このモードでは、割り込みが発生するとすぐに復帰できる。

スリープモードの実装

2.3 スタンバイモードの実装(HALライブラリを使用)

スタンバイモードへの移行も、HALを使うことで簡単に実装することができる。 RTCタイマーや外部ボタンで復帰可能である。下記のPWR_WAKEUP_PIN1はその外部ボタンにあたる。 また、SRAMの内容は保持されない。長時間待機する場合に有効な方法だ。

スリープモードの実装

3.バッテリー駆動の実践例

STM32をバッテリーで動作させる場合、以下のような工夫をすると電力消費を抑えられる。

  1. 不要なペリフェラルを無効化:I2C、SPI、ADCなど未使用の機能をオフにする
  2. 低消費電力クロックを使用:HSEではなくMSIやLSEを活用
  3. 通信間隔を最適化:BLEやWi-Fiの送信間隔を最適化
  4. 省電力モードを適切に使う:アイドル時はスリープ、長時間待機はスタンバイ

具体的な応用例としては、ワイヤレスセンサーモジュール(定期的に測定し、データを送信するときのみ動作)、 スマートウォッチ(ユーザー操作時のみ画面をオンにし、操作がないときは低消費電力モード)などが挙げられる。

4.まとめ

デバッグツールを活用し、リアルタイムでプログラムの挙動を解析することで、開発効率を向上させることができる。 また、低消費電力モードを適切に設定することで、バッテリー駆動時の動作時間を延ばすことが可能だ。 本章の内容を活かして、デバッグと最適化をスムーズに進めていこう。

▼参考図書、サイト

STM32マイコン公式日本語サイト  STマイクロエレクトロニクス
 「WindowsではじめるSTM32」 インプレスR&D 山本 小鉄