2016-10-31 16 views
-1

参考マニュアル(bxCAN)の情報を参照して作成しています。STM32F4xx CANフィルタ設定

CANフィルタの設定がどのように機能しているかを理解しようとしており、正しく理解しているかどうかを確認するためにヘルプが必要です。

特に、フィルタIDとフィルタマスクIDの設定。

私はstdPeriphLibとrefを見た後、マニュアル、私は何が起こるのか理解していると思いますが、わかりません。低

FilterIdHigh /:

バイナリ後FilterIdMaskを持つCAN Controllerための低FilterIdHigh /が比較値はありますか?

例えば: コントローラがメッセージを受信することができます - > CAN_Rx_

CAN Controller makes a binary AND with the FilterIdMask --> 
    CAN_Rx_ArbitrationField & FilterIdMask = Result 

CAN ControllerはFilterIdと結果を比較します。

一致するものがある場合、CAN Controllerは、CAN_Rx_メッセージを割り当てられたFIFOに入れます。そうでない場合、メッセージは破棄されます。

いいえ、それはありませんか?

ありがとうございました。

答えて

0

最初に受信したIDとマスクをANDして、不要なビットを削除してIDと比較します。一致すると、メッセージのみが受け入れられます。

if((CAN_RX_ID & CAN_FILTER_MASK) == (CAN_FILTER_ID & CAN_FILTER_MASK)) 
{ 
    Copy Data in Buffer 
} 
else 
{ 
    Discard the message 
} 

マスクに設定されているビットだけが比較されます。

ID 0x18EBFAB0のフレームを1つだけ受け入れるとします。その場合、フィルターIDを0x18EBFAB0、マスクを0x1FFFFFFFと設定します。 他のIDを持つメッセージが到着すると、要求された条件を満たさず、無視されます。あなたは0x127にID 0x120の間の任意のメッセージを受け入れるようにしたい場合は ID 0x18EBF9B0とのメッセージを受信した場合、

(0x18EBF9B0 & 0x1FFFFFFF) != (0x18EBFAB0 & 0x1FFFFFFF) 

メッセージは

を無視されます。 その場合は、マスクを0x1F0、フィルタIDを0x120に設定します。これにより、ID 0x123とのメッセージが受信されると、それらは0 に設定されるIDの最後の4ビットは無視され、

(0x123 & 0x1F0) == (0x120 & 0x1F0) 

メッセージが受け入れられます。

+0

ありがとうございます! – TangoOne

関連する問題