IOsetting / FwLib_STC8

A lite firmware library for STC8G/STC8H series MCU
Apache License 2.0
122 stars 32 forks source link

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

Open perseverance51 opened 1 year ago

perseverance51 commented 1 year ago

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位,再或上低字节的数据。

- 是否应该这样处理才合理:

```c
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));
    }
}
IOsetting commented 1 year ago

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