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

Posted

技术标签:

【中文标题】如何使用 STM32g4xx_HAL_Driver HAL 库通过 i2c 读取传感器数据?【英文标题】:How do I use the STM32g4xx_HAL_Driver HAL library to read out the sensor data with i2c? 【发布时间】:2020-09-13 10:00:35 【问题描述】:

我基于STM32G431制作了一个定制的MCU Board,并尝试读取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 构建:

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的帮助。我使用 STM32CubeMX 进行第一次配置。然后我在STM32CubeIDE中编辑了main.c。首先打开和关闭简单的 LED,所以引脚应该可以工作。但现在作为下一步,我尝试读取传感器。我不使用逻辑分析仪,只有一个绿色和红色 LED 连接到 HAL_OK 语句(上面帖子中的代码)。从 Arduino 到定制 MCU 的步骤非常艰难^^。你有别的想法吗? 0x1 和 0x2 也不起作用。 代码好像没有问题。真的很难请客。我发现一些使用 Arduino 制作 DIY 逻辑分析仪的项目,例如 here 或 here。让我们尝试使用一个并发布信号结果,以便我可以更轻松地分析它。 我想这样做,但逻辑分析仪不工作...另一个问题^^ 我想出了如何使用逻辑分析仪,但不幸的是 I2C 似乎已经死了。我没有可以记录的信号。

以上是关于如何使用 STM32g4xx_HAL_Driver HAL 库通过 i2c 读取传感器数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何读取stm32 flash里面的内容

CMSIS & STM32,如何开始? [关闭]

傻瓜式教程:如何使用“多合一”开发工具STM32CubeIDE

如何设置STM32生成标准CRC32

如何使用串口来给STM32下载程序

stm32如何使用llvm+clang编译