STM8S CAN Bus Fitlering

Gast #6143342
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
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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.