#ifndef DS_SN65HVD230_H #define DS_SN65HVD230_H #include #ifdef STM32G030xx #include "stm32g0xx_hal.h" #endif #ifdef STM32G0B1xx #include "stm32g0xx_hal.h" #endif /* Управляющий дескриптор для STM32G0 */ typedef struct { FDCAN_HandleTypeDef *hfdcan; // Указатель на аппаратный FDCAN в STM32G0 } SN65HVD230_t; /* Унифицированная структура кадра (Классический CAN-режим на FDCAN) */ typedef struct { uint32_t Identifier; // ID пакета (11 или 29 бит) uint32_t IdType; // Тип: FDCAN_STANDARD_ID или FDCAN_EXTENDED_ID uint32_t TxFrameType; // Тип кадра: FDCAN_DATA_FRAME или FDCAN_REMOTE_FRAME uint32_t DataLength; // Количество байт данных: от FDCAN_DLC_BYTES_0 до FDCAN_DLC_BYTES_8 uint8_t Data[8]; // Буфер данных (макс 8 байт для классического CAN) } CAN_Message_t; /* Прототипы функций управления */ HAL_StatusTypeDef SN65HVD230_Init(SN65HVD230_t *node, FDCAN_HandleTypeDef *hfdcan_handle); HAL_StatusTypeDef SN65HVD230_Start(SN65HVD230_t *node); HAL_StatusTypeDef SN65HVD230_Stop(SN65HVD230_t *node); /* Функции отправки и приема */ HAL_StatusTypeDef SN65HVD230_Transmit(SN65HVD230_t *node, CAN_Message_t *msg, uint32_t timeout_ms); HAL_StatusTypeDef SN65HVD230_Receive(SN65HVD230_t *node, CAN_Message_t *msg, uint32_t timeout_ms); #endif // DS_SN65HVD230_H