void I2CTransfer(uint16_t deviceAddr, uint8_t cmdArray[], uint8_t dataArray[], uint16_t cmdLen, uint16_t dataLen, uint16_t flag) { if(flag == I2C_FLAG_WRITE_READ) { // Write command array HAL_I2C_Master_Transmit(&hi2c1, deviceAddr << 1, cmdArray, cmdLen, HAL_MAX_DELAY);

    // Read data array
    HAL_I2C_Master_Receive(&hi2c1, deviceAddr << 1, dataArray, dataLen, HAL_MAX_DELAY);
}
else if (flag == I2C_FLAG_WRITE_WRITE)
{
    // Write command array
    HAL_I2C_Master_Transmit(&hi2c1, deviceAddr << 1, cmdArray, cmdLen, HAL_MAX_DELAY);
    
    // Write data array
    HAL_I2C_Master_Transmit(&hi2c1, deviceAddr << 1, dataArray, dataLen, HAL_MAX_DELAY);
}

}

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, cmdArray, dataArray, 1, 2, I2C_FLAG_WRITE_READ);

result = (dataArray[1] << 8) | (dataArray[0]);
return result;

}

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, cmdArray, dataArray, 1, 2, I2C_FLAG_WRITE_WRITE);

}

C语言HAL库I2C读写时序实现:I2CTransfer函数详解

原文地址: https://www.cveoy.top/t/topic/qEW4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录