之前我是参考STM32的I2C例子Example 5来做I2C外设实验。
对24C02的代码写一次,读一次程序也运行正常。
但调用读之后,再写、或再读就死机了。。
分析原因,应该是读操作时没能正确的结束I2C时序。
后来在DATASHEET中找到原因:
从上面可以看出,读操作时要正确的结束I2C时序,需要在接收最后一个字节前设置NACK及STOP。
即:
I2C_AcknowledgeConfig(I2C1,DISABLE); //读最后一个字节后产生NAK信号
I2C_GenerateSTOP(I2C1,ENABLE); //结束总线要放在这里!!!!!!
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));
*s = I2C_ReceiveData(I2C1); //接收数据
I2C_AcknowledgeConfig(I2C1,ENABLE); //为下次读写准备ACK
return(1);
搞好STM32的I2C用了1天又6个小时,不容易啊~~~
呵呵
用户1492773 2009-10-21 11:23
用户391779 2008-7-17 16:02