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
相关产品推荐
相关产品推荐

