FwLib_STC8 icon indicating copy to clipboard operation
FwLib_STC8 copied to clipboard

关于i2c中的demo mpu6050例程原始数据处理

Open perseverance51 opened this issue 1 year ago • 1 comments

  • 例程路径:FwLib_STC8\FwLib_STC8\demo\i2c\mpu6050:
  • mpu6050.c内容:
uint16_t swap(uint16_t num)
{
    return (num >> 8) | (num << 8);
}

void MPU6050_ReadAll(uint16_t *buf)
{
    uint8_t i;
    I2C_Read(MPU6050_ADDR, MPU6050_REG_ACCEL_XOUT_H, (uint8_t *)buf, 14);
    for (i = 0; i < 7; i++)
    {
        *(buf + i) = swap(*(buf + i));
    }
}

MPU6050 设备是以大端模式存储的,即高字节在前,低字节在后,在读取原始数据出来后,将高字节的数据左移8位,再或上低字节的数据。

  • 是否应该这样处理才合理:
uint16_t swap(uint16_t num)
{
	 return (num << 8);
}

void MPU6050_ReadAll(uint16_t *buf)
{
    uint8_t i;
    I2C_Read(MPU6050_ADDR, MPU6050_REG_ACCEL_XOUT_H, (uint8_t *)buf, 14);
    for (i = 0; i < 7; i++)
    {
        *(buf + i) = swap(*(buf + 2*i))|(*(buf + 2*i+1));
    }
}

perseverance51 avatar Apr 06 '23 09:04 perseverance51

原代码是按16bit读出然后交换高低8位成为新的16bit, 你的代码是按8bit读出, 然后两两组合成16bit, 我理解这两种方式是否都可以, 实际运行的输出是否有区别?

IOsetting avatar Apr 10 '23 14:04 IOsetting