Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    How to use BMP388 with STM32

    How to use BMP388 with STM32

    DroneKid
    Established Member

    Hi,

    I have a flight control board that I developed with the STM32 platform. I chose BMP388 as the barometer sensor on this board and I am trying to communicate using the I2C interface.

    I reviewed the API Bosch shared for the BMP3xx series. At first I didn't quite understand, especially the coines.h part. However, I realized later that I have to write the communication of BMP388 using I2C, myself.

    What should I pay attention to or what steps should I follow while doing this? This will be my first time using Bosch's APIs, so I have no experience.

    I would be very happy if you could help, thank you.

    • Sensor: BMP388
    • Interface: I2C
    • MCU I'm using: STM32G431RB

    For STM32 side, I'm using CubeIDE and coding on C.

    3 REPLIES 3

    BSTRobin
    Community Moderator
    Community Moderator

    Hello DroneKid,

    You could refer BMP3 github code.
    https://github.com/BoschSensortec/BMP3-Sensor-API

    Replace I2C hardware driver in common.c for STM32.
    https://github.com/BoschSensortec/BMP3-Sensor-API/blob/master/examples/common/common.c


    BMP3_INTF_RET_TYPE bmp3_i2c_read(uint8_t reg_addr, uint8_t *reg_data, uint32_t len, void *intf_ptr);
    BMP3_INTF_RET_TYPE bmp3_i2c_write(uint8_t reg_addr, const uint8_t *reg_data, uint32_t len, void *intf_ptr);

    The following I2C read and write implement could replace bmp3_i2c_read() and bmp3_i2c_write() on STM32 for your reference.

    uint8_t GTXBuffer[512], GRXBuffer[2048];
    int8_t SensorAPI_I2Cx_Read(uint8_t subaddress, uint8_t *pBuffer, uint32_t ReadNumbr, void *intf_ptr)
    {
    uint8_t dev_addr = *(uint8_t*)intf_ptr;
    uint16_t DevAddress = dev_addr << 1;

    // send register address
    HAL_I2C_Master_Transmit(&I2C_HANDLE, DevAddress, &subaddress, 1, BUS_TIMEOUT);
    HAL_I2C_Master_Receive(&I2C_HANDLE, DevAddress, pBuffer, ReadNumbr, BUS_TIMEOUT);
    return 0;
    }

    int8_t SensorAPI_I2Cx_Write(uint8_t subaddress, uint8_t *pBuffer, uint32_t WriteNumbr, void *intf_ptr)
    {
    uint8_t dev_addr = *(uint8_t*)intf_ptr;
    uint16_t DevAddress = dev_addr << 1;

    GTXBuffer[0] = subaddress;
    memcpy(&GTXBuffer[1], pBuffer, WriteNumbr);

    // send register address
    HAL_I2C_Master_Transmit(&I2C_HANDLE, DevAddress, GTXBuffer, WriteNumbr+1, BUS_TIMEOUT);
    return 0;
    }

    DroneKid
    Established Member

    Hello, thank you very much for your answer.

    However, I still did not understand what I should do and what and how I should change. I need to change the I2C function and adapt it to STM32, I got it.

    But I didn't understand how to edit common.c and common.h and which codes should I delete and which ones.

    I'm really sorry if I asked such a noob question. I'm just really unfamiliar with Bosch's API ecosystem and this is my first time working with this API. If there is a resource or article where I can better understand this API system or what I should do, I'm ready to read it.

    BSTRobin
    Community Moderator
    Community Moderator

    Hello DroneKid,

    The reference code on STM32 was uploaded in this topic "https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/How-to-adapt-Bosch-Sensor-API-s-to-use-w..." for your reference.

    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