在STM32CubeIDE中通过标准CAN总线发送超过8个字节

问题描述 投票:0回答:1

我想通过 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 个字节,但它不起作用,我不知道如何解决。

stm32 can-bus stm32cubeide
1个回答
0
投票

快速网络搜索告诉我:在 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]
资源。 资源。 资源。 标签 漂浮 漂浮 漂浮 漂浮
© www.soinside.com 2019 - 2024. All rights reserved.