MicroPython、ソースからのビルド・シリーズも4回目。ラズパイPico用、Raspberry Pi 4用、SAMD21用とやってきて、今回はST Microelectronics社 STM32マイコン用です。ターゲットボードはNucleo F401RE。ビルド簡単、書き込み簡単。調子乗ってんじゃねえよ、自分。
※「MicroPython的午睡」投稿順 Indexはこちら
今回もクロス環境はWSL2使用
ラズパイPico用のクロスではRaspberry Pi 4を母艦にしましたが、前回SAMD21用(ターゲットボードは、Seeeduino Xiao、SAMD21G18マイコン搭載)からはWindows11上のWSL2(Ubuntu 20.04LTS)を使用しています。クロス環境のセットアップについては前回記事をご覧くだされや。
Pythonソースをバイトコードへコンパイルする mpy-cross については、SAM21だろうと STM32だろうと同じもので良いみたいなので、今回はmpy-cross作成後からの手順となります。
STM32の機種対応
micropython/ports/stm32/boards/ ディレクトリの中を調べたら60種以上のSTM32マイコン搭載ボードに対応していました。ある程度のメモリ容量を確保したボードには対応しているようです。その一部が以下に。
設定ファイルを自力で用意すればここにリストされていないボードでもメモリが許せば対応可能と思われます(がやってません。)今回ターゲットにするのは歴戦のNucleo-F401REボードであります。
ビルド
ビルド手順はSAMD21のときと変わりません。まずは micropythonディレクトリ配下のstm32マイコンのディレクトリに入ります。Makefileはそこにあります。
cd ports/etm32
手順は2ステップ
-
- submodulesのビルド
- 本体MicroPythonのビルド
これまたSAMD21同様、BOARD=~ の形でターゲットボード名を指定するとよきに計らってくれます。まず、submodulesの準備作業の様子の先頭部分が以下に。
問題なく上記が終わったら、今度は本体のビルドです。開始したところが以下に。
生成されたファイルは以下のようでした。
Nucleo-F401REボードへの書き込み
上記で dfu、elf、hex、bin と4種類もオブジェクトファイルを準備してくれてます。今回ボードへの書き込みに使用したのは .hex です(モトローラSフォーマットかと予想してファイルの中を覗いてみたら、まさかのインテル形式みたい。)
ビルドまではWSL2でしたが書き込みはWindows11からです。MbedOSなどのオブジェクトを書き込むために Nucleoボードをセットアップしてあれば(ST社のST-Linkドライバをインストール済ということ)、Nucleo-F401REボードをUSBに接続した瞬間にストレージとして認識され、Windowsのドライブとして見えると思います。Windows上からもWSL2のファイルは見えるので、フツーにHEXファイルをドラッグ&ドロップすればFlashへの書き込みOKでした。
起動後、伝統のTeratermで接続。ボーレートは115200bps、8N1です(MbedOSのデフォルトは9600bpsなので、Nucleoボードの場合、いつも9600設定で使っているのですが、MicroPythonは違います。)
REPLから見える、MicroPythonのバージョンが以下に。しっかりNUCLEO-F401REと表示されとります。
このバージョンmに含まれるモジュールを眺めてみると以下のようでした。
そのなかで stm という、いかにもSTM32マイコン用のモジュールがあるのでimportして中身を眺めてみてます。上記はその先頭部分のみ。内部には大量の定数が定義されてます。ほぼほぼSTM32マイコンのペリフェラルを直接操作するための定数のようです。他のマイコン用のMicroPythonではあまりこの手の「サービス」は無かったのでちょっとうれしいかもしれません。mem関数使うか、uctypesモジュールを使えば直接のハードウエアが制御がやり放題?