STM8S CAN Bus Fitlering

Gast #6143342
Lesenswert?

Hey!

Ich versuche gerade, den CAN Bus auf einem STM8S Board zum Laufen zu 
bekommen, scheitere aber aus irgendeinem Grund an der Filterung.
Ich verwende die ST Standard Library und mein Ziel ist, nur Nachrichten
mit der ID 0xAED zu empfangen. Mein Protokoll nutzt das Extended ID 
Format.

Mein Code-Schnipsel aus der CAN-Initalisierung sieht folgendermaßen aus:

  /* CAN filter init */
  CAN_FilterNumber = CAN_FilterNumber_0;
  CAN_FilterActivation = ENABLE;
  CAN_FilterMode = CAN_FilterMode_IdMask;
  CAN_FilterScale = CAN_FilterScale_32Bit;
  CAN_FilterID1=0x00AED100;
  CAN_FilterID2=0;
  CAN_FilterID3=0;
  CAN_FilterID4=0;
  CAN_FilterIDMask1=0x00FFF000;
  CAN_FilterIDMask2=0;
  CAN_FilterIDMask3=0;
  CAN_FilterIDMask4=0;
  CAN_FilterInit(CAN_FilterNumber, CAN_FilterActivation, CAN_FilterMode,
                 CAN_FilterScale,CAN_FilterID1, CAN_FilterID2,
                 CAN_FilterID3,
                 CAN_FilterID4,CAN_FilterIDMask1, CAN_FilterIDMask2,
                 CAN_FilterIDMask3, CAN_FilterIDMask4);

Wahrscheinlich ist es nur ein trivialer Fehler, aber ich bin recht neu 
auf dem Gebiet und habe leider noch wenig Erfahrung.

Danke!
Mike
Gast #6150995
Lesenswert?

Bin jetzt soweit, dass ich die ersten 16 bit filtern kann. Mein Fehler 
war, dass ich die IDE und RTR nicht in die Adresse miteingerechnet habe. 
Mein Code sieht jetzt wie folgt aus:

    /* CAN filter init */
  CAN_FilterNumber = CAN_FilterNumber_2;
  CAN_FilterActivation = ENABLE;
  CAN_FilterMode = CAN_FilterMode_IdMask;
  CAN_FilterScale = CAN_FilterScale_32Bit;
  CAN_FilterID1=0xc7;
  CAN_FilterID2=0xed;
  CAN_FilterID3=0x02;
  CAN_FilterID4=0x02;
  CAN_FilterIDMask1=0xFF;
  CAN_FilterIDMask2=0xE7;
  CAN_FilterIDMask3=0xE0;
  CAN_FilterIDMask4=0x00;
  CAN_FilterInit(CAN_FilterNumber, CAN_FilterActivation, CAN_FilterMode,
                 CAN_FilterScale,CAN_FilterID1, CAN_FilterID2, 
CAN_FilterID3,
                 CAN_FilterID4,CAN_FilterIDMask1, CAN_FilterIDMask2,
                 CAN_FilterIDMask3, CAN_FilterIDMask4);


Für die Adresse 0x18FEC101 kann ich nun die 0x18FE, also die vorderen 
16bit filtern. Aus irgendeinem Grund schaffe ich es jedoch nicht, auch 
den hinteren Teil zu filtern. Gibt es vielleicht hierzu irgendwelche 
Ideen oder Erfahrungen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren