He estado intentando conectar el sensor ISL29125 con STM32F0 usando la biblioteca HAL con I2C y no he tenido suerte. Todo lo que estoy tratando de hacer es leer la ID del dispositivo, pero sigo recibiendo un error de AF. A continuación se muestra el código que estoy utilizando:
bool isl29125_init(I2C_HandleTypeDef* hi2c_x)
{
bool ret = true;
if(HAL_I2C_IsDeviceReady(hi2c_x, ISL_I2C_ADDR<<1, 10, 1000) != HAL_OK) {
ret &= false;
}
uint8_t receive_data[1];
uint8_t send_data = DEVICE_ID;
HAL_I2C_Master_Transmit(hi2c_x,ISL_I2C_ADDR<<1,&send_data,1,1000);
HAL_Delay(15);
HAL_I2C_Master_Receive(hi2c_x,ISL_I2C_ADDR<<1,receive_data,1,1000);
if (receive_data[0] != 0x7D) {
ret &= false;
}
return(ret);
}
A continuación se muestra mi inicialización para I2C:
static void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.Timing = 0x2000090E;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
}
Cualquier información sobre por qué estoy recibiendo hi2c1.ErrorCode = 4 sería útil. Se adjunta la hoja de datos del sensor