MPU6050数据没有变化?

问题描述 投票:0回答:1

我正在使用 STM326050 MCU,并尝试使用 MPU6050 获取陀螺仪和加速度计数据(MPU6050 寄存器MPU6050 数据表)。我已使用以下代码确保 MPU6050 已正确初始化并准备就绪:

HAL_StatusTypeDef initMPU6050(void) {
  uint8_t check;
  HAL_I2C_Mem_Read(&hi2c1, MPU6050_ADDR, MPU6050_WHO_AM_I_REG, 1, &check, 1, 1000);
  if (check == 0x68) {
    for (int i = 0; i < 20; i++) {
      HAL_GPIO_TogglePin(GPIOA, LD2_Pin);
      HAL_Delay(200);
    }
    // the regSet variables set the gyro and accel to 500deg/s and 4g respectively
    uint8_t gyroRegSet = 0x08;
    uint8_t accelRegSet = 0x08;
    uint8_t pwrMgmtSet = 0;
    HAL_StatusTypeDef ret;
    ret = HAL_I2C_Mem_Write(&hi2c1, MPU6050_ADDR, MPU6050_GYRO_REG, 1, &gyroRegSet, 1, 100);
    if (ret != HAL_OK) {return HAL_ERROR;}
    HAL_Delay(50);
    ret = HAL_I2C_Mem_Write(&hi2c1, MPU6050_ADDR, MPU6050_ACCEL_REG, 1, &accelRegSet, 1, 100);
    if (ret != HAL_OK) {return HAL_ERROR;}
    HAL_Delay(50);
    ret = HAL_I2C_Mem_Write(&hi2c1, MPU6050_ADDR, MPU6050_PWE_MGMT_REG, 1, &pwrMgmtSet, 1, 100);
    if (ret != HAL_OK) {return HAL_ERROR;}
    return HAL_OK;
  }
  return HAL_ERROR;

后记,我尝试使用以下代码收集 X 方向的陀螺仪数据(确保一个轴工作,然后扩展到所有 6 轴):

HAL_StatusTypeDef readGyroGx(uint16_t* Gx, HAL_StatusTypeDef init) {
  if (init != HAL_OK) {return HAL_ERROR;}
  uint8_t gxh;`
  uint8_t gxl;
  HAL_I2C_Mem_Read(&hi2c1, MPU6050_ADDR, 0x43, 1, &gxh, 1, 1000);
  HAL_I2C_Mem_Read(&hi2c1, MPU6050_ADDR, 0x44, 1, &gxl, 1, 1000);
  Gx = (gxh<<8) | gxl;
}

并使用以下方法将其显示到屏幕上:

uint16_t buf[20];
  HAL_StatusTypeDef init = initMPU6050();
  uint16_t gx;
  while (1)
  {
    readGyroGx(&gx, init);
    sprintf((char*)buf, "%u \r\n", gx);
    HAL_UART_Transmit(&huart2, buf, strlen((char*)buf), 1000);
    HAL_GPIO_TogglePin(GPIOA, LD2_Pin);
    HAL_Delay(100);
  }

我尝试旋转和移动 MPU6050,但无论我如何移动它,Gx 值似乎都停留在值 60254。任何帮助将不胜感激。 谢谢。

c stm32 hal mpu6050
1个回答
0
投票

我发现了问题,结果是我的

Gx = (gxh<<8) | gxl;
行我需要使用 *Gx 而不是 Gx。为了输出数据,我应该使用
%hu
不使用 %u。

© www.soinside.com 2019 - 2024. All rights reserved.