マイコンあそび。

チープマイコン愛好家の星STM32F103をPlatformIOでいじくって遊ぼう!

2019年12月31日  2020年1月30日 
マイコンで遊んでみたい! 勉強してみたい!

…でも趣味レベルだし、そんなにお金かけたくないなあ〜ヽ(´ー`)ノ

そんな不埒なニーズは(筆者を含めて)意外と少なくないものです😅

そういったしみったれた諸兄のための最適なソリューションは STM32F103 だ。

庶民の味方・STM32F103

何で今更?と思うかもしれないけれど、コスパの良さは群を抜いている。

入手性の良いオープンソース開発ボードの bluepill(要するにMapleMiniのクローン)があるのだけど、AliExpressなどでは$2以下(150円前後)で買える。アホのように安い
Lチカだけして、使い捨てても惜しくない金額だ。

なぜ、これほど安く売っているのか…。理由についてはよくわからないのですが、
この記事あたり にヒントがあるのかもしれない。

MapleMini。何気にブルジョア専用だ(赤いけど)

BluePill STM32F103のスタンダード開発ボードと言ってもいい



このボードが積んでいるマイコンのSTM32F103C8T6 は下記のようなスペックだ
・32ビット ARM Cortex M3
・FlashROM 64kB
・SRAM 20kB
・UART、SPI、I2C、ADC、RTC…といった機能
・2.0〜3.6V 最大72MHz動作

しかも偉大な先人たちの積み重ねられ、枯れた(褒め言葉ですよ!)ノウハウによって Arduino でも開発できる。もう我々が遊ぶために作られたとしか思えない。

さっそくArduino開発環境をセットアップして遊ぶことにしよう。

…とは言っても、Arduino-IDEはまるでアホの子のようにトロいので、




PlatformIOで開発しましょう!

最近はマイコンで遊ぼうと思ったら、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でダウンロードしておいて、適当の場所で解凍しておくと良いでしょう。
GitHubの「DownLoad 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をクロスにする。

USB-SerialSTM32
TXPA10(RX1)
RXPA9(TX1)
3V33V3
GNDGND


FT232RLくらい、どこの家にもあるらしい。



■ CUIで頑張る人向け

toolsは ここ から手に入ります

・USB-Serial
Win
 stm32flash.exe -w generic_boot20_pc13.bin COMXXX
Linux
 stm32flash -v -w generic_boot20_pb12.bin /dev/ttyXXX
・ST-Linkを使う場合
Win
   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」のオプションを追加しておこう。

[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = arduino
board_build.core = maple
upload_protocol = dfu

あとは、ビルド&書き込みはボタン一発でできる。楽チンヽ(´ー`)ノ


Linuxで書き込みにコケるときは…

Linuxだと、「No DFU capable USB device found」とかいうエラーメッセージが出て、書き込みにコケます

理由はこのあたりに書いてあって、Linuxではソフトウェア的にUSBデバイスをリセットかけたあとにDFUモードに切り替わったことを検知する方法が無いようなのだ。

ソフトウェア的にダメなら、ハードウェア的に力技でやるしかない。
Auto-detected: /dev/ttyACM0
Uploading .pio/build/genericSTM32F103C8/firmware.bin
↑のような表示が出たときにタイミングよくリセットかければ、なんとかなるw



このあと、スケッチが書き込めたのに動いていないな?と思ったら、まだボードがDFUモードのままなのかもしれません。シリアルモニタでも開いて、通信ライン(仮想DTR)をオンしてあげましょう。

…まあ、おとなしく ST-Link を使った方が手っ取り早いのかも。中華STLinkなら安いし($2程度)、十分使えます(^^;



STM32F103は、いわゆる「見通しの良い」ヤツなのでまだまだ手軽なマイコン遊びで使えそうですね(^^)
ー記事をシェアするー
B!
タグ

コメント

Translate

テキスト大文字のデフォルトサイズ変更

人気の投稿