6. I2C 总线
1) 硬件 I2C 特殊 配置
描述 GD 的 I2C 相对 STM 的来说要少一个标志位
解 决
方法
1、宏地址定义改变
#define I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED
((uint32_t)0x00060002)
#define I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED
((uint32_t)0x00070002)
2、硬件 I2C 在会在向从机发送 7bits 地址完成后,从机还没来得及识别。(看客户
应用)
我们可以在发送完 7bits 后加个延时,让从机完全识别:
I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter);
{ {
int i = 0xfff;
while(i -- );
} }
3、检测 ADDR 不能使用 I2C_CheckEvent 函数,因为他会清除 ADDR,可以使用
I2C_GetFlagStatus 函数。
就是把
while(!I2C_CheckEvent(I2C1,
I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
改为 while(!I2C_GetFlagStatus(I2C1, I2C_FLAG_ADDR));
4、还有个关于编程步骤的严谨性,跟STM想比,我们是先Clear_ACK,再Clear_ARRD。
|