I2C : Weather Forecasting

HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
#define BME280_ADDRESS 0xEC
uint8_t chipID;
HAL_I2C_Mem_Read(&hi2c1,BME280_ADDRESS,0xD0,1,&chipID,1,1000);
#define BME280_ADDRESS 0xEC
uint16_t dig_T1, dig_P1; 
int16_t  dig_T2, dig_T3, dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, dig_P9;
void BMP280_init(uint8_t t_sb,uint8_t filter, uint8_t osrs_t, uint8_t osrs_p,uint8_t mode)
{
	uint8_t u8_config,u8_ctrl_meas;
	u8_config=(t_sb<<5)|(filter<<2);
	u8_ctrl_meas=(osrs_t<<5)|(osrs_p<<2)|mode;
	HAL_I2C_Mem_Read(&hi2c1,BME280_ADDRESS,CONFIG_REG,1,&u8_config,1,1000);
	HAL_I2C_Mem_Read(&hi2c1,BME280_ADDRESS,CTRL_MEAS_REG,1,&u8_ctrl_meas,1,1000);
	uint8_t trimming_buff[24];
    HAL_I2C_Mem_Read(&hi2c1,BME280_ADDRESS,TRIMMING_PRA,1,trimming_buff,24,1000);
	dig_T1=(trimming_buff[0])+(trimming_buff[1]<<8);
	dig_T2=(trimming_buff[2])+(trimming_buff[3]<<8);
	dig_T3=(trimming_buff[4])+(trimming_buff[5]<<8);
	dig_P1=(trimming_buff[6])+(trimming_buff[7]<<8);
	dig_P2=(trimming_buff[8])+(trimming_buff[9]<<8);
	dig_P3=(trimming_buff[10])+(trimming_buff[11]<<8);
	dig_P4=(trimming_buff[12])+(trimming_buff[13]<<8);
	dig_P5=(trimming_buff[14])+(trimming_buff[15]<<8);
	dig_P6=(trimming_buff[16])+(trimming_buff[17]<<8);
	dig_P7=(trimming_buff[18])+(trimming_buff[19]<<8);
	dig_P8=(trimming_buff[20])+(trimming_buff[21]<<8);
	dig_P9=(trimming_buff[22])+(trimming_buff[23]<<8);
} 
int32_t temperature_raw, pressure_raw;
uint8_t status, rx_buff[6];
	do
	{
	HAL_I2C_Mem_Read(&hi2c1,BME280_ADDRESS,STATUS_REG,1,&status,1,1000);
	} while(((status&0b00001000)==8)||((status&0b00000001)==1));
    HAL_I2C_Mem_Read(&hi2c1,BME280_ADDRESS,TEMP_REG,1,rx_buff,6,1000);
    temperature_raw=(rx_buff[3]<<12)+(rx_buff[4]<<4)+(rx_buff[5]>>4);
    pressure_raw=(rx_buff[0]<<12)+(rx_buff[1]<<4)+(rx_buff[2]>>4);

For measuring of temperature & pressure the time will be, Total time Ttotal = Tmeasure + Tstandby .

    float BMP280_Temperature, BMP280_Pressure, BMP280_Altitude;
    double var1, var2;
	var1=(((double)temperature_raw)/16384.0-((double)dig_T1)/1024.0)*((double)dig_T2);
	var2=((((double)temperature_raw)/131072.0-((double)dig_T1)/8192.0)*(((double)temperature_raw)/131072.0-((double)dig_T1)/8192.0))*((double)dig_T3);
	double t_fine = (int32_t)(var1+var2);
    volatile	float T = (var1+var2)/5120.0;
	BMP280_Temperature=T;
	var1=((double)t_fine/2.0)-64000.0;
    var2=var1*var1*((double)dig_P6)/32768.0;
    var2=var2+var1*((double)dig_P5)*2.0;
    var2=(var2/4.0)+(((double)dig_P4)*65536.0);
    var1=(((double)dig_P3)*var1*var1/524288.0+((double)dig_P2)*var1)/524288.0;
    var1=(1.0+var1/32768.0)*((double)dig_P1);
	volatile double p=1048576.0-(double)pressure_raw;
    p=(p-(var2/4096.0))*6250.0/var1;
    var1=((double)dig_P9)*p*p/2147483648.0;
    var2=p*((double)dig_P8)/32768.0;
    p=p+(var1+var2+((double)dig_P7))/16.0;
    BMP280_Pressure=p;
#include "math.h"
BMP280_Altitude=44330.0*(1-pow(BMP280_Pressure/101325.0,1.0/5.255));