3

STM32F4Discoveryキットを使用して、単純なCANインターフェイスを構築しています。CANメッセージを送信できるように設定できましたが、受信できなくなりました。私の知る限り、CANメッセージを受信するには、受け入れフィルターを通過する必要があります。ID 0x700から0x7FFまでのすべての(標準、2.0A)メッセージを受け入れるようにフィルターを設定したいと思います。どうすればよいですか?

リファレンスマニュアルを読みましたが、実際にフィルタリングを構成する方法がわかりません。

void CAN_FilterConfiguration(void) {
    CAN_FilterInitTypeDef CAN_FilterInitStructure;

    /* CAN2 filter configuration */
    CAN_FilterInitStructure.CAN_FilterNumber = 1; // filter number = 1 (0<=x<=13)
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
    CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0; // FIFO = 0
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
}
4

1 に答える 1

11

フィルターはリストまたはマスク モードで動作しています。それらは 32 ビットまたは 16 ビットにすることができます。32 個のフィルターを使用できますが、0 ~ 13 は CAN1 に割り当てられ、14+ は CAN2 に割り当てられます。

1 つのフィルターには、1 つの 32 ビット フィルターまたは 2 つの 16 ビット フィルターがあります。

  • STDID[10:0]、EXTID[17:0]、IDE、および RTR ビット用の 1 つの 32 ビット フィルタ。
  • STDID[10:0]、RTR、IDE、および EXTID[17:15] ビット用の 2 つの 16 ビット フィルタ。

これは、テストされた単語を作成する方法です。マスク モードでは、CAN は TESTED & MASK == ID の場合に受け入れます。リストモードでは、TESTED == ID または MASK == ID の場合に CAN が受け入れます。16 ビットには 2 つのフィルターがあり、32 ビットには 1 つのフィルターがあります - ID = IDHigh << 16 | IDLow (およびマスクに参加するのと同じ方法)。

DM0090リンクの詳細

于 2012-12-11T12:55:33.867 に答える