STM32 I2C HAL库读取HTU21D

以下代码为使用I2C库函数读取HTU21D温度数据的例程。

ret=HAL_I2C_Mem_Read(&hi2c1,0x80,0xf3,I2C_MEMADD_SIZE_8BIT,rx_buf,2,2000);

if(ret == HAL_OK)
{
rx_buf[1] &= 0xfc;
temp = rx_buf[0];
temp *= 256;    //wendu <<=8;
temp += rx_buf[1];
temp *= 17572;
temp /= 65536;
temp -= 4685;   //保留两位小数
temp /=10;
result = (int16_t)temp;
printf("temperature=%d\r",result);
}
else
{
printf("ret=%d\r",ret);

}

直接使用HAL_I2C_Mem_Read函数会有错误出现,需要对其进行修改。根据HTU21D读转换数据时,在发送读取命令之前,需要延迟一段时间,等待转换完成。而库函数没有设定等待时间。在I2C_RequestMemoryRead函数中,/* Generate Restart */注释之前添加 HAL_Delay(85)即可。

你可能感兴趣的:(STM32 I2C HAL库读取HTU21D)