// #include "can.h" // #include "device/can.h" // #include "stm32f3xx_hal.h" // // CAN 调试结构体实例 // // 初始化 CAN // void CAN_Init(CAN_HandleTypeDef *hcan_Cur) // { //重置CAN // HAL_CAN_Init(hcan_Cur); // 初始化CAN // // 仅初始化CAN,不配置接收过滤器 // HAL_CAN_Start(hcan_Cur); // 开启CAN // } // // CAN 发送函数,添加超时机制 // uint8_t CAN_SendData(CAN_HandleTypeDef *hcan_Cur, uint8_t *pData, uint16_t ID) // { // HAL_StatusTypeDef HAL_RetVal = HAL_ERROR; // uint8_t FreeTxNum = 0; // CAN_TxHeaderTypeDef TxMessage; // TxMessage.StdId = ID; // TxMessage.DLC = 8; /* 默认一帧传输长度为8 */ // TxMessage.IDE = CAN_ID_STD; // TxMessage.RTR = CAN_RTR_DATA; // uint32_t timeout = 5000; // 增加超时时间 // while (FreeTxNum == 0 && timeout > 0) // { // FreeTxNum = HAL_CAN_GetTxMailboxesFreeLevel(hcan_Cur); // if (FreeTxNum > 0) break; // 如果有空闲邮箱,退出循环 // osDelay(1); // 避免忙等待 // timeout--; // } // if (timeout == 0) // { // return 1; // 超时,发送失败 // } // HAL_RetVal = HAL_CAN_AddTxMessage(hcan_Cur, &TxMessage, pData, (uint32_t *)CAN_TX_MAILBOX1); // if (HAL_RetVal != HAL_OK) // { // return 1; // 发送失败 // } // return 0; // 发送成功 // }