STM32F3のSPI
STM32F303のSPIペリフェラルは、所々要注意なトラップが有ったりする。
記憶だけで書くので、認識が間違っているかもしれないけど。
1.データレジスタのアクセス方法が2種類ある
送信データビットが8ビット以下の時は、
データレジスタにバイトアクセスしないといけない。
9ビット以上の時は、ハーフワードでアクセスする。
データ長だけ設定しても、正しいデータを送ってくれない。
公式のサンプルコードは、酷いことになっている。
ヘッダーファイルには、データレジスタは
ハーフワードの定義しかないので、要注意。
自力で、バイトアクセス用の定義を追加するか、
直接*(volatile unsigned char*)(”アドレス値”)みたいにして
バイトアクセスする。
2.受信終了ステータスフラグ
マスターモードで、なぜか正しく動作しないので、
替わりにビジーフラグを使う。
受信完了フラグが、受信完了してないところで立つ。
フラグを信用して読み込むと、おかしなことになる。
なので、送信完了の方を使って処理する。
(全2重で動くので、送信終了=受信終了)
それ以外のSTMでは、この件は無かったと思うけど、
似たようなトラップに、注意するに越したことはないかも。
記憶だけで書くので、認識が間違っているかもしれないけど。
1.データレジスタのアクセス方法が2種類ある
送信データビットが8ビット以下の時は、
データレジスタにバイトアクセスしないといけない。
9ビット以上の時は、ハーフワードでアクセスする。
データ長だけ設定しても、正しいデータを送ってくれない。
公式のサンプルコードは、酷いことになっている。
ヘッダーファイルには、データレジスタは
ハーフワードの定義しかないので、要注意。
自力で、バイトアクセス用の定義を追加するか、
直接*(volatile unsigned char*)(”アドレス値”)みたいにして
バイトアクセスする。
2.受信終了ステータスフラグ
マスターモードで、なぜか正しく動作しないので、
替わりにビジーフラグを使う。
受信完了フラグが、受信完了してないところで立つ。
フラグを信用して読み込むと、おかしなことになる。
なので、送信完了の方を使って処理する。
(全2重で動くので、送信終了=受信終了)
それ以外のSTMでは、この件は無かったと思うけど、
似たようなトラップに、注意するに越したことはないかも。
| 固定リンク | 0

コメント