This commit is contained in:
2026-03-10 03:05:49 +08:00
parent a9ac56dc52
commit d6872ad1e8
4 changed files with 114 additions and 58 deletions

View File

@@ -1,21 +1,16 @@
<!--
* @Descripttion:
* @version:
* @Author: Chenfu
* @Date: 2022-12-02 21:32:47
* @LastEditTime: 2022-12-05 15:27:57
-->
# super_can
# super_cap (适配版)
## 代码结构
.h中放置的是数据定义和外部接口,以及协议的定义和宏,.c中包含一些私有函数。
.h中放置的是数据和协议枚举定义、控制接口,.c中包含CAN接收中断的回调解析以及发送打包逻辑。当前版本已完全适配群星战队的超级电容协议。
## 外部接口
```c
SuperCapInstance *SuperCapInit(SuperCap_Init_Config_s* supercap_config);
void SuperCapSend(SuperCapInstance *instance, uint8_t *data);
void SuperCapSend(SuperCapInstance *instance, SuperCap_TxMsg_s *tx_data);
void SuperCapSetPowerOffset(SuperCapInstance *instance, uint8_t offset);
SuperCap_Msg_s SuperCapGet(SuperCapInstance *instance);
```
## 私有函数和变量
@@ -25,7 +20,7 @@ static uint8_t *rxbuff;
static void SuperCapRxCallback(can_instance *_instance)
```
`SuperCapRxCallback()`是super cap初始化can实例时的回调函数,用于can接收中断,进行协议解析。
SuperCapRxCallback()是super cap初始化can实例时的回调函数,用于CAN接收中断,进行协议解析(包含底盘功率右移量程的还原等处理)。
## 使用范例
@@ -33,22 +28,28 @@ static void SuperCapRxCallback(can_instance *_instance)
```c
SuperCap_Init_Config_s capconfig = {
.can_config = {
.can_handle = &hcan1,
.rx_id = 0x301,
.tx_id = 0x302
},
.recv_data_len = 4*sizeof(uint16_t),
.send_data_len = sizeof(uint8_t)
};
SuperCapInstance *ins =SuperCapInit(&capconfig);
.can_config = {
.can_handle = &hcan1,
.rx_id = 0x100, // 超级电容发给C板的ID
.tx_id = 0x001 // C板发给超级电容的ID
}
};
SuperCapInstance *ins = SuperCapInit(&capconfig);
// 如果需要设置功率补偿
SuperCapSetPowerOffset(ins, 5);
```
发送通过`SuperCapSend()`,建议使用强制类型转换:
发送控制指令时,使用 SuperCap_TxMsg_s 结构体:
```c
uint16_t tx = 0x321;
SuperCapSend(ins, (uint8_t*)&tx);
SuperCap_TxMsg_s tx_cmd = {
.Enable = 1,
.Charge = 1,
.Powerlimit = 60,
.ChargePower = 40
};
SuperCapSend(ins, &tx_cmd);
```