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

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