Ich führe mein erstes CAN-Testprogramm mit STM32CubeMX, STM32F103C8T6 und Eclipse aus.
Ich habe die Standard-CAN-Einstellungen in STM32CubeMX verwendet (auch Loopback versucht, aber die Ergebnisse sind gleich).
Was ich sehe (siehe Bild unten), sind zwei Dinge, die ich nicht verstehe;
Wenn ich die nächste Zeile (grün) ausführe: hcan.pTxMsg->ExtId = 0x01, lande ich in einem Hard-Fault-Interrupt:
/**
@brief Diese Funktion verarbeitet Hard-Fault-Interrupts. / void HardFault_Handler(void) { / BENUTZERCODE BEGIN HardFault_IRQn 0 */
/* BENUTZERCODE ENDE HardFault_IRQn 0 / while (1) { } / BENUTZERCODE BEGIN HardFault_IRQn 1 */
/* BENUTZERCODE ENDE HardFault_IRQn 1 */ }
Warum wird der Wert nicht aktualisiert und warum erhalte ich einen Hardwarefehler (der Zeiger hcan.pTxMsg ist nicht NULL, da er sogar das Feld StdId anzeigt (er kann sogar ExtId anzeigen, die den Wert 134222077 hat (nicht im Bild unten gezeigt))?
Standardmäßig erstellt STM32CubeMx den Initialisierungscode für „can“ (falls ausgewählt). Dieser Code ist in MX_CAN_Init zu finden und wird von main aufgerufen.
Es weist jedoch nicht die pRxMsg und pTxMsg zu/initialisiert sie nicht.
Die pTxMsg sollte wie folgt definiert werden:
CanTxMsgTypeDef txMessage;
hcan.pTxMsg = &txMessage;
und die pRxMsg als:
CanRxMsgTypeDef rxMessage;
hcan.pRxMsg = &rxMessage;
Lundin
Michel Keijzers