Open perseverance51 opened 1 year ago
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位,再或上低字节的数据。 - 是否应该这样处理才合理: ```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)); } }
原代码是按16bit读出然后交换高低8位成为新的16bit, 你的代码是按8bit读出, 然后两两组合成16bit, 我理解这两种方式是否都可以, 实际运行的输出是否有区别?
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)); } }