我如何使用STM32g4xx_HAL_Driver HAL库通过i2c读出传感器数据?

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

我基于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);

      }
c stm32 hal stm32cubeide
1个回答
0
投票

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

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