たくさんあるSTM32 Nucleoシリーズの中から自分に合ったものを選ぶ

STM32 NucleoはArduinoと同等な価格・アクセシビリティでありながら、ARMを使ったOS寄りなコードで動かせるので便利な時は便利。ただ毎回「たくさんある中のどのモデルがよいのか」で小一時間悩んでしまう、というか情報を見つけるのに手間取る。

そこでSTM32全体のシリーズ構成とともに、どういうときにどのNucleoが良さそうかを選べる指針となるようなページを作っておこうと思う。

# 大まかな指針

1. **クロック周波数**: 番号が大きいもの、High-performanceをうたったタイプ (たとえば`F3...`, `F4...`, `F7...`シリーズ)の方が速い
2. **フラッシュメモリサイズ**: 型番の最後の記号が大きいほうが大きい(たとえば`...8`よりは`...A`や`...C`の方が大きい)
3. **ADCの数**: 基本的には、ピン数の多いMCUの載ったもの (`...Rx`とか`...Vx`とか`...Zx`といった記号で終わる型番)のほうが多い
4. **DACの数**: モデルによる
5. **タイマの数**: モデルによる
6. **消費電力**: `L`ではじまるシリーズ、とくに`-P`で終わるシリーズがよい


# STM32 シリーズ構成

ST microelectronicsのページには、この画像がある：

