初中生
最后登录1970-1-1
在线时间 小时
注册时间2019-9-3
|
本帖最后由 qimianlangya 于 2019-9-10 23:17 编辑
以下是I2C章节中的例程“硬件I2C”的部分代码:
void I2C_EE_WaitEepromStandbyState(void)
{
vu16 SR1_Tmp = 0;
do
{
I2C_GenerateSTART(EEPROM_I2C, ENABLE);
SR1_Tmp = I2C_ReadRegister(EEPROM_I2C, I2C_Register_SR1);
I2C_Send7bitAddress(EEPROM_I2C, EEPROM_ADDRESS, I2C_Direction_Transmitter);
}
while (!( I2C_ReadRegister(EEPROM_I2C, I2C_Register_SR1) & 0x0002));
I2C_ClearFlag(EEPROM_I2C, I2C_FLAG_AF);
I2C_GenerateSTOP(EEPROM_I2C, ENABLE);
}
程序运行正常。
因为EEPROM_ADDRESS的值是0xA0,于是将
I2C_Send7bitAddress(EEPROM_I2C, EEPROM_ADDRESS, I2C_Direction_Transmitter);
改为
I2C_Send7bitAddress(EEPROM_I2C, 0xA0, I2C_Direction_Transmitter);
程序卡死于此。
将代码改为
void I2C_EE_WaitEepromStandbyState(void)
{
vu16 SR1_Tmp = 0;
do
{
I2C_GenerateSTART(EEPROM_I2C, ENABLE);
SR1_Tmp = I2C_ReadRegister(EEPROM_I2C, I2C_Register_SR1);
I2C_Send7bitAddress(EEPROM_I2C, 0xA0, I2C_Direction_Transmitter);
SR1_Tmp = I2C_ReadRegister(EEPROM_I2C, I2C_Register_SR1);
}
while (!(SR1_Tmp & 0x0002));
I2C_ClearFlag(EEPROM_I2C, I2C_FLAG_AF);
I2C_GenerateSTOP(EEPROM_I2C, ENABLE);
}
程序又运行正常。
对此十分困惑,希望有大佬能帮忙指点一二。
|
|