|
不过能有一事不明
请看: while(NumByteToRead) { /* Test on EV7 and clear it */ if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) { if(NumByteToRead == 2) { /* Disable Acknowledgement */ I2C_AcknowledgeConfig(I2C1, DISABLE); }
if(NumByteToRead == 1) { /* Send STOP Condition */ I2C_GenerateSTOP(I2C1, ENABLE); } /* Read a byte from the EEPROM */ *pBuffer = I2C_ReceiveData(I2C1);
/* Point to the next location where the byte read will be saved */ pBuffer++; /* Decrement the read bytes counter */ NumByteToRead--; } } 历程中在倒数第二个字节产生nack 倒数第一个产生stop
而文档中有写: 关闭通信 主设备在从从设备接收到的最后一个字节后发送一个NACK。从设备接收到NACK后,释放对SCL和SDA线的控制。主设备就可以发送一个停止/重起始(Stop/Re-Start)条件。 为了在收到最后一个字节后产生一个NACK脉冲,在读倒数第二个数据字节之后(在倒数第二个RxNE事件之后)必须清除ACK位。 为了产生一个停止/重起始条件,软件必须在读倒数第二个数据字节之后(在倒数第二个RxNE事件之后)设置STOP/START位。 在产生了停止条件后,接口自动回到从模式(M/SL位被清除)。
都应该在倒数第一个才对。 |
|