Estoy ejecutando mi primer programa de prueba CAN con STM32CubeMX, STM32F103C8T6 y Eclipse.
Usé la configuración predeterminada de CAN en STM32CubeMX (también probé el loopback pero los resultados son iguales).
Lo que veo (ver foto abajo) son dos cosas que no entiendo;
Cuando ejecuto la siguiente línea (verde): hcan.pTxMsg->ExtId = 0x01, termino en una interrupción de falla dura:
/**
@brief Esta función maneja la interrupción por falla dura. / void HardFault_Handler(void) { / CÓDIGO DE USUARIO INICIO HardFault_IRQn 0 */
/* CÓDIGO DE USUARIO FIN HardFault_IRQn 0 / while (1) { } / CÓDIGO DE USUARIO INICIO HardFault_IRQn 1 */
/* CÓDIGO DE USUARIO FIN HardFault_IRQn 1 */ }
¿Por qué no se actualiza el valor y por qué obtengo una falla de hardware (el puntero hcan.pTxMsg no es NULL ya que incluso muestra el campo StdId (incluso puede mostrar ExtId que tiene el valor 134222077 (no se muestra en la imagen a continuación)?
Por defecto, STM32CubeMx crea el código de inicialización para 'can' (si está seleccionado). Este código se puede encontrar en MX_CAN_Init y es llamado por main.
Sin embargo, no asigna/inicializa pRxMsg y pTxMsg.
El pTxMsg debe definirse como:
CanTxMsgTypeDef txMessage;
hcan.pTxMsg = &txMessage;
y el pRxMsg como:
CanRxMsgTypeDef rxMessage;
hcan.pRxMsg = &rxMessage;
Lundin
michel keijzers