STM32F3シリーズのbxCANについてポイントをまとめます。
最終更新日:2024年3月18日
bxCAN大丈夫?
今日の CAN アプリケーションでは、ネットワークのノード数が増加し、複数のネットワークがゲー トウェイを介してリンクされることもあります。一般に、システム内の(そして各ノードが扱う)メッ セージ数は大幅に増加しています。アプリケーションメッセージに加えて、ネットワーク管理や診断 のメッセージも導入されています。
このような背景を理解しているにも関わらず、STM32F3シリーズのCANは非常に扱いにくい仕様になっています。
STM32CubeMXでのデフォルトの設定値も使い物になりません。CANの仕様を理解していない人がSTM32F3シリーズのCANを使用すると必ず問題が発生すると思います。
本記事は、様々なベンダのマイコンのCANを使用した製品開発を行ってきた実績から、STM32F3シリーズのCANを使用するときの注意事項についてまとめます。
bxCAN受信関連
STM32F3シリーズのCANの受信については、2個のFIFO(FIFO0とFIFO1)で構成され、各FIFOには3つの受信メールボックスしかありません。
これは、CANメッセージを同時に最大6種類までしか受信できないことを意味します。
このため、FIFOメッセージペンディング割込みのイベントで、いかに素早くFIFOにペンディングされているメッセージを読出すかの設計スキルが問われます。
FIFO0とFIFO1のそれぞれのFIFOメッセージペンディング割込みは別々のベクタアドレスに定義されています。
別々のベクタアドレスとなるため、割込みの優先レベルをそれぞれ指定できますが、同じレベルに設定して問題はありません。(私の経験上です)
ただし、FIFO0のFIFOメッセージペンディング割込みとFIFO1のFIFOメッセージペンディング割込みが重なったときが最も処理時間を要することを理解しておくべきです。
FIFOメッセージペンディング割込みが発生し、割込みの中でFIFOに格納されているメッセージを取得するのですが、格納されているメッセージが1個とは限らないことに注意が必要です。
例えば、FIFOに3個格納されているのに、1個だけ取得して割込みを抜けたら、抜けた瞬間に再度、FIFOメッセージペンディング割込みが発生します。これはかなりの無駄時間を費やしています。
FIFOメッセージペンディング割込みではFIFOに格納されているすべてのメッセージを取得するのがベストプラクティスです。
具体的なコードは別途記載します。このコードは製品開発にそのまま使用できるレベルのものです。
執筆中…