![STM32 シリーズ構成](https://www.st.com/content/ccc/fragment/product_related/class_information/class_level_diagram/group0/1b/96/39/54/20/23/46/bf/stm32_cl1734/files/stm32_cl1734.jpg/_jcr_content/translations/en.stm32_cl1734.jpg)

- シリーズごとに計算能力が違う（最初の画像の横軸）。能力が下がるほど、一般には安価。
- メインストリーム以外でも、より特定用途に最適化したモデルが存在する（High-performanceやLow-powerのように）
- STM32 NucleoでカバーされているMCUは、すべてのSTM32から見るとほんの一部。

具体的なラインナップ（2019年1月現在; 型番はNucleoになっているもののみ）：

## Mainstream

エントリーモデル的な位置付け。

- 多くのモデル（F1以外）にDACとコンパレータを標準装備
- ADCの数もそこそこ（F1以外）。

|シリーズ |Nucleo-32 |Nucleo-64 |Nucleo-144 |
|--------|----------|----------|-----------|
|F0 |F031K6, F042K6 |F030R8, F070RB, F072RB, F091RC| × |
|G0 | × |G070RB, G071RB | × |
|F1 | × |F103RB | × |
|F3 |F301K8, F303K8 |F302R8, F303RE, F334R8 |F303ZE |

## High-performance

ハイエンド機（計算能力が強化されたモデル）。

- メインストリームよりもクロックが概して高速
- 確かFPUがついている（FPUはF3にもついている）
- 16bitタイマに加えて32bitタイマも標準装備。
- ただしDACやコンパレータは省かれている場合が多いので注意。

|シリーズ |Nucleo-32 |Nucleo-64 |Nucleo-144 |
|--------|----------|----------|-----------|
|F2 | × | × |F207ZG |
|F4 | × |F401RE, F410RB, F411RE, F446RE |F412ZG, F413ZH, F429ZI, F439ZI |
|F7 | × | × |F722ZE, F746ZG, F756ZG, F767ZI |
|H7 | × | × |H743ZI |

## Ultra low-power

計算能力と引き換えに省電力をうたったモデル。

- 概してクロック周波数が低い
- その他のスペックはメインストリームのモデルと遜色ないように見える

|シリーズ |Nucleo-32 |Nucleo-64 |Nucleo-144 |
|--------|----------|----------|-----------|
|L0 |L011K4, L031K6 |L010RB, L053R8, L073RZ | × |
|L1 | × |L152RE | × |
|L4 |L412KB, L432KC |L412RB-P, L433RC-P, L452RE, L452RE-P, L476RG |L496ZG, L496ZG-P |
|L4+ | × | × |L4A6ZG, L4R5ZI, L4R5ZI-P |
|L5 | × | × | × |

## Wireless

|シリーズ |Nucleo-32 |Nucleo-64 |Nucleo-144 |
|--------|----------|----------|-----------|
|WB | × | × | × |

# Nucleoの分類

## Nucleoの型番の読み方

大まかには、Nucleoの型番 ≒ STM32 MCUの型番。
型番はSTM32 MCUと同じものを使っている。

|桁 | 1+2 | 3+4 | 5 | 6 | 7 |
|---|:---:|:---:|:-:|:-:|:-:|
|意味|シリーズ名 |プロダクトID |ピン数（パッケージ） |フラッシュメモリサイズ | Nucleo拡張機能 |
|例|<strong>F3</strong>34R8|F3<strong>34</strong>R8|F301<strong>K</strong>8 (32ピン), F334<strong>R</strong>8 (64ピン), F207<strong>Z</strong>G (144ピン) |F031K<strong>6</strong> (32kB), F301K<strong>8</strong> (64kB) | L433RC<strong>-P</strong>|

## ピン数とフォームファクタ：Nucleo-32/64/144

型番の数字の後の"C"やら"R"やらは、大まかにはI/Oピンの本数で決まっている。

12-bit ADCの数も、これにある程度比例する形で決まっている。シリーズにもよるけれど、たとえば32ピンなら8–12個、64ピンなら15–25個、100ピン以上なら20–40個程度。

STM32 Nucleoには32ピン型(K)と64ピン型(R)、144ピン型(Z)のSTM32 MCUが載っていて、これに対応する形でNucleoにも3種類のフォームファクタがある。

おそらく一番メジャーなのはNucleo-64で、以下のような形（以下、いずれもSTMからのリンク）：
![Nucleo-64の形](https://www.st.com/content/ccc/fragment/product_related/rpn_information/board_photo/2e/4a/01/43/4f/fa/4a/3d/nucleo-F1.jpg/files/nucleo-F1.jpg/_jcr_content/translations/en.nucleo-F1.jpg)

これがNucleo-32：
![Nucleo-32の形](https://www.st.com/content/ccc/fragment/product_related/rpn_information/board_photo/e9/7d/15/6e/f8/73/4c/e1/mainstream_nucleo-32.jpg/files/mainstream_nucleo-32.jpg/_jcr_content/translations/en.mainstream_nucleo-32.jpg)

これがNucleo-144：
![Nucleo-144の形](https://www.st.com/content/ccc/fragment/product_related/rpn_information/board_photo/group0/22/8e/71/7e/a8/9a/43/61/high-perf_nucleo-144_mbed/files/high-perf_nucleo-144_mbed.jpg/_jcr_content/translations/en.high-perf_nucleo-144_mbed.jpg)

|文字 |MCUのパッケージ |
|-----|---------------|
|C |LQFP48 / UFQFPN48   |
|E |WLCSP25L   |
|F |TSSOP20  |
|G |UFQFPN28  |
|K |LQFP32 / UFQFPN32  |
|T |WLCSP36L  |
|R |LQFP64  |
|V |LQFP100 |
|Z |LQFP144 |

## フラッシュメモリサイズ

ピン数のIDの後にくる文字はフラッシュメモリのサイズを反映しているようだ。

|文字 |フラッシュサイズ |
|-----|---------------|
|6 |32kB   |
|8 |64kB   |
|B |128kB  |
|C |256kB  |
|D |384kB  |
|E |512kB  |
|F |768kB  |
|G |1024kB |
|H |1536kB |
|I |2048kB |

## Nucleo拡張機能

上記の例のように"-P"がつくボードにはDC/DCコンバータが内蔵されていて、RUN時（書き込んだプログラムを動かすとき）にはそこから給電する。電圧の無駄がなくなるので省電力になるようだ。


# 個別スペック（I/Oなど）

コメントは、64ピンモデルのNucleoのスペックを見て得た感想。

## Mainstream

### F0 series

「標準構成」のNucleo。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|F030R8 | 64 | Cortex-M0 | 48MHz | 7 |   | 16 |   |   |   |
|F031K6 | 32 | Cortex-M0 | 48MHz | 5 | 1 | 10 |   |   |   |
|F042K6 | 32 | Cortex-M0 | 48MHz | 5 | 1 | 10 |   |   |   |
|F070RB | 64 | Cortex-M0 | 48MHz | 8 |   | 16 |   |   |   |
|F072RB | 64 | Cortex-M0 | 48MHz | 8 | 1 | 16 | 1 | 2 | 2 |
|F091RC | 64 | Cortex-M0 | 48MHz | 8 | 1 | 16 | 1 | 2 | 2 |

### G0 series

標準構成でも、「計算多め」の方にステータスが振ってある。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|G070RB | 64 | Cortex-M0+ | 64MHz | 8 |   | 1 |   |   |   |
|G071RB | 64 | Cortex-M0+ | 64MHz | 10 | 1 |   |   | 2 | 2 |

### F1 series

「最小構成」モデル。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|F103RB | 64 | Cortex-M3 | 72MHz | 4 |   |   |   |   |   |

### F3 series

「標準構成」の高機能エディションで、FPUが積んである。計算能力高め、出力多め。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|F301K8 | 32 | 5 | 1 | 8 |   | 1 | 2 |
|F302R8 | 64 | 5 | 1 | 15 |   | 1 | 3 |
|F303K8 | 32 | 7 | 1 | 9 |   | 3 | 2 |
|F303RE | 64 | 9 | 1 | 22 |   | 2 | 7 |
|F303ZE | 144 | 10 | 1 | 40 |   | 2 | 7 |
|F334R8 | 64 | 7 | 1 | 12 |   | 3 | 3 |

## High-performance

### F2 series

ハイエンド系の中でも中間的なバランスのもの。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|F207ZG | 144 | 12 | 2 | 24 | × | 2 | × |

### F4 series

F2シリーズに比べてタイマ機能強化、出力少なめ。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|F401RE | 64 |Cortex-M4 |84MHz | 6 | 2 | 16 |   |   |   |
|F410RB | 64 |Cortex-M4 |84MHz | 6 | 2 | 16 |   |   |   |
|F411RE | 64 |Cortex-M4 |100MHz | 6 | 2 | 16 |   |   |   |
|F412ZG | 144 |Cortex-M4 |100MHz | 12 | 2 | 16 |   |   |   |
|F413ZH | 144 |Cortex-M4 |100MHz | 13 | 2 | 16 |   | 2 |   |
|F429ZI | 144 |Cortex-M4 |180MHz | 12 | 2 | 24 |   | 2 |   |
|F439ZI | 144 |Cortex-M4 |180MHz | 12 | 2 | 24 |   | 2 |   |
|F446RE | 64 |Cortex-M4 |180MHz | 12 | 2 | 16 |   | 2 |   |
|F446ZE | 64 |Cortex-M4 |180MHz | 12 | 2 | 24 |   | 2 |   |

### F7 series

F4よりさらに高速。I/OまわりはF4とほぼ同等。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|F722ZE | 144 |Cortex-M7 |216MHz | 12 | 2 | 16 |   | 2 |   |
|F746ZG | 144 |Cortex-M7 |216MHz | 12 | 2 | 24 |   | 2 |   |
|F756ZG | 144 |Cortex-M7 |216MHz | 12 | 2 | 24 |   | 2 |   |
|F767ZI | 144 |Cortex-M7 |216MHz | 12 | 2 | 24 |   | 2 |   |

### H7 series

最高速のモデル。I/Oまわりもメインストリーム系より充実。とくに16-bit ADCがついているのが特徴か。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|H743ZI | 144 |Cortex-M7 |400MHz | 18 | 2 |   | 20 | 2 | 2 |

## Ultra low-power

| シリーズ | コア | クロック周波数(最大) | 備考 |
|---------|------|---------------------|-----|
|L0 |Cortex-M0+ |32 MHz |M0コアの標準モデル |
|L1 |Cortex-M3 |32 MHz |タイマ機能・I/O多め |
|L4 |Cortex-M4 |80 MHz |計算能力強化モデル |
|L4+ |Cortex-M4 |80–120 MHz |L4をたぶんちょっと改良 |

### L0 series

L系の中の標準モデル。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|L010RB | 64 |Cortex-M0+ |32MHz | 3 |   |   |   |   | 2 |
|L011K4 | 32 |Cortex-M0+ |32MHz | 3 |   | 10 |   |   | 2 |
|L031K6 | 32 |Cortex-M0+ |32MHz | 4 |   | 10 |   |   | 2 |
|L053R8 | 64 |Cortex-M0+ |32MHz | 5 |   | 16 |   | 1 | 2 |
|L073RZ | 64 |Cortex-M0+ |32MHz | 7 |   | 16 |   | 2 | 2 |

### L1 series

L0に比べてタイマ機能・I/O多め。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|L152RE | 64 |Cortex-M3 |32MHz | 8 | 1 | 21 |   | 2 | 2 |

### L4 series

L0から計算能力（速度）を強化したモデル。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|L412KB(/RB-P) | 32(64) |Cortex-M4 |80MHz | 5 | 1 | 10 |  |   | 1 |
|L432KC(/RC-P) | 32(64) |Cortex-M4 |80MHz | 7 | 1 | 10 |  | 2 | 2 |
|L452RE(-P) | 64 |Cortex-M4 |80MHz | 8 | 1 | 16 |  | 1 | 2 |
|L476RG | 64 |Cortex-M4 |80MHz | 11 | 2 | 16 |  | 2 | 2 |
|L496ZG(-P) | 144 |Cortex-M4 |80MHz | 11 | 2 | 24 |  | 2 | 2 |

### L4+ series

L4を（たぶん）ちょっと改良したモデル。

| モデル | ピン数 | コア | クロック周波数 | 16-bitタイマ | 32-bitタイマ | 12-bit ADC | 16-bit ADC | 12-bit DAC | コンパレータ |
|-------|--------|------|--------------|-------------|--------------|------------|-------------|------------|------------|
|L4A6ZG | 144 |Cortex-M4 |80MHz | 11 | 2 | 24 |  | 2 | 2 |
|L4R5ZI(-P) | 144 |Cortex-M4 |120MHz | 11 | 2 | 16 |  | 2 | 2 |