STM32 HAL CAN no actualiza el valor y se bloquea al configurar ExtId

1

Estoy ejecutando mi primer programa de prueba CAN utilizando STM32CubeMX, STM32F103C8T6 y Eclipse.

Usé la configuración predeterminada de CAN en STM32CubeMX (también probé loopback pero los resultados son iguales).

Lo que veo (ver foto abajo) es dos cosas que no entiendo;

  • En la imagen a continuación, puede ver que excedí 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 de falla dura. / void HardFault_Handler (void) { / EL CÓDIGO DE USUARIO COMIENZA HardFault_IRQn 0 * /

      / * FIN DEL CÓDIGO DE USUARIO HardFault_IRQn 0 / mientras (1) { } / EL CÓDIGO DE USUARIO COMIENZA HardFault_IRQn 1 * /

      / * FIN DEL CÓDIGO DE USUARIO HardFault_IRQn 1 * / }

¿Por qué no se actualiza el valor y por qué aparece un error 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 de abajo) ?

    
pregunta Michel Keijzers

1 respuesta

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;
    
respondido por el Michel Keijzers

Lea otras preguntas en las etiquetas