我制作了一个带有 MPU-6050 和 STM32L072CZTx 的定制板。我的问题是,MPU-6050 在成功传输后没有确认。
我在 SCL 和 SDA 上有两个 4,7k 引体向上。重新启动 MCU 并不能解决问题。我必须拔掉电源才能让 MPU 再次 ACK 进行一些传输。
我正在使用 STM32 HAL 并添加了 2 张图像以进行说明。
我尝试了什么:
- 更换 MPU6050
- 降低 I2C 频率
- 多得多...
谢谢你的帮助。
HAL_StatusTypeDef writeBytes(uint8_t deviceAdd, uint8_t regAdd, uint8_t *data, uint8_t size)
{
uint8_t buffer[size + 1];
buffer[0] = regAdd;
memcpy((buffer + 1), data, size);
return HAL_I2C_Master_Transmit(&hi2c1, deviceAdd << 1, buffer, size + 1, I2C_TIMEOUT);
}
HAL_StatusTypeDef readBytes(uint8_t deviceAdd, uint8_t regAdd, uint8_t *data, uint8_t size)
{
return HAL_I2C_Mem_Read(&hi2c1, (uint16_t)(deviceAdd << 1), (uint16_t)regAdd, I2C_MEMADD_SIZE_8BIT, data, size, I2C_TIMEOUT);
}