STM32入門(組み込み開発)
■第9話:最適化とデバッグ
(最終更新日:2025.02.16)
(絵が小さい場合はスマホを横に)
「デバッグツールを上手に使おう」
組み込みシステム開発において、最適化とデバッグは不可欠なプロセスだ。
本章ではSTM32を例に取りながら、
デバッグツールの活用方法と低消費電力モードの効果的な使い方について詳しく解説する。
1.デバッグツールの活用法
デバッグツールを適切に使うことで、開発の効率を飛躍的に向上させることができる。 STM32の開発環境では、ブレークポイント、ステップ実行、CubeMonitor、SWV(Serial Wire Viewer)など、 強力なデバッグ機能が用意されている。
1.1 デバッグ機能(ブレークポイント、ステップ実行)
デバッグの基本となるのが、ブレークポイントとステップ実行だ。
IAR Embedded WorkbenchやSTM32CubeIDEでは、これらの機能を利用して、プログラムの動作を細かく検証できる。
ブレークポイント(Breakpoint)は、プログラムの特定の箇所で実行を一時停止させる機能だ。
使い方としては、バグが発生していると思われる箇所にブレークポイントを設定し、
プログラムを実行してブレークポイントで停止したら、変数やレジスタの値を確認する。
その際、ステップ実行(Step Over, Step Into)を行い、プログラムの流れを追いながら、バグの発生した箇所を特定する。
基本的な使い方は、Web開発やWindows向けのソフトウェア開発で使用されるデバッガーツールとほぼ一緒だ。
下記に使い方を簡単に記す。
- デバッガーツール、ステップ実行の活用
- Step Over(ステップオーバー): 関数を一気に実行し、次の行に進む
- Step Into(ステップイン): 関数の中に入って詳細な動作を確認
- 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をバッテリーで動作させる場合、以下のような工夫をすると電力消費を抑えられる。
- 不要なペリフェラルを無効化:I2C、SPI、ADCなど未使用の機能をオフにする
- 低消費電力クロックを使用:HSEではなくMSIやLSEを活用
- 通信間隔を最適化:BLEやWi-Fiの送信間隔を最適化
- 省電力モードを適切に使う:アイドル時はスリープ、長時間待機はスタンバイ
具体的な応用例としては、ワイヤレスセンサーモジュール(定期的に測定し、データを送信するときのみ動作)、 スマートウォッチ(ユーザー操作時のみ画面をオンにし、操作がないときは低消費電力モード)などが挙げられる。
4.まとめ
デバッグツールを活用し、リアルタイムでプログラムの挙動を解析することで、開発効率を向上させることができる。 また、低消費電力モードを適切に設定することで、バッテリー駆動時の動作時間を延ばすことが可能だ。 本章の内容を活かして、デバッグと最適化をスムーズに進めていこう。
▼参考図書、サイト
STM32マイコン公式日本語サイト
STマイクロエレクトロニクス
「WindowsではじめるSTM32」 インプレスR&D 山本 小鉄