考虑以下代码部分:
...
typedef struct gyro_s
{
int16_t x;
int16_t y;
int16_t z;
} gyro_t;
...
/*
Configuration of:
- Gyroscopes' Full Scale Range.
- Deactivated Sleep Mode
*/
...
int main()
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C2_Init();
MX_USART3_UART_Init();
gyro_t gyro = {0};
int hal_ret = 0;
while (1)
{
hal_ret = HAL_I2C_Mem_Read(&hi2c2, (MPU6050_ADDR << 1) | 0x1, 0x43, 6, (uint8_t *) (&gyro), sizeof(gyro), 1000);
printf("%d %d %d %d %d %ld \n\r", gyro.x, gyro.y, gyro.z, hal_ret, hi2c2.ErrorCode);
HAL_Delay(1000);
}
}
...
因此,基本上,我想做的是从位于地址的 MPU6050 设备的陀螺仪寄存器中一次读取一堆字节MPU6050_ADDR << 0x1
。寄存器从地址开始0x43
,占用应存储在结构中的 6 个字节的数量gyro_t
。
我预先配置了陀螺仪的全量程范围并停用了睡眠模式。这些寄存器的单独读取没有任何问题。我读过一些关于突发读取的内容,但我似乎不明白如何激活它并使用它。
如果有人曾经使用过 MPU6050 突发读取模式并且可以提供帮助,我们将不胜感激。
其原型如下
HAL_I2C_Mem_Read()
:第四个参数
MemAddSize
应该是您要读取的寄存器地址的大小(以字节为单位)。对于此设备,地址是单个字节。因此,您应该为该参数传递1
(或) 。sizeof(uint8_t)
MemAddSize