だんだんマイコン側にいろいろやらせたくなり、さすがにarduino UNOでは速度的にきつくなってくると次に何に移行するかが問題です。石自体はarduino DUEが高性能だったんですが、ほぼディスコンだし意外と高いし、今後標準的に使っていくには不安。
他にメジャーどころではESP32が安くて速いですがクセがありすぎる… 優等生なところでは、Teensy3.2~3.6がとても高性能で、海外では流行っています。arduinoIDEに独自命令やらライブラリを追加しまくっているのでもはやarduinoではない気もしますが、実用的なライブラリが揃っていてとても使いやすい。
…が、我々ジャパニーズとしては、秋月でいつでも安く買えちゃうSTM32の、マイコン系では最高速のnucleoF446REが自由に使えるとより良いのです。
というわけでnucleoF446を何かというと使ってるのですが、開発環境が基本的にmbedのWEBコンパイラです。arduinoほどユーザーは多くないですがまあそれなりに普及していて、使い方も簡単で重宝しています。
唯一の問題は、STM32F4特有のIOを直に叩いて最高速を出したり、DMAであれやこれやしたときには、mbedを使ってる人の参考資料は劇レアで、たいていHALライブラリやcubeMXを使った環境なのです。
cubeMXは今では↓こんなIDEになっていて、巨大ですがこれをインストールしてあればコード生成だけじゃなくビルドもデバッグもできちゃいます。いいんです。いいんですが、こんな巨大なツールをどのマシンにでも入れてあるわけではないので、たいしたことないコードならmbedでちゃちゃっと済ませちゃいたいのです。
ふだんはmbedで楽をして、たまに難しいことをやるときだけcubeMXの自動生成コードをコピペしてきてうまうましたい…という虫のいいことが、基本的に可能です。というか、単にcubeMXで生成したプログラムのmain.cとmain.hをまるごと持ってきてmbed環境でビルドすればそのままビルド通ります。main以外のライブラリソースは持ってこなくてもmbedコンパイラ側にあります。(cubeMXはHALを呼びまくるコードを生成するので、それには当然対応したcpuのstm32f4xx_hal.hが必要ですが、それはmain.hの先頭で呼ばれているので問題ありません)
ただしビルドできるからと言ってそのまま動くとは限らないので、いくつか注意が必要です。えらいひとがこのような教えを書き残しているので従いましょう。確実にハマるのはcubeMXが生成したSystemClock_Config()です。クロック設定がよく見えないmbedレベルでどこからか呼ばれてしまっているので、わたくしはとりあえずcubeMXが吐いたSystemClock_Config()を使わないようにコメントアウトしました。
一応mbed側のソースをぐぐって確認したら、mbedは180Mhz、cubeMXは(USBホスト機能に配慮して)168Mhzで初期化されているみたいですが、それ以外には今のところ大きな違いは無かったです。ペリフェラルをどんどん使うようにしたらどこに初期化コードが書かれるのかまだわからないので、いずれは単にコメントアウトってわけにはいかなくなるのかも。
こんな具合でちまちまと使ってみて、F446REならではのことができたら書き残していきたいと思います。
0 件のコメント:
コメントを投稿