STM32F2xx und CAN 2.0B HiSpeed - Dauerdatenfunk und womit mitlesen?

OP #4781693
Für ein Teilprojekt (Stepper Motoren und LED's ansteuern, Befehle über 
CAN) benutze ich ein STM32F205 und eben CAN 2.0B als Protokoll mit 500 
kBit.

Jetzt habe ich festgestellt, dass ich auf dem CAN "Dauerfeuer" habe, 
also es werden nur Daten rausgesendet obwohl die main()-Funktion leer 
ist und auch Interrupts sind noch nicht implementiert. Die Frage ist 
jetzt, was wird da gefunkt und warum?

Im Prinzip sieht der Pseudo-Code dazu so aus:
1
#include .....
2

3
void main(void){
4

5
  CANobject oCAN1;
6

7
  Init_Hardware();
8

9
  HAL_Delay(500); // 0,5 Sek. warten bis der Rest aka die "Umwelt" auch soweit ist
10

11
  oCAN1.Configure.Baudrate(500000);
12
  oCAN1.Configure.Protocol(EXTENDED);
13
  oCAN1.Configure.Address(OWNADR);
14
  oCAN1.Configure.Filter(OWNADR, GROUPADR); // Filter aktiv
15
  oCAN1.Configure.Interrupts(0); // keine Interrupts aktiv
16
  oCAN1.Enable();
17

18
  oCAN1.SendMessage("Hallo Welt"); // nur zum testen
19

20
  while(TRUE)
21
  {
22
    // Eine_X_Funktion();
23
    // Eine_andere_Funktion();
24
    // CAN_Fkt();
25
  }
26
}

Also die eigentlichen Funktionen in main() bzw. while(1) habe ich 
deaktiviert, Interrupts sind noch nicht eingebaut aber der Filter steht 
und muss noch getestet werden.

Das Board läuft mit der SW derzeit alleine also ohne weitere 
CAN-Teilnehmer, sollte also 1x das "Hallo Welt" rausfunken und dann 
sollte Ruhe sein. Am CAN-Bus ist weiter angeschlossen:
- ein USBtin (CAN-USB Interface)
- Oszilloskop

Aus dem Oszi sehe ich Datenpakete ohne Ende. Zwischen den Datenpaketen 
sind nur 50 µs Pause = Buslast nahe 100%. Das Signal ist vom Verlauf her 
sauber.
Was auf dem Bus gesendet wird sehe ich mit dem USBtin nicht. Das Teil 
ist scheinbar überfordert oder sowas. Es steht auf Listen-Only und 
500000 und es kommt nichts im PC bzw. Laptop an, auch nicht die erste 
Message. Als Tool habe ich USBtinViewer_v1.3.jar installiert. Das 
einzige was ich sehen kann ist irgendwelchen Datenmüll, den ich direkt 
beim Einstecken des Steckers (Strom und CAN-Bus) bekomme und das ist 
immer das gleich, egal auf welche Geschwindigkeit der USBtin steht. Die 
Kommunikation zwischen Laptop und USBtin funktioniert, das Teil wird 
erkannt.


Warum werden kontinuierlich Daten rausgefunkt? Ich bin mir zu 98% 
sicher, dass die vom Board kommen und nicht vom USBtin. Ich vermute mal, 
dass es ein Config-Fehler im CAN-Setup des STM32F205 ist oder das ist 
iwie "normal"....
Gibt es ein preiswertes Tool, dass bei 500kBaud und 100% Buslast 
zuverlässig Daten zum Rechner übertragen kann? Ich schätze nämlich, dass 
der Flaschenhals die Verbindung zum Rechner ist (USB -> FTDI -> 115200 
Baud?) und das die SW im USBtin quasi überrannt wird. Aber alles nur 
Spekulation.


Ich dachte auch, ob es evtl. möglich ist, mit einem BananaPi den CAN 
abzuhören. Wenn ich mich nicht täusche, hat das Teil ein CAN-Interface 
schon drauf und könnte dann alles stumpf auf die angeschlossene 
Festplatte speichern. Soweit die Theorie....

Kurze Hintergundinfo zum Umfeld: Ich arbeite bei einem Start-Up mit 
insges. 5 Leuten und Investoren als Geldgeber. Von daher müssen wir mit 
den preiswerten Zeug zurecht kommen.
OP #4781730
Wenn ich einen Broadcast schicke, muss ich dann von allen eine 
Bestätigung erwarten?

Selbst wenn es an nur einen spezifischen Empfänger ginge, woher soll der 
Sender wissen, dass eine Bestätigung kommen soll und vom wen? Das müsste 
doch in der SW drin sein, ist es aber nicht.
Und woher sollte der Empfänger wissen, dass die Message bestätigt werden 
soll? Das müsste doch auch in der SW sein.
Gast #4781746
Es muss mindestens ein Teilnehmer das Paket korrekt empfangen haben. 
Sonst wird das erneut gesendet. Dies ist je nach Controller 
deaktivierbar.

Darf sollte aber auch im Datenblatt des Controllers und in der Can spec 
stehen.
Gast #4781754
K. H. schrieb:
> Und woher sollte der Empfänger wissen, dass die Message bestätigt werden
> soll? Das müsste doch auch in der SW sein.

Das ist im CAN-Controller enthalten. Nicht in deiner selbstgeschriebenen 
Software.
Gast #4781758
Gerade einmal geschaut... Das steht alles im Reference manual. 
Deaktivieren kann man das mit dem nart-bit.

Lies dir das Kapitel mal durch. Dann sollte vieles klar sein.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 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.