Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BME680: Temperature msmt OK, Pressure & Humidity Not Good

    grog57
    Member

    Re: BME680: Temperature msmt OK, Pressure & Humidity Not Good

    Hi,

    I'll reply to my own question and post the answer here as this will probably help anyone using an STM32 controller. Below is the I2C send and receive functions. Happy coding.

    ****************************************************************************************************************************************************************

    int8_t user_i2c_read(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len)
    {
    int8_t rslt = 0; /* Return 0 for Success, non-zero for failure */

    HAL_StatusTypeDef status;

    // The device address is shared with I2C and SPI.
    // When using SPI, it works on 7 bit mode.
    // When using I2C, it works on 8 bit mode and we have to left shift the 7 bits.
    // DOCS REFS: Datasheet Sections 6.

    // Waiting for I2C to get freed from HAL bondage
    while(HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t) (dev_id << 1), 1, 100) != HAL_OK);

    //HAL is never Ok, but we'll accept it
    if(HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t) (dev_id << 1), 1, 100) == HAL_OK)
    {
    // Writing register address to the slave
    status = HAL_I2C_Master_Transmit(&hi2c1, (uint16_t) (dev_id << 1), &reg_addr, sizeof(reg_addr), 100);
    if(status != HAL_OK) rslt = -1;

    // Reading registers starting from the sent address to the len
    status = HAL_I2C_Master_Receive(&hi2c1, (uint16_t) (dev_id << 1), reg_data, len, 100);
    if(status != HAL_OK) rslt = -1;
    }
    else
    {
    //do something, anything. print optional
    //printf("I2C is busy...\r\n");
    rslt = -1;
    }

    return rslt;
    }


    int8_t user_i2c_write(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len)
    {
    int8_t rslt = 0; /* Return 0 for Success, non-zero for failure */

    // The device address is shared with I2C and SPI.
    // When using SPI, it works on 7 bit mode.
    // When using I2C, it works on 8 bit mode and we have to left shift the 7 bits.
    // DOCS REFS: Datasheet Sections 6.

    // Waiting for I2C to get freed
    while(HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t) (dev_id << 1), 1, 100) != HAL_OK);

    if(HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t) (dev_id << 1), 1, 100) == HAL_OK)
    {
    // We dont need to send stop bit when writing to sensor, a blocking mode direct write can be called here.
    HAL_I2C_Mem_Write(&hi2c1, (uint16_t) (dev_id << 1), reg_addr, sizeof(reg_addr), reg_data, len, 100);
    }
    else
    {
    //printf("I2C is busy...\r\n");
    rslt = -1;
    }

    return rslt;
    }

     

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist