用STM32的硬件I2C读写24C02,用的是万利的板。
运到的问题是:
我每调用一次读24C02的函数后,以后再发读或写I2C的库函数都会造成死机。 即再调用: I2C_GenerateSTART(I2C1, ENABLE); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //这出不来了。
我自己分析是我的读操作函数没能正确的结束I2C时序。我的读24C02函数最后部分代码是: for(i=0;i<no-1;i++) { while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); *s = I2C_ReceiveData(I2C1); //接收数据 s++; //接收数据地址调整 }
I2C_AcknowledgeConfig(I2C1,DISABLE); //读最后一个字节后产生NAK信号 while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)); *s = I2C_ReceiveData(I2C1); //接收数据 I2C_GenerateSTOP(I2C1,ENABLE); //结束总线 I2C_AcknowledgeConfig(I2C1,ENABLE); //为下次读写准备ACK return(1);
请大家看看 |