# STM32低消費電力モード完全ガイド｜CR2032で年単位のバッテリー駆動を実現する設計術｜テクノスフィア

> STM32L4のRun/Sleep/Stop 0/1/2/Standby/Shutdown 全7モードを公式アプリケーションノートをもとに体系解説。HAL APIの使い方、ウェイクアップ設計、CR2032での寿命試算、実務で踏みがちな6つの落とし穴まで網羅した保存版ガイド。

URL: https://technosphere.co.jp/blog/stm32-low-power-battery

** 目次
1. はじめに：バッテリー駆動 IoT の設計課題
2. STM32L4 の7つの電力モード階層
3. モード別の代表的な消費電流（参考値）
4. HAL API 早見表とコード例
5. ウェイクアップ手段の選び方
6. 低消費電力ペリフェラル（LPUART / LPTIM / RTC）
7. バッテリー寿命を伸ばす実装の落とし穴 6選
8. バッテリー寿命の試算（CR2032 でのセンサーノード例）
9. 発展編：STM32U5 / WL / WB の進化
10. 公式リソース・参考文献
11. まとめ
    ** 本記事の数値について

本記事に記載する消費電流の数値は、ST 社の公式ドキュメント（アプリケーションノート・データシート・トレーニング資料）を参照した **代表的な参考値** です。実際の設計値は、お使いの品種の最新データシート（例：STM32L476 → **DS10198 Table 17 "STM32L476xx modes overview"**）と動作条件（VDD、温度、SYSCLK、ペリフェラル構成）で必ずご確認ください。本記事の最後に出典の正式番号と URL をまとめてあります。

## はじめに：バッテリー駆動 IoT の設計課題

 「コイン電池で5年動くセンサーノードを作ってほしい」「単三電池2本で10年保つLPWAN端末を量産したい」——こうした要件は、IoT 案件ではもはや珍しくありません。ハードウェア選定の段階で **低消費電力マイコンの選択肢として真っ先に挙がるのが STMicroelectronics の STM32L シリーズ** です。

 なかでも **STM32L4 / L4+** は ARM Cortex-M4F コアを搭載しながら超低消費電力モードを多段に持ち、性能と省電力のバランスに優れることから世界中で採用されています。さらに最新の **STM32U5**（Cortex-M33）は LPBAM（Low-Power Background Autonomous Mode）で DMA さえも Stop モード中に自律動作させられる進化を遂げています。

 ただし STM32L4 の電力モードは **7段階**（Run / LP Run / Sleep / LP Sleep / Stop 0/1/2 / Standby / Shutdown）あり、各モードで動作するペリフェラル・ウェイクアップ手段・メモリ保持有無が異なります。「とりあえず Stop モードに入れた」程度の実装ではコイン電池駆動でも数日でバッテリが尽きてしまうことも珍しくありません。

 本記事では **STM32L4 シリーズ**を主軸に、ST 公式のアプリケーションノート（AN4621・AN4746・AN4899 ほか）とリファレンスマニュアル（RM0351）をもとに、年単位のバッテリー駆動を実現する設計ノウハウを体系的に解説します。基礎となる UART/I2C/SPI 通信や DMA 活用は、当ブログの以下記事も併せてご覧ください。
