nucleo64 - CAN-Bus will nicht.

OP #4588231
Lesenswert?

Hallo Gemeinde,

ich bin etwas angefressen...
Ich habe ein NUCLEO-L476RG-Board (STM32L476RG) und möchte über CAN 
kommunizieren, aber ER will nicht.

Setup:
Nucleo64-Board mit CAN-Transceiver (kleines Chinaboard mit sn65hvd230), 
PCAN-USB (mit PCanView) und PCAN-Diag.
Die Konfig wurde mit CubeMx "zusammengeklickt".
Terminierung 58Ohm.

Wenn alle o.g. Teinehmer am CAN sind kann ich von PCanView senden
und PCAN-Diag empfängt die Message.

Wenn PCAN-Diag abgestöpselt geht der CAN beim ersten Senden sofort auf 
BusHeavy. (sieht also keinen zweiten Teilnehmer mehr)

Die Verdrahtung sollte OK sein.
PA12=CAN1_Tx=Morphhaeder CN10:Pin12
PA11=CAN1_Rx=Morphhaeder CN10:Pin14

Jetzt bin ich am Ende mit meinem Latein...
Der STM32L476RG hat 80MHz HCLK, prescaler ist 10, für 125ns Zeitquantum.
CAN-Speed soll 500kBit/s sein.
Der Resultcode für "HAL_CAN_Transmit" und "HAL_CAN_Receive" ist immer 
HAL_TIMEOUT


Wäre für jeden Tipp dankbar.


Grüße Runout
Angehängte Dateien:
OP #4588458
Lesenswert?

@Uwe: Terminierung 58Ohm
@Karl: der PCAN-USB ist ein vollwertiger Teilnehmer,
er steht NICHT auf "listen only".

Meine Frage war: ist das Software-Setting OK (Timing etc.)

Überlege schon, ob ich einen MCP2551 probehalber dranhänge.
(wenn der 3V3-tolerant ist)
Von den China-Boards (sn65hvd230) habe ich drei Stück,
die können nicht alle kaputt sein...

Wenn Interesse besteht kann ich das ganze Miniprojekt
mal hier reinstellen.

Kann man mit dem Oszi die TTL-Pegel von PA11/PA12 messen?

bitte um weiteres Brainstorming

runout
Angehängte Dateien:
Gast #4588495
Lesenswert?

Sorry. Dachte PCAN-Diag wäre nur eine SW für den PCAN Adapter.

Takt: Keine Ahnung, bin zu faul das nachzurechnen. Bei mir sieht es so 
aus STM32F4 mit 168 MHz):
1
/* CAN1 init function */
2
void MX_CAN1_Init(void) {
3
   hcan1.Instance = CAN1;
4
   hcan1.Init.Prescaler = 6;
5
   hcan1.Init.Mode = CAN_MODE_NORMAL;
6
   hcan1.Init.SJW = CAN_SJW_1TQ;
7
   hcan1.Init.BS1 = CAN_BS1_10TQ;
8
   hcan1.Init.BS2 = CAN_BS2_3TQ;
9
   hcan1.Init.TTCM = DISABLE;
10
   hcan1.Init.ABOM = ENABLE;
11
   hcan1.Init.AWUM = DISABLE;
12
   hcan1.Init.NART = DISABLE;
13
   hcan1.Init.RFLM = DISABLE;
14
   hcan1.Init.TXFP = ENABLE;
15
   HAL_CAN_Init(&hcan1);
16
}
Der Instanzname ist Richtig? "CAN" statt "CAN1"?
Warum ist dein ABOM aus? Sonst musst Du das alles von Hand machen.
TXFP ist nur für spezielle Sachen relevant.

Was ich sonst noch habe ist der PullUp am RX-Pin aktiv. Sonst verrent 
sich der CAN-Controller beim Aufstart schon, wenn am Bus nichts los ist.

Oszi schon an CAN H und L gehabt? Fehlerursache No. 1 Verpolung, No. 2 
fehlernder Abschluss.

Transceiver hat Enable/VIO/Sleep etc. und wird richtig bedient?

Welchen Zustand hat der CAN Controller im STM32? Ist die Configuration 
abgeschlossen? Filter richtig eingestellt (Da ist die Software doof 
geschrieben, Standard-IDs muss man noch zurechtrücken)?
OP #4588585
Lesenswert?

Hallo Karl,

aus stm32l476xx.h:
#define CAN                 ((CAN_TypeDef *) CAN1_BASE)
#define CAN1                ((CAN_TypeDef *) CAN1_BASE)

ist also egal...

hcan1.Init.ABOM - werde ich ausprobieren

in HAL_CAN_MspInit() steht:

    /**CAN1 GPIO Configuration
    PA11     ------> CAN1_RX
    PA12     ------> CAN1_TX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

sieht so aus, als hätte PA11 keinen Pullup.
R-Output = High = rezessiv

PCAN-Diag ist (u.a.) ein Oszi, aber da sieht man nix.
(wenn ich von PCAN-USB aus sende kommt alles richtig an, der µC hingegen 
ist stumm und taub...)

Danke für die Tipps
OP #4591069
Lesenswert?

So, Problem gelöst...

Die sn65hvd230-Baugruppe war's.
Schaltplan siehe oben.

Jetzt werkelt der gute alte MCP2551 mit 5V.
Der "Rx" ist über einen 1k-Angstwiderling auf den PA11 vom Nucleo 
geschaltet.
ob wohl die Eingänge 5V-tolerant sind.

Warum das China-Geraffel nicht geht ist unklar.
Die Pegel sollten lt. Datenblatt passen.
5€ das Stück, was solls...

Grüße Runout
Angehängte Dateien:

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