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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.