STM32F407VE/G ボードでの MicroPython
<STM32F407VE/G ボードの概要>
手持ちのSTM32F407VE/Gのチップを搭載したものは次の2種類で、
ボード上へのMicroPythonの導入コードも紹介されていましたので
調べて見ました。その時の状況は次の様なものでした。
[STM32F407VEボード]
1.搭載されているCPUはSTM32F407VET6 (512kB Flash,
192+4kB SRAM)
2.ボードに付加されているもの
ミニUSBポート、SDカードスロット、NRF2401ソケット、
フラッシュメモリ、電池ケース
3.使用電源電圧1.8V~3.6V
4.ボードサイズ 73mmx85mm
[STM32F407VGボード]
1.搭載されているCPUはSTM32F407VGT6 (1MB Flash,
192+4kB SRAM)
2.ボードに付加されているもの
マイクロUSBポート
3.使用電源電圧1.8V~3.6V
4.ボードサイズ 46mmx58mm
[解説ビデオ]
<関連資料>
1.STM32F407VEボード
URL : https://github.com/mcauser/BLACK_F407VE/blob/master/docs/STM32F407VET6_schematics.pdf
https://os.mbed.com/users/hudakz/code/STM32F407VET6_Hello/shortlog/
2.STM32F407VEボードへのMicroPythonの導入
URL : https://github.com/mcauser/BLACK_F407VE
3.STM32F407VGボード
URL : http://dubstylee.net/v/diy-more-stm32f407vgt6/
4.STM32F407GVボードへのMicroPythonの導入
URL : https://github.com/BLavery/STM32F407VG-Micropython
<作業内容>
STM32F407VE/GボードへMicroPytnonを導入する時の作業は次の
ものでした。
1.Linuxでのファームウェアの作成
2.MicroPythonへ対応するためのボード改造方法の確認
3.ファームウェアの書き込み方法の確認
4.コード作成方法の確認
5.SD交換のみでプログラムの変更ができるのを確認
結果としては、Linux上のコンパイルおよび書き込み等はWeb上の
記事を参照しながら問題無く行えました。改造に関しては、
STM32F407VEボードでは、当初、基板上のリセットのみではSDの
交換が上手く行かなかったのですが、USB端子処理をPyboardと同じ
にする事(プルアップ抵抗を外す)と上手く行くようになりました。
STM32F407VGのボードは、SDカードの対応が無かったのですが、
公開されていたボード対応のコードの一部を変更する事により対応
できる様になりました。SDカードをマウントすると、コード用の
領域が今までのRAM領域の制限から、SDカードの容量に変更される
ため、コードサイズの問題で悩む事はなくなった様です。(本格的な
コードを作成では未確認ですが) いずれにしても、速度を気にしな
ければ、SDカードを利用する事により、ほぼ自由にコードの作成が
できる様になった様でとても良いかと思っています。
[ファームウェアのコンパイル]
ファームウェアのコンパイルは、手持ちのPCにインストールしている
VMのLinux(Ubuntu)を使って行いました。今のLinuxの操作感はWindowと
良く似ていて、余りLinuxに詳しく無い私でも問題無く行う事ができました。
また、コンパイル出力もネットを通じての共有がとても便利で、簡単に
受け渡しができました。作業の流れとしては、以下の順番で行いました。
<ソースコードの入手先>
MicorPython : http://micropython.org/download
STM32F407VE : https://github.com/mcauser/BLACK_F407VE
STM32F407VG : https://github.com/BLavery/STM32F407VG-Micropython
<STM32F407VE/G ボードフォルダのMicroPythonコードへのコピー>
MicroPythonコードコピー先フォルダ : micropython/ports/stm32/boards/
各ボード用コードのコピー元フォルダ :
STM32F407VEは「BLACK_F407VE-master」
STM32F407VGは「STM32F407」
<「arm cross compiler」 のインストール>
Linuxコマンドで
wget https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q3-update/+download/gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2
tar xvfj gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2
sudo apt-get -y install lib32z1 lib32ncurses5
<ファームウェアのコンパイル>
先に「mpy-cross」をコンパイル(Linuxコマンドで)
cd micropython/mpy-cross
make
次にファームウェア全体をコンパイル
cd micropython/ports/stm32/
make BOARD=xxxxxxx CROSS_COMPILE=~/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-
xxxxxxx :
STM32F407VE では「BLACK_F407VE-master」
STM32F407VG では「STM32F407」
<コンパイル出力の取り出し>
cd build-xxxxxxx/
Hex output : firmware.hex
Dfu output : firmware.dfu
xxxxxx はファームウェアのコンパイルのものと同じ
[ボードの改造]
STM32F407VのMicroPythonはPyboardが雛形で、STM32F407VEの
ボードでは、USBの端子処理によりボード上のリセットだけではUSBの
切り替えに対応できていませんでした。 (ボード電源のオフ/オンが
必要) その為、USBの端子処理を雛形のPyboardに合わせました。また、
STM32F407VGにはSDカードの対応がされていない為、SDカードの
対応ができる様にしたものも用意しました。
<STM32F407VEボード>
USB端子処理をPyboardと同じにして、ボード上のリセットのみで
USBの切り替えを行える様にする為です。
<STM32F407VGボード>
STM32F407VGボードにはSDカードのスロットが無い為、これを
取り付けてPyboardと同じ様にする為です。
[ファームウェアの書き込み]
ファームウェアの書き込みを行う時は、まず、ボードの設定をDFU
モードにします。
書き込みツールは2種類有り、hex or bin ファイルの時は次のものが
有効です。
dfu ファイルの時は次のものが有効です。hex or bin を dfu ファイルに
変換するツールがこのツールをインストールする時に付いていて、
それを利用して hex or bin のファイルに対応する事も可能です。
[SDカードの初期化]
SDカードを利用する場合、SDカードに初期ファイルを書き込む必要が
有ります。作業的には、SDカードなしで読みだ出せる内容をSDカードに
コピーする事になりますが、一旦SDカード無しの状態で起動し、それを
PC上に読み出して、次にSDカードを挿入した状態にしてSDカードに
コピーする事で対応可能です。
[コードの開発]
コードの開発はIDE(Thonnyがお勧め)を用いて行う事ができますが、
SDカードに対応した場合、シリアルポート用のターミナルプログラム
(Tera Term等)とエディタでSDカードの内容を編集する事によっても
行えます。
SDカードの内容に関しては、次の方法でも有効です。
CPUを中断状態にすると、SDカードの内容は他のPC上の
ファイルと同様に扱えます。 (編集、追加、削除が可能) また、
REPL用にターミナルソフトを使うのは、デバッグ時のエラー
状態等を表示させたりCTRL+Cによるプログラムの中断や
DTRL+Dによるプログラムの起動を行う為です。
[SD交換によるコードの交換]
SDカード内にはMicroPythonのコードのみで、STM32(Pyboard)系
では同じコードで有る為、SDを交換すれば、そのプログラムも交換
できます。
[ファームウェアと関連資料]
こちらでコンパイルしたファームウェアと関連資料は次のURLから
ダウンロード可能です。
Code download URL : https://drive.google.com/file/d/1FaJeYM9XlG2brANwQMq2FqrOrtKjNFVN/view?usp=sharing