diff --git a/bsp/bsp_can.c b/bsp/bsp_can.c index c3045eb..57e882d 100644 --- a/bsp/bsp_can.c +++ b/bsp/bsp_can.c @@ -86,6 +86,14 @@ void CANTransmit(can_instance *_instance) HAL_CAN_AddTxMessage(_instance->can_handle, &_instance->txconf, _instance->tx_buff, &_instance->tx_mailbox); } +void CANSetDLC(can_instance *_instance, uint8_t length) +{ + if (length > 8) + while (1) + ; + _instance->txconf.DLC = length; +} + /* -----------------------belows are callback definitions--------------------------*/ /** @@ -102,11 +110,12 @@ static void CANFIFOxCallback(CAN_HandleTypeDef *_hcan, uint32_t fifox) HAL_CAN_GetRxMessage(_hcan, fifox, &rxconf, can_rx_buff); for (size_t i = 0; i < DEVICE_CAN_CNT; i++) { - if(instance[i]!=NULL) + if (instance[i] != NULL) { if (_hcan == instance[i]->can_handle && rxconf.StdId == instance[i]->rx_id) { - memcpy(instance[i]->rx_buff, can_rx_buff, 8); + instance[i]->rx_len=rxconf.DLC; + memcpy(instance[i]->rx_buff, can_rx_buff, rxconf.DLC); instance[i]->can_module_callback(instance[i]); break; } diff --git a/bsp/bsp_can.h b/bsp/bsp_can.h index a14ff09..7ca8948 100644 --- a/bsp/bsp_can.h +++ b/bsp/bsp_can.h @@ -19,6 +19,7 @@ typedef struct _ uint8_t tx_buff[8]; uint8_t rx_buff[8]; uint32_t rx_id; + uint8_t rx_len; void (*can_module_callback)(struct _ *); // callback needs an instance to tell among registered ones } can_instance; @@ -49,4 +50,12 @@ void CANTransmit(can_instance *_instance); */ void CANRegister(can_instance *instance, can_instance_config_s config); +/** + * @brief 修改CAN发送报文的数据帧长度;注意最大长度为8,在没有进行修改的时候,默认长度为8 + * + * @param _instance 要修改长度的can实例 + * @param length 设定长度 + */ +void CANSetDLC(can_instance *_instance,uint8_t length); + #endif diff --git a/bsp/bsp_can.md b/bsp/bsp_can.md index 2f939d6..d8cd7ea 100644 --- a/bsp/bsp_can.md +++ b/bsp/bsp_can.md @@ -11,10 +11,6 @@ 若你希望新增一个基于CAN的module,首先在该模块下应该有一个包含`can_instance`指针的module结构体(或当功能简单的时候,可以是单独存在的`can_instance`,但不推荐这样做)。 - - - - ## 代码结构 .h文件内包括了外部接口和类型定义,以及模块对应的宏。c文件内为私有函数和外部接口的定义。 diff --git a/modules/can_comm/can_comm.md b/modules/can_comm/can_comm.md index 540f1e5..ee1d359 100644 --- a/modules/can_comm/can_comm.md +++ b/modules/can_comm/can_comm.md @@ -2,7 +2,10 @@

neozng1@hnu.edu.cn

-双板CAN通信模块 +> TODO: +> +> 1. 增加数据长度可变的协议支持 +> 2. 简化接收流程 ## 总览和封装说明