使用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;
}