问答

汇集网友智慧,解决技术难题

ylq1433223

TA的家园币:14  

  • N32WB452CEQ6单片机I2C异常

    在多次使用I2C和从机通信中,发现经常会有单片机I2C开始条件执行过后,状态寄存器为0的异常情况,经抓过波形发现单片机确实没有发出开始条件,各位大佬,帮忙看看代码是不会有什么问题uint8_ti2c_master_recv(u8*pBuffer,uint8_tReadAddr,uint16_tNumByteToRead){if(NumByteToRead>1){/**DisableAcknowledgement*/I2C_ConfigAck(I2C2,ENABLE);}I2CTimeout=I2CT_LONG_TIMEOUT;while(I2C_GetFlag(I2C2,I2C_FLAG_BUSY)){if((I2CTimeout--)==0){I2C_TIMEOUT_UserCallback(MASTER_BUSY);return0;}}/**SendSTARTcondition*///sendstart//I2C_Enable(I2C2,DISABLE);//I2C_Enable(I2C2,ENABLE);I2C_GenerateStart(I2C2,ENABLE);I2CTimeout=I2CT_LONG_TIMEOUT;/**TestonEV5andclearit*/while(!I2C_CheckEvent(I2C2,I2C_EVT_MASTER_MODE_FLAG)){if((I2CTimeout--)==0){I2C_TIMEOUT_UserCallback(MASTER_MODE);return0;}}/**Sendwriteaddressforwrite*/I2C_SendAddr7bit(I2C2,0x40,I2C_DIRECTION_SEND);/**TestonEV6andclearit*/I2CTimeout=I2CT_LONG_TIMEOUT;while(!I2C_CheckEvent(I2C2,I2C_EVT_MASTER_TXMODE_FLAG)){if((I2CTimeout--)==0){I2C_TIMEOUT_UserCallback(MASTER_TXMODE);return0;}}I2C_Enable(I2C2,ENABLE);I2C_SendData(I2C2,ReadAddr);///**TestonEV8andclearit*/I2CTimeout=I2CT_LONG_TIMEOUT;while(!I2C_CheckEvent(I2C2,I2C_EVT_MASTER_DATA_SENDED)){if((I2CTimeout--)==0){I2C_TIMEOUT_UserCallback(MASTER_SENDING);return0;}}/**SendSTRATconditionasecondtime*/I2C_GenerateStart(I2C2,ENABLE);///**TestonEV5andclearit*/I2CTimeout=I2CT_LONG_TIMEOUT;while(!I2C_CheckEvent(I2C2,I2C_EVT_MASTER_MODE_FLAG)){if((I2CTimeout--)==0){I2C_TIMEOUT_UserCallback(MASTER_MODE);return0;}}///**SendEEPROMaddressforread*/I2C_SendAddr7bit(I2C2,0x41,I2C_DIRECTION_RECV);/*TestonEV6andclearit*/I2CTimeout

    国产芯片 单片机

    2025-04-24 1