okiami1983のブログ

クオリティーが低い記事はあとで書き直します。。

STM32でHAL Driverをつかって、SPIのslaveモードでDMA受信

当初mbedとして使おうと買ったSTM32F410RBTx。

mbedとして使うのはどうも使い勝手が悪いので、STM32として使うことになりました。

 

STM32のドライバを使えば、割と簡単にSPIのslaveモードでDMA受信、できます。DMAを使うことで、クロック10MHzくらいまでバーストで受信できてます。mbedプラットフォームではDMAを使えないので、残念ながら受信が間に合いません。

 

ちなみに、参考文献はこれです。

 

 

手順

  1. STM32CubeMXを使ってマイコンペリフェラルを設定する。
  2. 設定が終わったらボタンを押してコード生成する。統合開発環境uVisionのプロジェクトファイル一式が生成されます。
  3. uVisionでプロジェクトファイルを開いて、受信用のメモリを追加して、ちょいちょいっとSPIモジュールとメモリを紐づけるコードを追加する。
  4. ビルドボタンを押す。
  5. デバッグ(STM32にはデバッガもついてる)

この方法でいいところは、面倒なマイコンの初期化をツールに任せてしまえるところです。また、ドライバは割としっかり作ってあるので、かなり柔軟な開発に対応できます。

 

↓画面はこんな感じです。

f:id:okiami1983:20170119234033p:plain

有効にしたい機能をマウスでポチポチして選びます。機能のピンへの割り付けは自動で反映されます。

 

f:id:okiami1983:20170119234056p:plain

有効にした機能の詳細をこのタブで設定します。このタブも、マウスをポチポチ。

 

f:id:okiami1983:20170119234121p:plain

コード生成して、uVisionで開いた状態。受信用のメモリを作って、SPIと紐づけ。コードとして追加するのは2行だけ。

 

組み込みの開発経験がある人はmbedのプラットフォームよりもSTM32のドライバを使ったほうが良いですね。

ただし、STM32のSPIマスターモードのCSはエラッタがあるとかなんとかで、スレーブモードと同じようにいかずハマるかもしれません。

 

 

STM32CubeMXの使い方はこれが詳しいです。が、ちょっと使ってみたいなと思ったら本買ったほうが良いです。時間を金で買う、みたいな。

http://www.st.com/content/ccc/resource/sales_and_marketing/presentation/product_presentation/group0/af/3a/5b/03/b6/c5/46/28/45.CubeMX Tool/files/45.STM32L4-Ecosystem-CubeMX Tool Final_JP.pdf/jcr:content/translations/ja.45.STM32L4-Ecosystem-CubeMX Tool Final_JP.pdf