0

我做了一个基于STM32G431的定制MCU板,并尝试读取MPU6050的寄存器。但我不能让 HAL_I2C_Mem_Read 工作。这是我试图使用的功能:

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);

我将其配置为:

HAL_I2C_Mem_Read(&hi2c3, 0x68, 0x0D, 8, &Buffer, 1, 10000);

我错过了什么?

这是控制它是否有效的部分。我切换红色和绿色 LED,这取决于它是否返回 HAL_OK。

status = HAL_I2C_Mem_Read(&hi2c3, 0x68, 0x0D, 0x2, &Buffer, 1, 10000);
/*if (HAL_I2C_Init(&hi2c3) == HAL_OK)*/
if (status == HAL_OK)
  {
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);

  }

/*if (HAL_I2C_Init(&hi2c3) != HAL_OK)*/
if (status != HAL_OK)
      {
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);

      }

这是 MCU+Sensor+LED 构建: STM32G431 定制板

4

1 回答 1

0

我认为uint16_t MemAddSize必须是I2C_MEMADD_SIZE_8BIT(0x1) 或I2C_MEMADD_SIZE_16BIT(0x2) 不在8您的代码中。
P/S:可以肯定的是,您是否使用了 stm32Cube 并正确配置了它?您是否选择并插入了正确的引脚?并且不要忘记检查您的硬件,可能有些网络没有连接或 i2c 总线受噪声影响。我建议你使用逻辑分析仪来调试这样的协议。
做一名电气工程师是痛苦的。祝你好运,我的朋友。

于 2020-05-27T09:46:06.320 回答