チープマイコン愛好家の星STM32F103をPlatformIOでいじくって遊ぼう!
…でも趣味レベルだし、そんなにお金かけたくないなあ〜ヽ(´ー`)ノ
そんな
そういった
何で今更?と思うかもしれないけれど、コスパの良さは群を抜いている。
入手性の良いオープンソース開発ボードの bluepill(要するにMapleMiniのクローン)があるのだけど、AliExpressなどでは$2以下(150円前後)で買える。アホのように安い。
Lチカだけして、使い捨てても惜しくない金額だ。
なぜ、これほど安く売っているのか…。理由についてはよくわからないのですが、
この記事あたり にヒントがあるのかもしれない。
このボードが積んでいるマイコンのSTM32F103C8T6 は下記のようなスペックだ
・32ビット ARM Cortex M3
・FlashROM 64kB
・SRAM 20kB
・UART、SPI、I2C、ADC、RTC…といった機能
・2.0〜3.6V 最大72MHz動作
しかも偉大な先人たちの積み重ねられ、枯れた(褒め言葉ですよ!)ノウハウによって Arduino でも開発できる。もう我々が遊ぶために作られたとしか思えない。
さっそくArduino開発環境をセットアップして遊ぶことにしよう。
…とは言っても、Arduino-IDEはまるでアホの子のようにトロいので、
最近はマイコンで遊ぼうと思ったら、PlatformIO一択って感じになりつつあるのかも…(異論は認めますw)
※PlatformIOについての解説や、インストール方法については、ググル先生に聞けばいっぱい教えてくれるので割愛。
じつはちょっとややこしいSTM32のArduino
Arduinoというのは、かつてはAVRマイコンの専売特許のようなものだったけど、今はいろんなマイコンで利用できる開発環境になっている。
STM32もそういったマイコンのひとつ…というわけなのだが、STM32用のArduinoは2種類あって紛らわしいことこの上ない。
■ stm32duino (ST社謹製のHALから発展したもの)
■ Arduino_STM32 (Maple mini 用のArduinoから発展したもの)
最近はだんだんと stm32duino の方に移行しつつある感じ。やっぱりSTが公式で大プッシュしているのは強い。
それでも依然としてMapleによって蓄積されたノウハウが大きいので、ホビーレベルでは Arduino_STM32 を扱うのが楽だと思います。。。 bootloaderをつっこんでしまえば、USBケーブル一本でArduinoスケッチを更新できてしまいますからね。
ええと、デバッガ!?…漢なら、デバッガなんかなくても(以下略
※以下のセットアップを行うために、Arduino_STM32 をまとめてzipでダウンロードしておいて、適当の場所で解凍しておくと良いでしょう。
セットアップ(Windows編)
JRE(JAVAランタイム)のインストール
まず紅茶でも一杯やりながら、確認しておきましょうw…なにを今更!と思うけれど、なぜか筆者のPCにコレがインストールされておらず、フラッシュ書き込みができなくて、かなりの時間悩むハメになりましたw。意外とこういうところでハマるものです…
Arduino_STM32のtoolsフォルダーを見るとおり、「maple_loader」はJAVAで動くんです…ハイ。
ドライバーのインストール
ここに一式あるので、「install_drivers.bat」を「管理者権限」で実行しましょう。エクスプローラの右クリックなんかを使いながらできると思います。セットアップ(Linux編)
Linuxは特別なドライバーをインストールしなくても、USBをサクっと認識してくれる。(1) udev の rules を設定
ここ の install.sh を sudo で走らせておく。マイコンボードが dfuモード になっているときに書き込みができるようになる。(2) dfu-util のインストール
書き込みで使用するツールです。ほとんどのLinuxディストリで apt-get できるでしょう~。maple bootloaderの書き込み
maple bootloader はUSBケーブル一本で、STM32F103のArduinoスケッチを書き換えることができる、たいへん便利なヤツだ。ここから適当なbin(大抵の場合は generic_boot20_pc13.bin だろうけど)を拾ってきて、フラッシュに書き込もう。
USB-Serial(FT232RLなど)と STM32 Flash loader demonstrator を使えば楽勝だ。
※bluepillの場合、ジャンパーピンを使って 「BOOT0」を「1」に、「BOOT1」を「0」にして、DFU(フラッシュ書き込み)モードにしておく 必要がある。
※bootladerを書き終わったら、「BOOT0」のジャンパーは「0」に戻しておきましょう
※接続はTX-RXをクロスにする。
toolsは ここ から手に入ります
・USB-Serial
stm32flash.exe -w generic_boot20_pc13.bin COMXXX
Linux
stm32flash -v -w generic_boot20_pb12.bin /dev/ttyXXX
ST-LINK_CLI.exe -c SWD -P generic_boot20_pc13.bin 0x8000000 -Rst -Run
Linux
st-flash write generic_boot20_pc13.bin 0x8000000
PlatformIOのプロジェクト作成
PlatformIOを起動して、「NewProject」から、いつものように3つの質問に答えるだけ。※BoardはGenericから選んでおくと、いろいろと楽である。
自動的にmain.cができて、その中にお馴染みの setup() と loop() がある。ArduinoのdigitalWriteといった関数も使えるので、サクっとプログラミングしよう。
USBケーブルから(maple bootloaderを利用して)スケッチを更新するのであれば、次のように「platformio.ini」に「board_build.core」と「upload_protocol」のオプションを追加しておこう。
platform = ststm32
board = genericSTM32F103C8
framework = arduino
board_build.core = maple
upload_protocol = dfu
あとは、ビルド&書き込みはボタン一発でできる。楽チンヽ(´ー`)ノ
Linuxで書き込みにコケるときは…
Linuxだと、「No DFU capable USB device found」とかいうエラーメッセージが出て、書き込みにコケます。理由はこのあたりに書いてあって、Linuxではソフトウェア的にUSBデバイスをリセットかけたあとにDFUモードに切り替わったことを検知する方法が無いようなのだ。
ソフトウェア的にダメなら、ハードウェア的に力技でやるしかない。
Uploading .pio/build/genericSTM32F103C8/firmware.bin
このあと、スケッチが書き込めたのに動いていないな?と思ったら、まだボードがDFUモードのままなのかもしれません。シリアルモニタでも開いて、通信ライン(仮想DTR)をオンしてあげましょう。
…まあ、おとなしく ST-Link を使った方が手っ取り早いのかも。中華STLinkなら安いし($2程度)、十分使えます(^^;
STM32F103は、いわゆる「見通しの良い」ヤツなのでまだまだ手軽なマイコン遊びで使えそうですね(^^)
コメント
コメントを投稿