请问CH32F103的I2C如何连续读数据?有没有相关的参考例程?
现在读一个字节是没有问题,但是连续读就不正常。
热门产品 :
CH182: 以太网PHY收发器芯片
请问CH32F103的I2C如何连续读数据?有没有相关的参考例程?
现在读一个字节是没有问题,但是连续读就不正常。
问题已解决,是因为在for循环中使用了printf
如下代码仅供参考
void I2C_WriteData(I2C_TypeDef* I2Cx, u16 DeviceAddress, u8 *pBuf, u16 len) { u16 i; while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY) != RESET); I2C_GenerateSTART(I2Cx, ENABLE); while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2Cx, (DeviceAddress << 1), I2C_Direction_Transmitter); while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); for (i = 0; i < len; i++) { I2C_SendData(I2Cx, *pBuf++); while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); } I2C_GenerateSTOP(I2Cx, ENABLE); } void I2C_ReadData(I2C_TypeDef* I2Cx, u16 DeviceAddress, u8 *pBuf, u16 len) { u16 i = 0; while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY) != RESET); I2C_GenerateSTART(I2Cx, ENABLE); while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2Cx, (DeviceAddress << 1), I2C_Direction_Receiver); while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); for (i = 0; i < len; i++) { if (i == len - 1) { I2C_AcknowledgeConfig(I2Cx, DISABLE); } while(I2C_GetFlagStatus( I2Cx, I2C_FLAG_RXNE ) == RESET); *pBuf++ = I2C_ReceiveData(I2Cx); } I2C_GenerateSTOP(I2Cx, ENABLE); }