STM32 HAL CAN no actualiza el valor y falla al configurar ExtId

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;

  • En la imagen a continuación, puede ver que superé la línea con hcan.pTxMsg->StdId = 0x321 (óvalo rojo izquierdo), pero el valor actual muestra 536891392 (óvalo rojo derecho).
  • 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)?

captura de pantalla

Solo una suposición descabellada, pero ¿configuró hcan en una instancia válida (CAN1 o como se llame en ST)? Similar a los punteros del mensaje. Si están apuntando a la basura, algo como esto podría suceder.
@Lundin... me indicaste la dirección correcta. Para mi referencia futura y otras, lo agregué como respuesta. Gracias por tu comentario.

Respuestas (1)

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;