如何使用 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 读取传感器数据?的主要内容,如果未能解决你的问题,请参考以下文章