【发布时间】:2019-12-19 05:11:40
【问题描述】:
我是新的 I2C 通信。我检查了一些正在运行的代码。我使用了他们使用的功能。但我无法获得任何数据。我想知道 I2C 是否必须进行初始配置?哪里有问题。这是我写的函数:
void GetI2CAccelerometer(uint8_t slaveAddress,uint8_t accelData[6])
{
// slaveAddress=0x68 (default address is written in datasheet)
HAL_I2C_Master_Transmit(&hi2c1,slaveAddress<<1,1,0x3B,1,200);
HAL_I2C_Master_Receive(&hi2c1,slaveAddress<<1,accelData,6,200);
HAL_I2C_Mem_Read(&hi2c1,(slaveAddress<<1)+1,0x3B,1,accelData,1,200);
// i tried this function too but not working
}
我使用 CubeMX 创建了这个项目。这是初始 I2C 配置,GPIO_A 时钟线在另一个我没有写的函数中被激活:
static void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 208;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
{
Error_Handler();
}
}
【问题讨论】:
-
I2C 和 GPIO 的初始化代码是什么?您是否为 I2C 连接了正确的上拉电阻。是否有数据从引脚输出或完全没有发生?
-
我已经编辑了初始 I2C 代码。我在主函数中编写了这段代码:HAL_I2C_Init(&hi2c1); mpu6050直接连接到stm32。我没有使用任何电阻。我看的地方没有电阻。我应该连接吗?
-
@Alperen,是的,你必须使用上拉电阻。通常 3.3K 对于 3.3V 电源的短线是不错的选择。
-
另外,
HAL_I2C_Mem_Read是干什么用的?这是与 I2C 内存芯片配合使用的特殊功能。 -
尝试将速度降低到 88000。i2c 在 STM32s 上很古怪。