CH32F103的I2C如何连续读数据?

请问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);
}



只有登录才能回复,可以选择微信账号登录