BQ27441 I2C 驱动函数:完成 I2CTransfer 函数
/************************************************************************
-
LOCAL FUNCTIONS */ void I2CTransfer(uint16_t deviceAddr, uint8_t cmdArray[], uint8_t dataArray[], uint16_t cmdLen, uint16_t dataLen, uint16_t flag) { deviceAddr = BQ27441_G1_ADDR;
//¼ì²éflag if(flag==I2C_FLAG_WRITE_READ) { //ʹÓÃLL_I2C_Master_Transmit½ÓÊÕ²ÎÊý LL_I2C_Master_Transmit(I2C_Handle, deviceAddr, cmdArray, cmdLen, LL_I2C_GENERATE_START_WRITE); while(!LL_I2C_IsActiveFlag_TXIS(I2C_Handle));
//ʹÓÃLL_I2C_Master_Receive½ÓÊÕ²ÎÊý LL_I2C_Master_Receive(I2C_Handle, deviceAddr, dataArray, dataLen, LL_I2C_GENERATE_START_READ); while(!LL_I2C_IsActiveFlag_RXNE(I2C_Handle));} else if (flag==I2C_FLAG_WRITE_WRITE) { //ʹÓÃLL_I2C_Master_Transmit½ÓÊÕ²ÎÊý LL_I2C_Master_Transmit(I2C_Handle, deviceAddr, cmdArray, cmdLen, LL_I2C_GENERATE_START_WRITE); while(!LL_I2C_IsActiveFlag_TXIS(I2C_Handle));
//ʹÓÃLL_I2C_Master_Transmit½ÓÊÕ²ÎÊý LL_I2C_Master_Transmit(I2C_Handle, deviceAddr, dataArray, dataLen, LL_I2C_GENERATE_RESTART_7BIT_WRITE); while(!LL_I2C_IsActiveFlag_TXIS(I2C_Handle));} }
static uint16_t i2cReadRegister(uint16_t addr,uint8_t regOffset) { uint16_t result = 0x00;
uint8_t cmdArray[1];
uint8_t dataArray[2];
cmdArray[0] = regOffset;
I2CTransfer(addr << 1, cmdArray, dataArray, 1, 2, I2C_FLAG_WRITE_READ );
result = (dataArray[1] << 8) | (dataArray[0]);
return result;
return dataArray[0];
}
static void i2cWriteRegister(uint16_t addr,uint8_t regOffset, uint8_t writeData) { uint8_t cmdArray[1]; uint8_t dataArray[2];
cmdArray[0] = regOffset;
dataArray[0] = writeData;
I2CTransfer(addr << 1, cmdArray, dataArray, 1, 2, I2C_FLAG_WRITE_WRITE );
}
/************************************************************************
- FUNCTIONS */
//BQ27441³õʼ»¯ bq27441_g1_t* BQ27441_Init() { /* ³õʼ»¯Í¨ÐÅ½Ó¿Ú */ LL_I2C_Enable(I2C_Handle);
/* ³õʼ»¯BQ27441 */ bq27441_g1.Read = i2cReadRegister; bq27441_g1.Write = i2cWriteRegister;
/* ³õʼ»¯³õʼ»¯BQ27441¼Ä´æÆ÷ */
return &bq27441_g1;
}完成2CTransfer函数
void I2CTransfer(uint16_t deviceAddr, uint8_t cmdArray[], uint8_t dataArray[], uint16_t cmdLen, uint16_t dataLen, uint16_t flag) { deviceAddr = BQ27441_G1_ADDR;
//¼ì²éflag
if(flag==I2C_FLAG_WRITE_READ)
{
//ʹÓÃLL_I2C_Master_Transmit½ÓÊÕ²ÎÊý
LL_I2C_Master_Transmit(I2C_Handle, deviceAddr, cmdArray, cmdLen, LL_I2C_GENERATE_START_WRITE);
while(!LL_I2C_IsActiveFlag_TXIS(I2C_Handle));
//ʹÓÃLL_I2C_Master_Receive½ÓÊÕ²ÎÊý
LL_I2C_Master_Receive(I2C_Handle, deviceAddr, dataArray, dataLen, LL_I2C_GENERATE_START_READ);
while(!LL_I2C_IsActiveFlag_RXNE(I2C_Handle));
}
else if (flag==I2C_FLAG_WRITE_WRITE)
{
//ʹÓÃLL_I2C_Master_Transmit½ÓÊÕ²ÎÊý
LL_I2C_Master_Transmit(I2C_Handle, deviceAddr, cmdArray, cmdLen, LL_I2C_GENERATE_START_WRITE);
while(!LL_I2C_IsActiveFlag_TXIS(I2C_Handle));
//ʹÓÃLL_I2C_Master_Transmit½ÓÊÕ²ÎÊý
LL_I2C_Master_Transmit(I2C_Handle, deviceAddr, dataArray, dataLen, LL_I2C_GENERATE_RESTART_7BIT_WRITE);
while(!LL_I2C_IsActiveFlag_TXIS(I2C_Handle));
}
原文地址: https://www.cveoy.top/t/topic/nl4G 著作权归作者所有。请勿转载和采集!