You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32通过MCP2515传输CAN数据时数值异常问题求助

CAN总线偶发数据比特丢失问题

我用两块MCP2515在Jetson Nano与STM32F411E-DISCO之间通过CAN总线传输传感器数据。STM32侧连接了IMU(MPU9255)和编码器,持续向Jetson Nano发送数据,但目前遇到偶发的不明原因问题,疑似存在数据比特丢失,导致传输的数值出现减半或正负颠倒的情况。该现象并非持续发生,但严重影响正常使用。

例如,通过I2C从IMU(MPU9255)获取的数据为172.321时,接收端的数据可能变为-173.321或86.6605。

STM32侧MCP2515传输代码

uCAN_MSG ImuData;

void prepareData(float* data1, float* data2, uCAN_MSG* canData)
{
 uint8_t DataToArray[8];
 memcpy(DataToArray,data1,sizeof(float));
 memcpy(DataToArray + sizeof(float),data2,sizeof(float));
 canData->frame.data0 = DataToArray[0];
 canData->frame.data1 = DataToArray[1];
 canData->frame.data2 = DataToArray[2];
 canData->frame.data3 = DataToArray[3];

 // data 2
 canData->frame.data4 = DataToArray[4];
 canData->frame.data5 = DataToArray[5];
 canData->frame.data6 = DataToArray[6];
 canData->frame.data7 = DataToArray[7];
}

int main(void)
{
 HAL_Init();
 SystemClock_Config();
 MX_GPIO_Init();
 MX_TIM4_Init();
 MX_TIM3_Init();
 MX_TIM2_Init();
 MX_TIM5_Init();
 MX_I2C1_Init();
 MX_SPI1_Init();
 CANSPI_Initialize();
 ImuData.frame.idType = dEXTENDED_CAN_MSG_ID_2_0B;
 ImuData.frame.id = 0x01;
 ImuData.frame.dlc = 8;
 while (1)
     {
        prepareData(&MPU9255.pitch, &MPU9255.yaw, &ImuData);
        CANSPI_Transmit(&ImuData);
        HAL_Delay(50);
     }
}

Jetson Nano侧数据解析代码

import can
import struct

bus = can.interface.Bus(channel = "can0",bustype = "socketcan")
while 1:
   msg = bus.recv()
   data = struct.iter_unpack("f",msg.data)
   print(*data)

接收数据异常示例

当STM32侧原始数据为PITCH = -15.51,YAW = 327.82时,Jetson Nano侧接收的数据如下:

PITCH : -23.011926651000977 YAW : 327.2798156738281
PITCH : -23.011926651000977 YAW : 327.2798156738281
PITCH : -23.01274299621582 YAW : 163.6371459960938
PITCH : -23.01274299621582 YAW : 163.6371459960938
PITCH : -23.10681915283203 YAW : 327.1934509277344
PITCH : -23.10681915283203 YAW : 327.1934509277344
PITCH : 23.227672576904297 YAW : 326.1050720214844
PITCH : 23.227672576904297 YAW : -163.6371459960938
PITCH : 15.577387809753418 YAW : 327.3647766113281
PITCH : 15.577387809753418 YAW : 327.3647766113281
PITCH : -15.53555965423584 YAW : 16.6371459960938
PITCH : -15.53555965423584 YAW : 327.60906982421875
PITCH : 22.953519821166992 YAW : 327.57177734375
PITCH : 22.953519821166992 YAW : 327.57177734375
PITCH : 15.467488288879395 YAW : 327.48828125
PITCH : 15.467488288879395 YAW : 327.48828125

使用的库

  • STM32侧MCP2515库基于eziya的STM32_SPI_MCP2515实现
  • MPU9255库基于ibrahimcahit的MPU9255-Quaternion-AHRS-STM32实现

内容的提问来源于stack exchange,提问作者Emir evcil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:37:04