2000円未満で買える!格安中華オシロDSO138miniが結構遊べた件(4)〜Arduino化編〜
→過去の記事 その(1)、(2)、(3)
さてさて、格安中華オシロ JYE Tech DSO138mini を組み立ててみたものの、使いみちに困っている方はいらっしゃいませんか(^^;
…オシロスコープというものは意外と使いそうで使わないものです。マイコンをいじるデジタル回路屋さんともなると、ほとんどロジアナになっちゃいますし、アナログ波を見るといっても…結局おもちゃですしね。。。
じゃあ〜〜
オシロのようなおもちゃなら、本当におもちゃにしてしまえばいい!
この工作キットの素晴らしい所は「オープンソースハード」といいまして、回路図が公式サイトに公開されているんです!
好きな人はこの回路図を見ながら酒を呑んで、飯が食えます(笑)
前の記事で紹介したように、DSO138miniは「デジタルボード」と「アナログボード」に分かれているのですが、「デジタルボード」は STM32F103 に、320x240のLCD(ST7787)が載っているんです。
…だったら Arduino を突っ込んでみたい…と思うのが人の性(サガ)というもの。今や、ArduinoはAVRマイコンだけのものではない。…っていうか、AVRマイコン以外の方が活発ですね(^^;
そうと決まったら、さっそくArduino化してしまいましょう♪
STM32のArduinoというのは?
じつは2種類あって、結構紛らわしいのです(^^;・ST社大プッシュ中の STM32duino と、
・Maple Mini(STM32を使ったボード)開発用からフューチャーされた Arduino_STM32
USBからスケッチを書き換えるのが便利で、先人たちのノウハウが蓄積されているのはMaple Miniの血統を受け継いだ Arduino_STM32 の方でしょうね。それで、このブログでは Arduino_STM32の方を使うことにします。
準備するもの
・USB-Serial
FT232RL とかそういうの。どこの家庭にも一個くらい居間に転がっているらしい。写真は秋月電子で売っているもの |
無ければ、すぐに買いましょう。Aliとかebayならとても安い。それはなぜか?などと聞くのは共産主義国家に対する挑戦なので止めておいた方がいい。
今後、STM32でいろいろ遊びたいと思うなら、ST-Linkを買ってもいいだろう。ST-LinkもAliなら安い。それはなぜか?などと聞くのは(以下略
・STM32の書き込みソフト
Arduino の bootloader を書き込むために使います。STM32Flash なら、だいたいのOSでも使えて楽なのだけど、CUIです。めんどくさいかもしれません。恐ろしくやる気が無いときはGUIの Flash loader demonstrator をインストールしておきましょう。(ダウンロードの際にメールアドレスの登録が必要です。ちょっと面倒(;´Д`)
ボードをフラッシュ書き込みモードにしよう
STM32というのは、リセット時にBOOT0が「HIGH」、BOOT1が「LOW」になっていれば、フラッシュ書き込みモードに入ることになっている。
Bluepillのような開発ボードだと、ジャンパーやタクトスイッチなどが付いていて簡単に書き込みモードに入れるのだけど、このボードにはそんな気の利いたモノは無い。
JP1,2をはんだ付けでショートさせるとフラッシュ書き込みモードになる。 |
みんな
はんだづけついでに、シリアルポートなどにL型ピンヘッダもくっつけておくと、のちのち、色々と便利だろうw
はんだづけは、た〜のしいよ〜(!?) |
ブートローダーの準備
Arduinoのスケッチを書き込むために、ブートローダーを書き込んでおこう。そうでないと書込みのたびに、BOOT0を「H」にしてDFU(フラッシュ書込)モードにしてあげなければならないので、面倒なことこの上ないです。しかしブートローダー(STM32duino-bootloader)を入れておけば、リセット後の数秒間はDFUモードになるので、その間にスケッチの書き換えができるというわけだ。
★ブートローダーの置き場所:
https://github.com/rogerclarkmelbourne/STM32duino-bootloader
ここの「binary」フォルダーの中に「dso138_boot20.bin」という、いかにもそれっぽいファイルがあるのだけど、これはminiではない旧機種のブートローダーなのでしょう。。。
だから、このブートローダーを書き込んで、パソコンにUSBを差し込んでも何も反応しないと思う。
DSO138 mini の回路図を見ると、USBライン(D+)がPA7ポートとつながっている。そのためなにかしらの手段でプルアップしてあげる必要があるのだろう。
デジタルボードには、「PA7」の端子もあるので、もしかしたら、ここを3.3Vとショートさせてあげれば、普通に書き込めるのかもしれない。(筆者未確認)
とりあえず、筆者の場合はブートローダーをカスタマイズして、PA7からHIGHを出力できるようにしました。
【手順】
(1)ブートローダーのソースを上記githubからダウンロードする。zipダウンロードでも、git cloneでもお好きな方で。
(2)main.c で初期化処理をやってるところの setupLEDAndButton の後あたりにPA7からHIGHを出力できるように処理を追加しておく
{
bool no_user_jump = FALSE;
bool dont_wait=FALSE;
systemReset(); // peripherals but not PC
setupCLK();
setupLEDAndButton();
#if defined TARGET_DSO138
#define PA7_BANK GPIOA
#define PA7_PIN 7
SET_REG(GPIO_CR(PA7_BANK,PA7_PIN),(GET_REG(GPIO_CR(PA7_BANK,PA7_PIN)) & crMask(PA7_PIN)) | CR_OUTPUT_PP << CR_SHITF(PA7_PIN));
gpio_write_bit(PA7_BANK,PA7_PIN, 1);
#endif
…
(3)ビルドしなおし。gcc-arm-none-eabi あたりのコンパイル環境をインストールしておいてから、makeしてやる。binaryフォルダー以下に.binファイルができるはず。
(4)ダミーArduinoスケッチの作成。
これがないと、パソコンはCOMポートを作ってくれないのでArduinoのスケッチ書き込みに難儀することになる。「sketch_combiner/congratulations_sketch」フォルダー以下に.inoファイルがあるので、適当にEditしよう。Lチカのような簡単なもので十分だ(ボードLEDはPA15)。
setup内の処理でデバッグモードを解除にしておくと、PA15に繋がっているLEDをArduinoからコントロールできるようになるので便利だ。そして、ダミースケッチ内でもPA7(USBプルアップ用)をHIGHにする処理を絶対に忘れないようにしておこう。
afio_cfg_debug_ports(AFIO_DEBUG_NONE);
pinMode(PA7, OUTPUT); //USB Pullup
digitalWrite(PA7, HIGH);
pinMode(PA15, OUTPUT); // LED
digitalWrite(PA15, HIGH);
Serial.begin();
}
(5)bootloader((3)でできたbinファイル)とダミーArduinoスケッチ((4)でできたbinファイル)をマージさせる。
「sketch_combiner/bin_merge_tool」フォルダーにツールがある。このbatファイルを参考に適当にコマンドを叩けば完成だ(ぉぃ
※説明がヘタでわけわからん!とか、これだけのために、いちいちビルド環境を構築するのが面倒くさがりやさんのために、ビルド済のバイナリを用意しました(需要があるかどうかはわかりませんがw)
https://github.com/phillowcompiler/STM32duino-bootloader_DSO138mini
↑こちらの binaries フォルダ以下に「dso138mini_boot20.bin」がありますので、以下の方法で書き込んでやってください。
書き込み
できあがったbootloaderのバイナリファイルを、Flash loader demonstrator でかきこんでやることになる。あらかじめ、DSO138 mini のデジタルボードとUSB-SerialをTX-RXクロスで接続しておいてから、Flash loader demonstrator を起動しよう。
筆者は何度も書き込み直すことも考えて、スライドスイッチをくっつけちゃいました |
USB-SerialのCOMポートが現れているので、あとは適当にw。GUIというのは素晴らしいですねヽ(´ー`)ノ
だいたい勘で書き込めるから大丈夫w |
ST-Linkを使う場合
普通に以下のピンが使えることでしょう(筆者未確認)PA13(SWDIO)
PA14(SWCLK)
もちろんWinなら、ST-Link Utility を使うこともできます(早く言えw)
ブートローダーの書込みが終わったら…
ショートしていた JP1とJP2のハンダを取り除いて、 再びオープンにしておこう。そのあと、本体とUSBケーブルを直接つなげば、ダミーArduinoスケッチが動くはず。(PC側にもCOMポート(mapleという名前が付いているかも)が開かれるのでSerialで何か適当に吐き出せる)これで、USBケーブルだけでArduinoのスケッチが書き込めるようになる。
格安中華オシロDSO138mini遊び。カスタマイズしたブートローダーを書いて、USBからarduinoのスケッチが書けるようになった😁。これで捗るw pic.twitter.com/4oeQjpI3Fx— 疲労こんぱいら (@phillowcompiler) October 21, 2019
bootladerが無事書き込めたら、PA15ポートに接続されているLEDをチカチカさせたりして、遊んでみましょう!「STM32完全に理解した」ってなる瞬間ですねw
追記
STM32のArduinoのセットアップについては解説ページを作りました。…Lチカできたら、次は当然LCDパネルも動かしてみたいですよね?
→というわけで、次回は オシロDEゲーム作成編(笑) です
コメント
コメントを投稿