FwLib_STC8
FwLib_STC8 copied to clipboard
关于i2c中的demo mpu6050例程原始数据处理
- 例程路径: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));
}
}
原代码是按16bit读出然后交换高低8位成为新的16bit, 你的代码是按8bit读出, 然后两两组合成16bit, 我理解这两种方式是否都可以, 实际运行的输出是否有区别?