STM32でHAL Driverをつかって、SPIのslaveモードでDMA受信
当初mbedとして使おうと買ったSTM32F410RBTx。
mbedとして使うのはどうも使い勝手が悪いので、STM32として使うことになりました。
STM32のドライバを使えば、割と簡単にSPIのslaveモードでDMA受信、できます。DMAを使うことで、クロック10MHzくらいまでバーストで受信できてます。mbedプラットフォームではDMAを使えないので、残念ながら受信が間に合いません。
ちなみに、参考文献はこれです。
定番!ARMキット&PIC用Cプログラムでいきなりマイコン制御[DVD-ROM付き] (マイコン活用シリーズ)
- 作者: 芹井滋喜
- 出版社/メーカー: CQ出版
- 発売日: 2016/01/29
- メディア: 単行本
- この商品を含むブログ (1件) を見る
手順
- STM32CubeMXを使ってマイコンのペリフェラルを設定する。
- 設定が終わったらボタンを押してコード生成する。統合開発環境uVisionのプロジェクトファイル一式が生成されます。
- uVisionでプロジェクトファイルを開いて、受信用のメモリを追加して、ちょいちょいっとSPIモジュールとメモリを紐づけるコードを追加する。
- ビルドボタンを押す。
- デバッグ(STM32にはデバッガもついてる)
この方法でいいところは、面倒なマイコンの初期化をツールに任せてしまえるところです。また、ドライバは割としっかり作ってあるので、かなり柔軟な開発に対応できます。
↓画面はこんな感じです。
有効にしたい機能をマウスでポチポチして選びます。機能のピンへの割り付けは自動で反映されます。
有効にした機能の詳細をこのタブで設定します。このタブも、マウスをポチポチ。
コード生成して、uVisionで開いた状態。受信用のメモリを作って、SPIと紐づけ。コードとして追加するのは2行だけ。
組み込みの開発経験がある人はmbedのプラットフォームよりもSTM32のドライバを使ったほうが良いですね。
ただし、STM32のSPIマスターモードのCSはエラッタがあるとかなんとかで、スレーブモードと同じようにいかずハマるかもしれません。
STM32CubeMXの使い方はこれが詳しいです。が、ちょっと使ってみたいなと思ったら本買ったほうが良いです。時間を金で買う、みたいな。