CAN Grundsatzfrage bitte um HILFE!

Gast #4039880
Lesenswert?
• ▲
▼
Hallo zusammen,

ich hätte eine grundsätzlich Frage zum CAN - Bus.

Ich nutze den Busmaster in Verbindung mit einem Vector VN 1610.
Mittels des Busmasters erstelle ich eine Nachricht (Zyklische 
Übertragung alle 100ms) die ich senden möchte.
Beim Start der Nachrichtenübertragung sehe ich im Message - Window des
Busmasters, dass die Nachricht übertragen wird.
Mit dem Oszi zähle ich die Anzahl der gesendeten Frames.
Nach 204 Frames stoppt die Übertragung plötzlich und ich muss den
USB - CAN - Adapter vom USB trennen und neu verbinden um wieder eine 
Übertragung starten zu können.

Nun zu meiner Frage, warum werden die Nachrichten nicht in einer 
Endlosschleife übertragen?
Läuft hier ein Buffer über?


Viele Grüße!
Gast #4039897
Lesenswert?
• ▲
▼
Weil kein Empfänger angeschlossen ist, der das ACK Bit sendet, stellt 
der Sender einen Fehler fest. Bitte erst den Wikipedia Artikel zu CAN 
vollständig lesen, diese Frage kommt hier alle 3 Tage...
Gast #4039915
Lesenswert?
• ▲
▼
Nein, fehlende ACKs führen dazu, dass der Knoten in den Zustand 
"Fehler-passiv" wechselt, aber nicht in den Zustand Bus-off. Er sendet 
weiterhin, allerdings lediglich passive Fehlerflags und mit einer 
zusätzlichen Verzögerung (SUSPEND TRANSMISSION). Ich hänge mal die 
CAN-Spec. Version 2 an, die mal in der englischen Wikipedia verlinkt war 
(siehe Kapitel 7).
Angehängte Dateien:
Gast #4039937
Lesenswert?
• ▲
▼
Hier mal meine Konfiguration des CAN - Empfängers in meinem STM32
1
main.c
2

3
  // CAN RX Filter
4
  CAN_FilterInitTypeDef CAN_FilterInitStructure;
5
  CAN_FilterInitStructure.CAN_FilterNumber = 0;
6
  CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
7
  CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
8
  CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0200 << 5;
9
  CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
10
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
11
  CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
12
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
13
  CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
14
  CAN_FilterInit(&CAN_FilterInitStructure);
15

16

17

18
stm32f10x_it.c
19

20
  void USB_LP_CAN1_RX0_IRQHandler(void)
21
            {
22

23

24
 CanRxMsg canRxMessage;
25
 CAN_Receive(CAN1, CAN_FIFO0, &canRxMessage);
26

27
 switch(canRxMessage.StdId)
28
          {
29
  case 200: // Mode Command
30
  WriteRegisters[0][0] = canRxMessage.Data[0];
31
        WriteRegisters[0][1] = canRxMessage.Data[1];
32
  WriteRegisters[0][2] = canRxMessage.Data[2];
33
        WriteRegisters[0][3] = canRxMessage.Data[3];
34
                break;
35

36

37
             default:break;
38
              }
39

40

41

42
             CAN_ClearITPendingBit(CAN1, CAN_IT_FF0);
43

44
            }

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.