我做了一个基于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);
}