我想利用这个学期提高我的C技能,并且我学会了如何使用I2C以及如何与MPU9255进行通信,但是我面临的最后一个麻烦是传感器返回错误的值。返回的值从0浮动到65000,但不是线性的。我认为那是因为我对我的代码上的数据类型或字节合并产生了一些混淆。有人可以帮我指点一下代码吗?
- uint8_t Test[] = "
AccelX:
";
- HAL_UART_Transmit(&huart1,Test,sizeof(Test),100);
- //SET X_HIGH REGISTER ADDRESS
- i2cData = 0x3B;
- HAL_I2C_Master_Transmit(&hi2c1, adressMPU, &i2cData, 1, 100);
- //REQUEST 6 BYTES OF DATA (ACCEL X, Y AND Z)
- HAL_I2C_Master_Receive(&hi2c1, adressMPU, receive_buffer, 6, 100);
- AccelX = (char)receive_buffer[0]<<8 | (char)receive_buffer[1];
- AccelY = (char)receive_buffer[2]<<8 | (char)receive_buffer[3];
- AccelZ = (char)receive_buffer[4]<<8 | (char)receive_buffer[5];
- //PRINTA NA SERIAL 1
- len = sprintf(buffer, " %i
", AccelX); //sprintf will return the length of 'buffer'
- HAL_UART_Transmit(&huart1, (uint8_t *)buffer, len, 1000);
- HAL_Delay(500);
复制代码更新:我只注意到一件事:从0到16768,传感器测量是正确的,但是当我在轴上方时,传感器从65536变为~49000,应该是从0到-16768。肯定是转换错误,但我仍然无法看到错误的确切位置。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>