請問CH32F103的I2C如何連續(xù)讀數(shù)據(jù)?有沒有相關(guān)的參考例程?
現(xiàn)在讀一個字節(jié)是沒有問題,但是連續(xù)讀就不正常。
熱門產(chǎn)品 :
USB3.0 HUB控制器:CH634
請問CH32F103的I2C如何連續(xù)讀數(shù)據(jù)?有沒有相關(guān)的參考例程?
現(xiàn)在讀一個字節(jié)是沒有問題,但是連續(xù)讀就不正常。
問題已解決,是因為在for循環(huán)中使用了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); }