NucleoボードでSTM32マイコンに書き込む

電子工作歴10年にもなってSTM32マイコンを使ったことがないのはさすがに嘘だよ、ということで触ってみた。ネット上で圧倒的な初学者向けの知見があるPICやAVRと違って、STM32はより本格的な用途に使われる分それなりの知識がある人向けの解説が多い印象がある。この記事ではNucleoボードから始めて、単品チップにLチカさせるまでを書きたいと思う。
なお、筆者はWindows環境なのでMacやLinuxの人は注意。

電子工作歴10年にもなってSTM32マイコンを使ったことがないのはさすがに嘘だよ、ということで触ってみた。ネット上で圧倒的な初学者向けの知見があるPICやAVRと違って、STM32はより本格的な用途に使われる分それなりの知識がある人向けの解説が多い印象がある。この記事ではNucleoボードから始めて、単品チップにLチカさせるまでを書きたいと思う。
なお、筆者はWindows環境なのでMacやLinuxの人は注意。
韓国発で「1.44MB GAME_DEV CONTEST」なるゲーム制作コンテストが発表されたらしい。1.44MBに収まる実行ファイル一本でゲームを作るコンテストだ。
容量が収まるならゲームエンジンを使用しても問題ないとあるが、Unityのような近年の大規模なゲームエンジンは空のプロジェクトをビルドするだけで数十MBに達するので、実質的には使用不可と言って良いだろう。いわゆるゲームエンジンでなくともSiv3Dですら怪しい。しかし一方で、そうしたモダンなエンジンやフレームワークを使わないのであれば、1.44MBは思いのほか容易に達成可能なサイズでもある。

実行ファイルの容量というものはどの程度まで小さくできるのか?試しに実験してみたところ、空のウィンドウを出すだけのEXEファイルを1.4KBに収めることに成功した。せっかくなのでこれを共有してみたいと思う。1.44MB GAME_DEV CONTESTの土台にでもなってくれれば幸いだ。
今回作成したプロジェクトファイル(ダウンロード, ZIP形式)
これはもう10年以上も前だが、Windowsの実行ファイルを小さくする記事を書いたことがある。これはその記事の令和最新版である。
フリーゲームの伝説「洞窟物語」が1.44MBに収まっていることは有名[誰によって?]だが、あれは圧縮した上での容量なので、このコンテストはさらに厳しい条件と言えるだろう。といいつつ、1.44MBは依然として実行ファイルとしては膨大な容量だと個人的には考えている。近年の巨大なエンジンやフレームワークがおかしいのである。
最近VNAを買ったのを機に高周波回路を勉強していて、Sパラメータとかをこねくり回している。初等的な電子回路の教科書には二端子対回路に関する抽象的な理論が載っているが、これほどちゃんと理解しておけばよかったと思ったことはなかった。
線形な二端子対回路の特性は、Sパラメータを始めとする2x2行列で全て表すことができる。
二端子対回路を特徴づけるパラメータにはSパラメータ(散乱行列)以外にもZ行列、Y行列、F行列などがあり、その内の1つでも把握すれば全てを把握したことになる。しかしそれは何故なのか?相互に変換が可能だが具体的にはどうするのか?その辺をちゃんと調べてみた。
Zephyrとラズパイpicoで独自USBデバイスを作るの続編記事である。
なんの工夫もしない場合、Windowsではドライバのない独自USBデバイスは上手く認識されずに弾かれてしまう。キーボード、マウス、USBメモリのような既定のデバイスであれば良いのだが、自作の独自デバイスの認識はダメだ。
独自デバイスだったらどうせ対応するドライバも自作が必須になるのだから仕方ないことではないか、と思うかもしれないがそうではない。独自ドライバの設定もインストールもなしに挿すだけでデバイスを認識させる方法がある。
前々からエッチングというものにトライしてみたいと思っていたのだが、最近ようやく手を付けることができた。
ネットの作例を見ると、アイロン転写による方法では細かいパターンは難しいようなことがよく書いてあるのだが、幅0.2mmの配線や0.5mmピッチの狭ピッチICのフットプリントも問題なく行けることを確認した。今回得たノウハウをこの記事で書き残しておきたいと思う。

日本の電子工作界隈で数限りなく擦られたであろうネタ。この度自分も挑戦し、案外手こずったのでその記録を書いておく。

最近、Zephyrというものを勉強してみている。RTOSと言われるものの1つで、様々なマイコン上で高度な処理を統一的に実装できる。対応チップは結構あるようだ。(参考)
出来ることは広いのだが、その中でUSB機能に注目したい。適当な32bitマイコンを買ってきて独自デバイス化できるのであれば、考えられるアプリケーションはかなり多い。
その一方で公式のサンプルには、マウスとかキーボードとかMIDIとかメモリとか既定のUSBデバイスクラスのものしかない。ベンダ独自デバイスを定義する方法のちゃんとした解説がどこにもない。というわけでこの記事を書いた。
実験にはRaspberry Pi picoを使用したが、Zephyrが対応するUSBマイコンであればどれでも使えるはずだ。
ソースコードの全体はこちら(リンク,zip形式)。