我想通过 STM32CudeIDE 中的标准 CAN 总线发送超过 8 个字节,但我不知道该怎么做:我正在发送三个浮点值,其中每个浮点为 4 个字节。前两个浮点数进展顺利,但当我尝试发送第三个浮点数时,事情就陷入了麻烦,因为我们无法发送超过 8 个字节。 我从函数 main_function(dev_address); 中获取电压、温度和 SOC 的值;然后将它们发送到SendFloatsOverCAN(); 这是我的代码;
main_function(dev_address);
SendFloatsOverCAN(&hcan2, voltage, temperature, SOC);
HAL_Delay(500);
在函数中我通过 CAN 总线发送浮点值:
void SendFloatsOverCAN(CAN_HandleTypeDef *hcan, float voltageVal, float temperatureVal){
TxHeader.DLC = 8; // this specifies the length of the data that will be send //8
TxHeader.ExtId = 0; // since we use standard protocol we set it to zero
TxHeader.IDE = CAN_ID_STD; // the IDE is the standard ID
TxHeader.RTR = CAN_RTR_DATA; // we send data not frame
TxHeader.StdId = 0x102; // this is the identifire, must check why 0x103
TxHeader.TransmitGlobalTime = DISABLE;
HAL_CAN_AddTxMessage(&hcan2, &TxHeader, TxData, TxMailbox);
}
在这里,在接收字节中我收到它们:
float receivedVoltage;
float receivedTemperatuer;
float receivedSOC;
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData); // data will be recieved from CAN_RX_FIFO0, the header will be stored in RxHeader, data will be saved in RxData
}
假设其他配置正确。我知道可以通过标准 CAN 总线发送超过 8 个字节,以将数据分成较小的块或一次发送一个,但我不知道该怎么做。如果有人可以帮助我解释我,或者用一些代码行来理解,我真的很感激
我尝试通过标准 CAN 总线发送超过 8 个字节,但它不起作用,我不知道如何解决。
快速网络搜索告诉我:在 CAN 标准中,不可能发送超过 8 个字节的数据。我们可以使用 CAN TP 来实现这一点。
CAN TP 是 CAN 之上的另一层,允许每条消息发送超过 8 个字节。这是通过将有效负载切割(分段)成更小的块,然后以标准大小的 CAN 帧发送这些块来实现的(由协议处理)。
但是对于您的基本任务,我认为没有必要一路走来并为其添加另一层。相反,您可以为每个 CAN 帧发送一个浮点数和一个类型标签。此类型标签可以是 1=电压、2=温度等。
void SendFloatOverCAN(CAN_HandleTypeDef *hcan, float Value, unsigned char TypeTag){
TxHeader.DLC = 8;
// More header stuff goes here
// Pack the Value and Type Tag into TxData and send it
// This is just an example assuming TxData is a byte array
memcpy(Message, &f, sizeof(f));
Message[4] = TypeTag;
HAL_CAN_AddTxMessage(&hcan2, &TxHeader, TxData, TxMailbox);
}
TxData 数组如下所示:
[7] | [6] | [5] | [4] | [3] | [2] | [1] | [0] |
---|---|---|---|---|---|---|---|
资源。 | 资源。 | 资源。 | 标签 | 漂浮 | 漂浮 | 漂浮 | 漂浮 |