Если еще актуально:
https://en.wikipedia.org/wiki/CAN_bus#Error_frameНе знаю где как, но в stm32 аппаратный кан выдаёт следующие ошибки:
#define HAL_CAN_ERROR_NONE ((uint32_t)0x00) /*!< No error */
#define HAL_CAN_ERROR_EWG ((uint32_t)0x01) /*!< EWG error */
#define HAL_CAN_ERROR_EPV ((uint32_t)0x02) /*!< EPV error */
#define HAL_CAN_ERROR_BOF ((uint32_t)0x04) /*!< BOF error */
#define HAL_CAN_ERROR_STF ((uint32_t)0x08) /*!< Stuff error */
#define HAL_CAN_ERROR_FOR ((uint32_t)0x10) /*!< Form error */
#define HAL_CAN_ERROR_ACK ((uint32_t)0x20) /*!< Acknowledgment error */
#define HAL_CAN_ERROR_BR ((uint32_t)0x40) /*!< Bit recessive */
#define HAL_CAN_ERROR_BD ((uint32_t)0x80) /*!< LEC dominant */
#define HAL_CAN_ERROR_CRC ((uint32_t)0x100) /*!< LEC transfer error */
TEC и REC считаются апапратно.
На эти ошибки реагировать можно по разному: например наличие ошибки Acknowledgment error - говорит о том, что либо не настроены тайминги (скорость), либо никого нет на шине. Ну и т.д.
Надеюсь помог!