くろねこ日記

ソフトウェアに関する技術メモが多いです.

micropythonをSTM32F4DISCOVERYにインストール

はじめに

micropythonはarmマイコンのSTM32F4チップ用に作られたファームウェアです.

今日はSTM32F4DISCOVERYというマイコンボードにmicropythonをインストールして,Lチカするところまで紹介します.インストール作業に使うマシンはMacOSXで行ないます.

なお,この内容は先月開かれたPyConJP2014の開発スプリント中に行なった内容をメモしたものです.micropythonの良さや簡単な使い方についてはスプリントリーダであり,今年のpyconjpで面白い発表をしてくれた@hktechnoさんあたりの動画やスライドを見てください.

Micro Python で組み込み Python

CR04 Micro Python で組み込み Python (ja) - YouTube

ボード購入

秋月から

STM32F4DISCOVERY: マイコン関連 秋月電子通商 電子部品 ネット通販

STM32F4DISCOVERYを購入しましょう

ビルド環境の設定

まずは,micropythonをビルドするときに使うgcc-arm-embeddedを導入しましょう. Linuxの方はaptやyumを叩けば入ると思いますが,osxの場合はbrewでなぜかコケたのでこちらからバイナリ

https://launchpad.net/gcc-arm-embedded/+download

をダウンロードしましょう.そのあとは解凍してテキトーなディレクトリにコピーまたは移動して,そこにpathを追加してください.

次にmicropythonに書き込むためのライタ(ソフトウェア)を用意します. dfu-utilというのがありまして,homebrewからインストール可能です

brew install dfu-util

やってみる

とりあえず,まずはここまでの流れをやってみます.

マシンのシステム環境は以下の通りです

  • OSX(Marvericks)
  • zsh
  • homebrew

gcc-arm-none-eabiのバイナリはhome以下に置くとします.

/opt以下に置きたい場合は適宜読み替えて行なってください.

なお,curlでダウンロードするものはこの記事が出てから時間が経つと落とせなくなる可能性があります.もしリンクが切れていたら適宜修正してください.

では以下作業内容

brew install dfu-util
cd ~/
curl -L -O https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q3-update/+download/gcc-arm-none-eabi-4_8-2014q3-20140805-mac.tar.bz2
tar xvf gcc-arm-none-eabi-4_8-2014q3-20140805-mac.tar.bz2
cp -r gcc-arm-none-eabi-4_8-2014q3 ~/gcc-arm-none-eabi
echo 'PATH=$PATH:$HOME/gcc-arm-none-eabi/bin' >> ~/.zshrc
exec $SHELL -l

これだけです.

micropythonをビルド

micoropython本体はgithubに上がってますので,ダウンロードしてビルドすればOKです. ビルドの際には今回使うマイコンをオプションで指定する必要があるので注意です. micropython/micropython · GitHub

ビルドしたらdfu-utilを使って購入したボードにインストール作業に移ります.インストール前に,まずはボードの裏側にあるジャンパピン二つのうちどちらかを取って,p2側の21pin-22pin(BOOT0とVDDのところ)に刺します.そのあとボードをパソコンに繋ぎましょう.繋ぐときにはmicrousbとminiusbの2ポートがボードから出ていると思うので.二つともパソコンに繋ぎます.

やってみる

今の内容を実際にやってみます. なお,ボードは予めパソコンと繋いでおいてください.

git clone https://github.com/micropython/micropython.git
cd micropython/stmhal
make BOARD=STM32F4DISC
dfu-util -a 0 -D ./build-STM32F4DISC/firmware.dfu

これだけです. ここまで済んだらp2の21pin-22pin(BOOT0-VDDのところ)に刺してあるジャンパピンを元の場所に戻しておきましょう.

Lチカで遊ぶ

無事に済めば

/dev/tty.usbmodemなんとか

というデバイスを検出すると思います.

シリアルターミナルソフトウェアでそのポートに接続すればOKです. ここではpyserialに付属してくるminiterm.pyを使って接続します.

やってみる

pip install pyserial
exec $SHELL -l
miniterm.py /dev/tty.usbmodemなんとか

これだけでインタラクティブシェルが立ち上がると思います. このインタラクティブシェルはマイコンボードで動いております(すごい時代だ).

ではLチカしますね.

led = pyb.LED(1)
while True:
    led.on()
    pyb.delay(1000)
    led.off()
    pyb.delay(1000)

これだけです.

なお,気づいたかもしれませんが,USBフラッシュメモリのように,ボードがマシンにマウントされます.このなかにmain.pyというのがありまして,そこにコードを書いても動かすことができます.

まとめ

micropythonをSTM32F4DISCOVERYにインストールする手順をざっくり紹介しました.