VCC-GND.COMのSTM32F407VET6 miniボード(通称BLUE F407VE)のvariantを作ってみることにした。

このボードがLibmaple コアやGENERICコアのF407のArduinoで使えないのは、このボードのクリスタルが25MHzだから。通常は8MHzなので、各コアでも8MHzの設定がれているため動作しないというわけ。(各コアについてはこちらを参照

となるとクロック周りの設定をちゃんとしてやればOKなず、ということで自前でボード定義(variant)を作ってみることにした。LibmapleコアではF4系は今後のアップデートが期待できそうに無いので、GENERICかSTMコアで使うことになる。結果からいうとどちらも自分で定義してみたところ、いずれのコアでも動いた(すくなくともLチカはできた)。さらにいうとどちらもCubeMX/HALベースなので作り方もほとんど同じ。
(ちなみにクリスタルを25MHzにしてるのではおそらくEthernet周りの機能に対応するためなのかなと思ってるんですが)

ボード定義の作成の仕方

STMコアのボード定義の作成の仕方は、
https://github.com/stm32duino/wiki/wiki/Add-a-new-variant-%28board%29
で説明されている。

GENERICコアの場合は、
https://danieleff.github.io/STM32GENERIC/add_board/
ボードのテスト用のスケッチなども用意されていて、それらについての説明は以下にある。
https://danieleff.github.io/STM32GENERIC/test/
テスト内容を把握してないけどめぼしい機能の動作が確認できればボード定義が正しくできているということになるでしょう。

STMコアの場合は1から作る必要があるけど、他のボードの定義は参考になる。GENERICコアの場合は、BLACK F407VEを元にして必要なところを書き換えれば良いので、こちらがやや簡単か。

いずれの場合もSTM32CubeMXが必要。STM32CubeMXはSTマイクロエレクトロニクスが無償公開しているツール。STM32CubeMXの使い方は、この辺とかこの辺が参考になる。後者は電子書籍だけどオススメ(というか類似した書籍とかが少ない)。

どちらの場合もSTM32CubeMXでジェネレートされたソースファイルからクロックの設定をコピペするのですが、そのままだとエラーになります。ビルドできません。エラーハンドラのところの問題のようです。そこを丸っと削るか、他のボードを見習って修正すればイケるはず。他のボードを参考にすればわかるはず。

あと、STM32CubeMX側の設定の仕方次第で、動作するものの正常に動作しないということが起きる可能性があります。僕はLチカくらいしか試してないのですが、ON/OFFのスピードがおかしくなる場合がありました。クロックの設定は最大クロックを指定すればSTM32CubeMXが自動的に必要な設定を行ってくれるはずなんですが…. ペリフェラルの設定が絡んでいてそのクロックをどうするか把握していないと厳しいかも。(僕はまだいまいちわかってない。)

とはいえ、見よう見まねなんとかボードの定義ができました。
いろいろ試してみて問題無さそうなら公開しようかな。

Share