STM32C011 を使ってみるテスト
これまた、秋月電子で取り扱いの始まった、低価格 STM32 マイコンである STM32C011 を使ってみるテスト。
はじめに
STM32C0 シリーズは 2023 年にリリースされた STM32 マイコンの中でも最低価格帯に属する製品です。 ST は「8/16bit マイコンのリプレースの置き換えに」などと謳っています。
この中でも今回つかう STM32C011J4/F4 は一番メモリの小さな製品で、16KiB フラッシュ& 6KiB RAM となっています。 まえに取り上げた 8bit マイコン AVR64DD よりも少ないです。
その代わり値段も安く抑えられていて、秋月電子で 140 / 160 円となっております。 CH32V のような中華マイコンよりは高めですけど、いかに安いかはわかるかと思います。
CPUコアは Cortex-M0+ の 48MHz で、低価格 32bit マイコンとしては標準的かとおもいます。 消費電力が少ないのも特徴です。
3.3V 48MHz 内部クロック時(AVR64DD は 24MHz)の消費電力を比べてみますと、以下の通りです。 大体 CH32V003 の半分くらいですね。 Shutdown モードに落とすと NRST でしか復帰できませんが、究極的に電力を節約できます。
mode | STM32C011 | CH32V003 | AVR64DD |
---|---|---|---|
Run Mode | 3.4mA | 6.57mA | 4.7mA |
Sleep Mode | 1.2mA | 4.39mA | 2.3mA |
Stop Mode | 80μA | N/A | N/A |
Standby Mode | 7.45μA | 8.76μA | 0.65μA |
Shutdown Mode | 19nA | N/A | N/A |
ピン配置など
データシートはここですね。 https://www.st.com/resource/en/datasheet/stm32c011d6.pdf ST は枝番ごとにデータシート分けてるからめんどい。
ピン配置は以下になります。SOP8 版
TSSOP20版はこちら
PA13が SWIO、PA14 が SWCLK なので、SOP8 版の場合、7番と8番のピンを書き込み機につなぐことになります。 マイコン自体は 3.3V 動作ですが、全 IO ピンに 5V 耐性があります。
おやくそく
STM32 なので STLink が書き込みに必要です。たぶん中華互換機でもOKでしょう。
今回は、STM32-Nucleo の上半分(の STLink V2相当)を使っています。
Arduino
まずはお手軽環境ということで、Arduino から使ってみます。 STM32 の Arduino サポートは、過去にはいくつかライブラリが存在したのですけど、 ST 公式のArduino_Core_STM32 ライブラリが STM32 シリーズを広範囲にサポートしています。
Arduino IDE の環境設定の「追加のボードマネージャの URL」に次の行を追加します。
https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
あとはボードマネージャから「STM32 MCU based boards」をインストールします。
コアの設定はこうなっています。STM32C011J4 の設定がなかったので、F4 を選択しています。
いつものように Blink を使います、LED_BUILTIN が何処になっているのかわからなったので、明示的に PA8 (5番ピン)を指定しています。
12KiB はでかい。メモリ喰いすぎ。
設定で Serial をオフにすると現実的なサイズになります。
STM32CubeIDE
次に公式開発環境である CubeIDE を使ってみます。
File → New → STM32 Project で Target Selection の画面が開くので、MCU/MPU Selector から STM32C011J4M6
を選びます。
HAL で PA11 をチカチカするコードです。
4488B ですね。つぎは LL API を使います。
3684B まで小さくなりました。 RAM の方はヒープ領域に 1.5KiB とられているようなので、リンカの設定を変えないとこれ以上は小さくならないかと思います。
まとめ
- STM32 の最新&最小マイコン STM32C011 を使ってみた
- Arduino でも開発できるけど、メモリ喰いすぎであまり実用的ではない
- Serial は使う時だけオンにする
- CubeIDE ならもう少しコードサイズを小さくできる
- できれば LL API を使うと最小になる
- いままで STM32 を使ったことのない人には、ちょっとハードルが高いかも?