通过cubemx配置IIC:
速率配置为100KHz,可以选择StandardMode,Fast Mode, Fast Mode Plus,这里选择StandardMode;
选择RiseTime,FallTime都为100ns;
7-bit地址模式,从机地址是0x53;
GPIO设置为no-pull,开漏模式
生成代码如下:
OwnAddress1 = 166,16进制就是0xA6, 配置设置的0x53,0101 0011, 之所以代码里是0xA6,是因为cubemx自动将读写位填充到地址里面去了,0xA6 = 1010 0110, 相当于0x53 << 1 | 0;
这里主要参考https://www.cnblogs.com/xingboy/p/9647326.html 这篇文章;
/* I2C1 init function */
void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.Timing = 0x00201D2B;
hi2c1.Init.OwnAddress1 = 166;//0xA6
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.OwnAddress2Masks = I2C_OA2_NO