/** * @brief Writes a single data. * @param Addr: I2C address * @param Reg: Register address * @param Value: Data to be written * @retval None */ static void I2C1_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Write(&heval_I2c1, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, 100); /* Check the communication status */ if(status != HAL_OK) { /* Execute user timeout callback */ I2C1_Error(); } }
/** * @brief Write a value in a register of the device through BUS. * @param Addr: Device address on BUS Bus. * @param Reg: The target register address to write * @param RegSize: The target register size (can be 8BIT or 16BIT) * @param pBuffer: The target register value to be written * @param Length: buffer size to be written * @retval None */ static HAL_StatusTypeDef I2C1_WriteBuffer(uint16_t Addr, uint8_t Reg, uint16_t RegSize, uint8_t *pBuffer, uint16_t Length) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Write(&heval_I2c1, Addr, Reg, RegSize, pBuffer, Length, I2c1Timeout); /* Check the communication status */ if(status != HAL_OK) { /* Re-Initiaize the BUS */ I2C1_Error(); } return status; }
/** * @brief Reads a single data. * @param Addr: I2C address * @param Reg: Register address * @retval Read data */ static uint8_t I2C1_Read(uint8_t Addr, uint8_t Reg) { HAL_StatusTypeDef status = HAL_OK; uint8_t Value = 0; status = HAL_I2C_Mem_Read(&heval_I2c1, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, 1000); /* Check the communication status */ if(status != HAL_OK) { /* Execute user timeout callback */ I2C1_Error(); } return Value; }
/** * @brief Write buffer through I2C. * @param Addr: Device address on I2C Bus. * @param Reg: The target register address to write * @param pBuffer: The address of the data to be written * @param Lenght: buffer size to be written * @retval None */ static HAL_StatusTypeDef I2C1_TransmitData(uint8_t *pBuffer, uint16_t Length) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Slave_Transmit(&heval_I2c1, pBuffer, Length, I2c1Timeout); /* Check the communication status */ if(status != HAL_OK) { /* Execute user timeout callback */ I2C1_Error(); return HAL_ERROR; } return HAL_OK; }