This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

BQ35100的I2C读取经常是0xFF 0x7F

Other Parts Discussed in Thread: BQ35100

使用HAL库的I2C通信,读取BQ35100的数据有时候是正常的,有时候是0xFF 0x7F。比如说我在主函数中,每隔5秒一读取ControlStatus(),第一条就返回0x2080,第二条返回0xFF7F,第三条返回0x2080,第四条返回0xFF7F,以此类推。

另外在读取4位的ACCUMLATEDCAPACITY库伦累加值数据的时候,经常是最后一位是有效的,经常读出0xFF FF 7F XX,XX是除了0xFF和0x7F的正常16进制值,运气好的话,能读到三个有效值:0xFF XX XX XX,总之,就是无法全部读取正常值,不知道哪里出现了问题,请求帮助!

主函数的循环部分:

EnableGE(ENABLE);

while (1)
{
    HAL_Delay(5000);
    Bq35100ReadControlStatus();
}

//读ControlStatus函数:

void Bq35100ReadControlStatus(void)
{
    uint8_t printBuf[50];
    uint8_t data[2]={0};
    uint8_t Status_Data;

    Bq35100ReadCmd(CONTROL_STATUS,data,2);

    sprintf((char *)printBuf,"**Status_Data:0x%02x%02x\r\n",data[1],data[0]);
    HAL_UART_Transmit(&huart2, (uint8_t *)printBuf, strlen((char const *)printBuf), 500);
}

//读CMD

uint8_t Bq35100ReadCmd(uint8_t cmd,uint8_t *resData,uint16_t dataLen)
{
    while(HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY);
        if(HAL_I2C_Master_Transmit(&hi2c1,0xAA,&cmd, 1,500) == HAL_OK)
        {
            if(HAL_I2C_Master_Receive(&hi2c1,0xAB,resData,dataLen, 500) == HAL_OK)
            {
            return SUCCESS;
            }
        return ERROR;
    }
    return ERROR;
}