- [STM32マイコンのUART・I2C・SPI・CAN通信 実装ガイド](https://technosphere.co.jp/blog/stm32-uart-i2c-can)
- [STM32 DMA 完全ガイド｜UART・SPI・ADC との連携](https://technosphere.co.jp/blog/stm32-dma-complete-guide)
- [STM32 + FreeRTOS 入門](https://technosphere.co.jp/blog/stm32-freertos-intro)
  ** 弊社での活用実績

弊社では STM32L4 ベースの低消費電力センサーロガー・産業 IoT 端末・医療機器など [多数の組込み開発実績](https://technosphere.co.jp/embedded-achievements) があります。本記事はその実案件で蓄積したノウハウと、ST 公式ドキュメントの検証結果をもとに作成しています。

## STM32L4 の7つの電力モード階層

STM32L4 / L4+ は、用途と消費電流のトレードオフに応じて 7 つの低消費電力モードを選択できます。(出典: AN4621 §1, §2 / RM0351 §5 PWR)
|  # | モード | レギュレータ | CPU | 主クロック | フラッシュ |
| 1 | **Run** | Main (Range 1/2) | 動作 | MSI/HSI16/HSE/PLL | Active |
| 2 | **Low-Power Run** | Low-Power Regulator (LPR) | 動作 (≤2MHz) | MSI ≤2MHz | Active |
| 3 | **Sleep** | Main | WFI/WFE で停止 | 維持 | Active or PD |
| 4 | **Low-Power Sleep** | LPR | 停止 | ≤2MHz | Active or PD |
| 5 | **Stop 0** | Main 維持 | 停止、全クロック停止 | LSE/LSI のみ | OFF |
| 6 | **Stop 1** | LPR | 停止 | LSE/LSI のみ | OFF |
| 7 | **Stop 2** | LPR（低リーク） | 停止 | LSE/LSI のみ | OFF |
| 8 | **Standby** | OFF（SRAM2 保持はオプション） | Reset | LSE/LSI のみ | OFF |
| 9 | **Shutdown** | OFF（BOR も OFF） | Reset | LSE のみ | OFF |

### 選び方の指針
- **Run / Sleep：**高速処理が必要な能動的な区間。Sleep は CPU だけ止まりペリフェラル・DMA は継続動作
- **Low-Power Run / LP Sleep：**通信や演算を SYSCLK ≤2 MHz で粘りたい時。レギュレータが低消費版に切り替わる
- **Stop 0 / 1 / 2：**センサー測定間の長い待機。**RAM とレジスタを保持**するため、復帰時にプログラム状態が継続できる
- **Standby：**RTC で次回起動を待つ運用。**原則リセット起動**（SRAM2 は RRS=1 で 32 KB だけ保持可）
- **Shutdown：**最も低消費。BOR/IWDG/LSI まで停止する代わりに、復帰は POR と同等
  ** Stop 0 / 1 / 2 はどう違うのか
- **Stop 0：**メインレギュレータが ON のままで残るため、Stop からの**復帰時間が最短**。消費は他の Stop より大きい
- **Stop 1：**レギュレータが LPR に切り替わる標準的な Stop。多くの応用で第一候補
- **Stop 2：**VCORE 領域のリーク電流を最小化する超低消費 Stop。**USART/I2C/SDMMC 等の一部ペリフェラルが使えなくなる**制約あり。RTC・LPTIM・LPUART (HSI16/LSE) は動作可

センサー測定間の待機なら **Stop 2** が基本。応答時間に余裕がなく高速復帰が必要なら Stop 0、その中間が Stop 1 と覚えると整理しやすいです。(出典: AN4621 §3 / RM0351 §5.3)

## モード別の代表的な消費電流（参考値）

STM32L4 系の代表値オーダー（VDD、温度、クロックなど条件で大きく変動）を以下に示します。**実設計には必ず該当品種のデータシート（DS10198 等）の Table 17 「modes overview」を参照** してください。
| モード | 条件（参考） | typ. 電流オーダー | 用途の典型 |
| Run (Range 1) | 80 MHz | 数 mA ～ 十数 mA | 通常動作・通信中 |
| Run (Range 2) | ~26 MHz 以下 | 数百 µA ～ 数 mA | 軽負荷の連続動作 |
| LP Run | ~2 MHz | ~ 100 µA オーダー | 低速で粘る制御 |
| Sleep (80MHz) | ペリフェラル動作中 | ~ 数 mA | DMA 受信待ちなど |
| LP Sleep | ~2 MHz | ~ 数十 µA | ISR 待機など |
| Stop 0 | VDD=3.0V, 25℃ | ~ 100 µA オーダー | 高速復帰が必要な短時間待機 |
| Stop 1 | VDD=3.0V, 25℃ | ~ 数 µA | 通常の Stop 待機 |
| Stop 2 | VDD=3.0V, 25℃, RTC ON | ~ 1 µA オーダー | センサーノードの長時間待機の本命 |
| Standby | VDD=3.0V, RTC OFF | ~ 100 nA オーダー | RTC アラームまで完全停止 |
| Shutdown | VDD=1.8V | ~ 数十 nA | 最低消費・状態保持不要 |

※ 上表は STM32L432・L476 などの公式データシートと STMicroelectronics の "STM32L4 System Power Control" トレーニング資料を参照した **オーダー感把握用の参考値** です。VDD、温度、SRAM 保持有無、ペリフェラル状態で大きく変わるため、最終設計値は最新データシートの Table 17 を必ずご確認ください。  ** 「Stop 1 vs Stop 2」は1桁違うことが多い

大雑把には **Stop 1 → Stop 2 で消費電流が約 1/数** ～ 1/数十程度になります。一方で Stop 2 では使えないペリフェラルがあるため、要件で **Stop 2 が使えるなら必ず Stop 2 にする** のが定石です。Standby までいくと nA オーダーまで落ちますが、RAM 失効・リセット復帰の代償があります。

## HAL API 早見表とコード例

STM32CubeMX が生成する HAL ライブラリで使う低消費電力 API を、最も使う順にまとめます。(出典: STM32CubeL4 stm32l4xx_hal_pwr.c / stm32l4xx_hal_pwr_ex.c)
| 関数 | 用途 |
| `HAL_PWR_EnterSLEEPMode(Regulator, Entry)` | Sleep / LP Sleep |
| `HAL_PWREx_EnterSTOP0Mode(Entry)` | Stop 0 |
| `HAL_PWREx_EnterSTOP1Mode(Entry)` | Stop 1 |
| `HAL_PWREx_EnterSTOP2Mode(Entry)` | Stop 2 |
| `HAL_PWR_EnterSTANDBYMode()` | Standby |
| `HAL_PWREx_EnterSHUTDOWNMode()` | Shutdown |
| `HAL_PWREx_EnableLowPowerRunMode()` | LP Run へ移行 |
| `HAL_PWR_EnableWakeUpPin(PinPolarity)` | WKUP ピン有効化 |
| `HAL_SuspendTick() / HAL_ResumeTick()` | SysTick 停止/再開（Stop 進入前後） |

### Stop 2 → RTC で 10 秒後にウェイクアップ（典型パターン）

```
/* main.c：初期化後にこの関数を呼ぶ */
void EnterStop2_With_RtcWakeup_10s(void)
{
    /* SysTick が起こす割り込みで Stop に入れない事故を防ぐ */
    HAL_SuspendTick();

    /* RTC Wakeup Timer：LSE/16 = 2048Hz をベースに 10秒 ≒ 20480 カウント */
    HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
    HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 20480, RTC_WAKEUPCLOCK_RTCCLK_DIV16);

    /* Stop 2 に入る（復帰要因は WFI、RTC IT で起きる） */
    HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);

    /* ----------------- ここからウェイクアップ後 ----------------- */

    /* Stop から戻ると SYSCLK は MSI（典型 4 MHz）になっている。
       必要なら SystemClock_Config() を呼んで PLL を復帰させる */
    SystemClock_Config();

    HAL_ResumeTick();
}

/* RTC Wakeup 割り込みコールバック（HAL が呼ぶ） */
void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
{
    /* 必要に応じてフラグセット。基本は空でも問題なし */
}
```

### Standby → WKUP1 (PA0) と RTC アラームで復帰

```
void EnterStandby_With_WakeupPin_And_RtcAlarm(void)
{
    /* WKUP フラグを必ずクリア（残っていると即時復帰する） */
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

    /* WKUP1 (PA0) を High エッジで有効化 */
    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_HIGH);

    /* RTC アラーム A も併用（例：日次起動） */
    /* RTC_AlarmTypeDef alarm = {...}; HAL_RTC_SetAlarm_IT(...) */

    /* SRAM2 を保持したい場合はここで RRS ビットを立てる */
    /* HAL_PWREx_EnableSRAM2ContentRetention(); */

    HAL_PWR_EnterSTANDBYMode();
    /* ここに戻ってくることは無い。次回起動は POR 相当（リセット） */
}
```

   ** Stop から戻ったときのクロック

Stop モードから復帰すると、SYSCLK は **MSI（典型 4 MHz）** に切り替わります。PLL で 80 MHz 動作している案件は、復帰直後に必ず `SystemClock_Config()` 相当を呼び直してクロックを復元してください。これを忘れると UART のボーレートが狂う・タイマーが想定外の周期になる、といったトラブルになります。(出典: RM0351 §6 RCC / AN4621 §4)

## ウェイクアップ手段の選び方

低消費電力モードからどの手段で起きるかは、システム要件で決まります。下表は STM32L4 で利用可能な主要なウェイクアップ要因と、各モードでの対応状況をまとめたものです。(出典: AN4621 §4 "Wake-up sources" / RM0351 §5.4)
| ウェイクアップ要因 | Sleep | Stop 0/1/2 | Standby | Shutdown |
| 任意の EXTI（GPIO 割り込み） | ○ | ○ | × | × |
| WKUP ピン（PWR_CSR） | ○ | ○ | ○ | ○ |
| RTC Alarm A/B | ○ | ○ | ○ | ○（LSE 必須） |
| RTC Wakeup Timer | ○ | ○ | ○ | ○（LSE 必須） |
| RTC Tamper / Timestamp | ○ | ○ | ○ | ○ |
| LPUART 受信（RX） | ○ | ○ | × | × |
| LPTIM（周期 IT） | ○ | ○ | × | × |
| COMP（アナログ閾値） | ○ | ○ | × | × |
| IWDG リセット | (常時) | ○ | ○ | × |
| NRST | ○ | ○ | ○ | ○ |
| BOR（Standby 用） | - | - | ○ | × |

### WKUP ピンの割り当て（STM32L4 系）

WKUP は最大 5 本（WKUP1～WKUP5）。代表的なピン割り当てを以下に示しますが、**品種により WKUP3/WKUP5 のピン番号が異なる**ため、必ず該当品種データシートの Pinout 表で確認してください。(出典: AN4621 §4.4 / RM0351 §5.4.3 / DS10198 Table 16 など)
- **WKUP1：**PA0
- **WKUP2：**PC13
- **WKUP3：**PE6 または PA1（品種依存）
- **WKUP4：**PA2
- **WKUP5：**PC5
  ** ウェイクアップ選択のクイックガイド
- **定期測定（数秒～数時間周期）：**RTC Wakeup Timer を Stop 2 / Standby と組み合わせる
- **外部イベント駆動（ボタン・センサー閾値）：**EXTI または WKUP ピン + Stop / Standby
- **外部からの通信受信を待つ：**LPUART を HSI16/LSE クロックに設定して Stop モード受信ウェイクアップ
- **アナログ閾値（電圧監視）：**COMP を EXTI 経由で Stop からウェイクアップ
- **独立した周期ハートビート：**LPTIM を LSE 駆動で Stop 中も自律カウント

## 低消費電力ペリフェラル（LPUART / LPTIM / RTC）

STM32L4 は **「Low-Power」プレフィックス**を持つ専用ペリフェラルで、Stop モード中もメインクロックなしで動作できます。バッテリー駆動設計の主役です。

### LPUART：Stop モード中の通信受信待機

LPUART は **HSI16 または LSE クロックで動作可能**な UART で、Stop 0/1/2 のいずれでも受信ウェイクアップが可能です。(出典: RM0351 §38 LPUART / STM32CubeL4 LPUART_WakeUpFromStop 例)
- LSE（32.768 kHz）駆動時は **最大 9600 bps** 程度まで
- HSI16 駆動時は最大 高速通信可（ただし Stop からウェイクアップ目的なら省電力のため LSE を選ぶことも多い）
- Stop モードに入る前に `HAL_UARTEx_EnableStopMode(&hlpuart1)` を呼ぶ必要あり
- ウェイクアップ要因は「アドレスマッチ」「スタートビット検出」「Read Data Register Not Empty」から選択

```
/* LPUART を Stop ウェイクアップ用に有効化 */
HAL_UARTEx_EnableStopMode(&hlpuart1);

/* スタートビット検出でウェイクアップする設定（HAL_UARTEx_WakeUpType を使う） */
UART_WakeUpTypeDef wake_cfg = { .WakeUpEvent = UART_WAKEUP_ON_STARTBIT };
HAL_UARTEx_StopModeWakeUpSourceConfig(&hlpuart1, wake_cfg);

/* Stop 1 に入る（LPUART RX で復帰可能） */
HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);
```

### LPTIM：Stop モード中の周期タイマー

LPTIM は LSE（32.768 kHz）駆動で Stop モード中も自律的にカウントし、周期割り込みで CPU を起こせます。RTC より細かい周期（ms オーダー）が必要な場合の選択肢です。(出典: AN4865 "LPTIM applicative use cases")

```
/* LPTIM1 を LSE 駆動、1秒周期で割り込み */
HAL_LPTIM_TimeOut_Start_IT(&hlptim1,
    32768,   /* Period: 32768 = 1秒 (LSE 32.768kHz) */
    32767);  /* Pulse: タイムアウト後トグル */

/* Stop 2 に入る（LPTIM IT で復帰） */
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);

/* コールバック */
void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)
{
    /* 周期処理 */
}
```

### RTC + VBAT：完全停電時もカレンダーを維持

RTC（リアルタイムクロック）は LSE クロック + バックアップドメインで動作し、VBAT 端子にコイン電池を接続することで **VDD が完全に落ちてもカレンダーとバックアップレジスタを維持** できます。(出典: AN4759 "RTC and TAMP" / RM0351 §38 RTC)
- **VBAT 端子：**典型的には CR2032 / CR1632 のコイン電池を接続。VDD 喪失時にバックアップドメインだけが VBAT から給電される
- **バックアップレジスタ：**STM32L4 系は **32 × 32-bit（BKP0R - BKP31R、計 128 バイト）**。電源断後も VBAT 動作中は保持
- **LSE：**VBAT で動作可能 → Shutdown でも RTC 継続
- **LSI：**VBAT では動作しない → Shutdown では止まる
- **Wakeup Timer：**16 bit カウンタ。ck_spre(1Hz) 基準では約 18 時間、WUCKSEL の拡張ビット（実質 17 bit）を使うと最長約 36 時間まで指定可能

## バッテリー寿命を伸ばす実装の落とし穴 6選

低消費電力の数値スペックを満たしても、実装の細部が原因で「カタログ値の 10 倍消費している」という事態は珍しくありません。ST 公式 AN や現場で繰り返し見る典型ポイントを 6 つ整理します。

### 1. 未使用 GPIO のアナログ入力化

STM32 の GPIO はデフォルトの「Floating Input」だとシュミットトリガが微妙な電圧で発振し、リーク電流の原因になります。**未使用ピンはすべて Mode=Analog, Pull=NoPull** に設定してください。STM32CubeMX には「Set unused GPIOs as analog」オプションがあります。(出典: AN4899 §6.1 "GPIO settings for low-power")

### 2. デバッガ接続時は Stop / Standby から復帰できない（ように見える）

デバッグ中は `DBGMCU_CR` レジスタの **DBG_STOP / DBG_STANDBY ビット**がセットされ、クロックが維持されてしまいます。これにより**実機の消費電流が測れない**うえ、デバッガ切断後と挙動が変わります。実消費の検証時は、必ずデバッガを外し、フラッシュ書き込み後の cold boot で測定してください。(出典: RM0351 §47 DBG / community.st.com 多数)

### 3. SysTick が STOP 移行を妨害する

HAL のタイムベースが SysTick の場合、移行直前に SysTick 割り込みがペンディングしていると Stop モードに入れず即時復帰してしまいます。次のいずれかで対処します。(出典: STM32CubeL4 examples / 国内技術ブログでも頻出)
- Stop に入る直前に `HAL_SuspendTick()`、復帰後に `HAL_ResumeTick()`
- または STM32CubeMX の **SYS タブで Timebase Source を TIM6 等の汎用タイマー**に変更（FreeRTOS 併用時はそもそも変更が必要）

### 4. Sleep / LP Sleep 中のフラッシュ Power-down

Sleep モード中でもフラッシュは Active のままで微小に電力を消費します。SYSCLK を 2 MHz 以下に落としたうえで `__HAL_FLASH_SLEEP_POWERDOWN_ENABLE()` を呼ぶと、フラッシュをパワーダウンさせて更に消費を削減できます。**復帰時間が長くなる**代償があるため、応答時間要件と照らして判断してください。(出典: RM0351 §3.3.7 / AN4621 §4.2)

### 5. VREFINT・BOR・PVD の常時 ON によるリーク

内蔵リファレンス電圧 (VREFINT)、ブラウンアウトリセット (BOR)、プログラマブル電圧検出 (PVD) はいずれも微小ながら消費します。使わないなら確実に OFF にします。BOR は Standby 移行時に **Ultra-Low-Power BOR モード（ULPMEN）**に切り替えて消費を抑えるオプションもあります。(出典: RM0351 §5.1.2 PWR / community.st.com)

```
/* VREFINT を Stop モードで OFF */
HAL_PWREx_DisableVREFINTInStopMode();

/* Standby 中の BOR を超低消費モードに */
HAL_PWREx_EnableUltraLowPowerMode();
```

### 6. ペリフェラル CLK enable の残し

使い終わったペリフェラル（USART、SPI、ADC、DMA など）のクロックを `__HAL_RCC_xxx_CLK_DISABLE()` で確実に切ること。クロックが入っていると Stop モードでも微小リークが残り、複数ペリフェラル分が積み上がって µA 単位の差を生みます。(出典: AN4746 §4 / AN4621 §4)  ** 実測のすすめ

低消費電力設計は **必ず実機で実測** してください。Nordic 製や JOULESCOPE などの µA レンジ電流計、もしくは STMicroelectronics の **STM32CubeMonitor-Power**（STLINK-V3PWR 等と組み合わせ）で時間軸付きで電流波形を見ると、想定外のスパイクや未消化のリークを発見できます。データシート値はあくまでも理想条件です。

## バッテリー寿命の試算（CR2032 でのセンサーノード例）

具体的な計算例として、コイン電池 **CR2032（公称 230 mAh、3.0V）** で温湿度センサーノードを動作させる場合を考えます。(出典: AN4746 §5 "Application use case" を参考に独自試算)

### 基本式（duty cycle 法）

```
平均消費電流 I_avg = (I_active × t_active + I_sleep × t_sleep) / (t_active + t_sleep)
動作可能時間 [h] = 電池容量 [mAh] × デレーティング係数 / I_avg [mA]
```

### ケース 1：1 分周期でセンサー読み + 無線送信
- Active：センサー読み出し + 送信処理を 1 秒で完了 → **15 mA × 1 s**
- Sleep：Stop 2 で待機 → **1.5 µA × 59 s**

```
I_avg = (15 × 1 + 0.0015 × 59) / 60
      ≒ 0.252 mA
動作時間 = 230 mAh / 0.252 mA ≒ 913 h ≒ 38 日
```

### ケース 2：1 時間周期に間引いた場合
- Active：同じ 15 mA × 1 s
- Sleep：Stop 2 で 3599 秒待機

```
I_avg = (15 × 1 + 0.0015 × 3599) / 3600
      ≒ 5.67 µA
動作時間 = 230 mAh / 0.00567 mA ≒ 40,600 h ≒ 4.6 年
```

   ** 試算時に忘れがちな補正項
- **自己放電：**CR2032 は年 1% 程度。10 年使うなら 10% の容量を予め差し引く
- **温度補正：**コイン電池は -20℃ で公称容量の 60～70% 程度に低下する。屋外設置案件では重要
- **遮断電圧：**STM32L4 の VDD min は約 1.71V（BOR0 設定時）。コイン電池は 3.0V → 2.0V まで使えるが、レギュレータと外付け回路の動作下限を必ず確認
- **ピーク電流：**CR2032 の内部抵抗は 10～40Ω と高めなので、BLE 送信時（数十 mA）の電圧ドロップで瞬断する可能性あり。**大容量コンデンサの並列が必須**（典型 10～100 µF）
- **起動・スリープ遷移コスト：**Stop → Run の復帰時にスパイクが出る。長周期で何度も遷移する設計では遷移コストの実測が必要

ST 公式サイトには **「STM32 Real-Time Clock Battery Life Calculator」** など、簡易計算ツールも公開されています。設計初期はこうしたツールでオーダー感を掴み、最終評価は必ず実機実測で確認してください。

## 発展編：STM32U5 / WL / WB の進化

STM32L4 をベースに、用途に応じてより新しいシリーズを選ぶケースが増えています。

### STM32U5（Cortex-M33、最新フラッグシップ）
- **4段階の電圧 Range**（最大 160 MHz）。L4 の 2 Range より細かく性能/消費を最適化可能
- **Stop 3** が新設され、Stop 系の最低消費電力モードが追加
- **LPBAM（Low-Power Background Autonomous Mode）：**Stop 中も DMA + ペリフェラルが自律動作してデータ収集可能。CPU を起こさずセンサー連続サンプリングが実現できる L4 にない最大の進化点 (出典: AN5645 / AN5652)

### STM32WL（LoRa 一体型、Cortex-M4 + M0+）
- サブ GHz Radio がチップ内蔵。CPU が Stop に入っていても Radio は独立動作可能
- LPWAN 端末（LoRaWAN/Sigfox）でコイン電池 5 年動作が現実的に (出典: AN5568)

### STM32WB（BLE 5、Cortex-M4 + M0+）
- BLE スタックは M0+ コアが処理。M4 はアプリケーション専用に
- SMPS（スイッチング電源）を内蔵し、送信時の消費電流を最小化 (出典: AN5246 "Usage of SMPS")

### シリーズ選定のクイックガイド
- **有線 IoT・低コスト：**STM32L0 / L1（M0+/M3）または STM32L4（M4F）
- **性能・セキュリティ重視：**STM32U5（M33 + TrustZone）
- **BLE 内蔵：**STM32WB（BLE 5）
- **LoRa / Sub-GHz：**STM32WL

## 公式リソース・参考文献

本記事執筆にあたり参照した ST 公式ドキュメントです。**実設計では必ず最新版をご参照ください**。

### STM32L4 ターゲットの主要 Application Note
- **AN4621** – STM32L4 and STM32L4+ ultra-low-power features overview
 [st.com → AN4621 PDF](https://www.st.com/resource/en/application_note/an4621-stm32l4-and-stm32l4-ultralowpower-features-overview-stmicroelectronics.pdf)
- **AN4746** – How to optimize power and performance on STM32L4 and STM32L4+ MCUs
 [st.com → AN4746 PDF](https://www.st.com/resource/en/application_note/an4746-how-to-optimize-power-and-performance-on-stm32l4-and-stm32l4-mcus-stmicroelectronics.pdf)
- **AN4555** – Getting started with STM32L4 series hardware development
 [st.com → AN4555 PDF](https://www.st.com/resource/en/application_note/an4555-getting-started-with-stm32l4-series-and-stm32l4-series-hardware-development-stmicroelectronics.pdf)
- **AN4759** – Introduction to using the RTC and TAMP for STM32 MCUs
 [st.com → AN4759 PDF](https://www.st.com/resource/en/application_note/an4759-introduction-to-using-the-hardware-realtime-clock-rtc-and-the-tamper-management-unit-tamp-with-stm32-mcus-stmicroelectronics.pdf)
- **AN4865** – How to use Low-power timer (LPTIM) on STM32 MCUs
 [st.com → AN4865 PDF](https://www.st.com/resource/en/application_note/an4865-how-to-use-lowpower-timer-lptim-on-stm32-mcus-and-mpus--stmicroelectronics.pdf)
- **AN4899** – STM32 GPIO hardware settings and low-power consumption
 [st.com → AN4899 PDF](https://www.st.com/resource/en/application_note/an4899-stm32-microcontroller-gpio-hardware-settings-and-lowpower-consumption-stmicroelectronics.pdf)

### Reference Manual / Datasheet
- **RM0351** – STM32L47/L48/L49/L4A reference manual
 [st.com → RM0351 PDF](https://www.st.com/resource/en/reference_manual/dm00083560.pdf)
- **RM0394** – STM32L41/L42/L43/L44/L45/L46 reference manual
 [st.com → RM0394 PDF](https://www.st.com/resource/en/reference_manual/rm0394-stm32l41xxx42xxx43xxx44xxx45xxx46xxx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf)
- **RM0432** – STM32L4+ series reference manual
 [st.com → RM0432 PDF](https://www.st.com/resource/en/reference_manual/rm0432-stm32l4-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf)
- **DS10198** – STM32L476 datasheet (消費電流テーブル Table 17 を含む)
 [st.com → DS10198 PDF](https://www.st.com/resource/en/datasheet/stm32l476rg.pdf)

### L5 / U5 / WB / WL の Application Note
- **AN5213** – STM32L5 ultra-low-power features overview
- **AN5652** – STM32U5 power optimization
- **AN5645** – STM32U5 LPBAM (Low-Power Background Autonomous Mode)
- **AN5568** – STM32WL ultra-low-power features
- **AN5246** – STM32WB SMPS usage

### Wiki / Training / コミュニティ
- [ST Wiki – PWR feature overview](https://wiki.st.com/stm32mcu/wiki/PWR_feature_overview)
- [STM32L4 System Power Training (英語)](https://www.st.com/resource/en/product_training/stm32l4_system_power.pdf)
- [STM32L4 システム電力制御 (日本語)](https://www.st.com/resource/ja/product_presentation/06.stm32l4-system-power-wspc-control-wspc-(pwr)-wspc-final_jp.pdf)
- [STM32CubeL4 公式サンプル（GitHub）](https://github.com/STMicroelectronics/STM32CubeL4)
- [stmcu.jp – Standby と Shutdown モードの違い](https://www.stmcu.jp/technical/hint/no-117/)

## まとめ

###  この記事のまとめ
- STM32L4 は **7段階の低消費電力モード** を持ち、用途別に細かく最適化できる
- センサーノードの長時間待機には **Stop 2 + RTC Wakeup Timer** がまず第一候補
- 状態保持が不要なら **Standby**、究極の低消費なら **Shutdown**（LSE 必須）
- LPUART・LPTIM・RTC は Stop モード中も動作可能で、ウェイクアップ手段の主役
- 未使用 GPIO のアナログ化、デバッガ非接続での実測、SysTick の停止、Flash Power-down など **6つの落とし穴** を押さえる
- カタログ値ではなく **必ず実機で実測**（µA レンジ電流計や STM32CubeMonitor-Power）
- 1 時間周期のセンサーノード設計で CR2032 から **4 年級の動作**が現実的に狙える
- 新規設計なら **STM32U5（LPBAM）** や **WL/WB** も視野に

STM32 を使った低消費電力 IoT 端末・バッテリー駆動センサーノードの設計でお困りのことがあれば、弊社にお気軽にご相談ください。STM32L4 / U5 系を含めた組込み開発実績をもとに、要件定義から回路設計・ファームウェア実装・実機消費電流評価まで一貫してサポートします。

STM32 を使った電池駆動 IoT 端末の設計から量産、既存機器の低消費電力化、実機消費電流評価まで [組込み制御・マイコン開発](https://technosphere.co.jp/embedded) として対応しています。   ／この内容の受託開発・PoC相談はこちら＼

### STM32 + バッテリー駆動デバイスの受託開発

Stop / Standby / Shutdown モードを駆使した数年駆動の IoT センサー、ウェアラブル、屋外監視装置の設計をテクノスフィアが対応します。電池容量試算から PoC・量産化まで一気通貫。  [組込み開発サービスを見る](https://technosphere.co.jp/embedded) [バッテリー駆動設計相談](https://technosphere.co.jp/contact)

## よくある質問（FAQ）   ** バッテリー駆動のSTM32でセンサー測定間の待機にはどのモードを使うべきですか？

Stop 2が定番です。µAオーダーまで消費電流を下げつつ、RTCウェイクアップ・WKUPピン・LPUART受信などで復帰できます。「Stop 2で待機し、RTCで周期的に起きて測定する」パターンがバッテリー駆動IoTの典型構成です。   ** Stopモード中でもUARTの受信を待てますか？

LPUARTを使えば可能です。LPUART・LPTIM・RTCはStopモード中も動作可能な低消費電力ペリフェラルで、LPUARTをHSI16/LSEクロックで動かしておけば受信をトリガーにStopモードから復帰できます。   ** 各電力モードの正確な消費電流はどこで確認すべきですか？

最終判断は必ずデータシートで行ってください。品種ごとのデータシートに電力モード別一覧表（STM32L476ならDS10198のmodes overview表）があり、温度・電圧・ペリフェラル条件ごとの値が記載されています。記事中の数値は条件を揃えた参考値です。   ** 電源が完全に落ちても時計を維持するにはどうしますか？

RTCをVBAT端子のバックアップ電源（コイン電池等）で動かします。メイン電源が落ちてもRTCとバックアップレジスタは保持されるため、復電後もカレンダー・時刻を引き継げます。     # STM32 # STM32L4 # 低消費電力 # バッテリー駆動 # IoT # Standby # Stop # LPUART # LPTIM # RTC

##   次に読む｜STM32 シリーズ記事
-  [STM32 シリーズ STM32マイコンのUART・I2C・SPI・CAN通信 実装ガイド HALライブラリで通信ペリフェラルを使いこなす定番ガイド](https://technosphere.co.jp/blog/stm32-uart-i2c-can)
-  [STM32 シリーズ STM32 + FreeRTOS 入門 タスク・キュー・セマフォを使ったRTOS実装ガイド](https://technosphere.co.jp/blog/stm32-freertos-intro)
-  [STM32 シリーズ STM32 DMA 完全ガイド｜UART・SPI・ADCとの連携 CPU負荷を最小化するDMA活用の決定版](https://technosphere.co.jp/blog/stm32-dma-complete-guide)
-  [開発実績 組込み制御・マイコン開発 実績紹介 バッテリー駆動IoT端末を含む多数の受託開発事例](https://technosphere.co.jp/embedded-achievements)
    [技術コラム一覧に戻る](https://technosphere.co.jp/blog/)
