Bosch Sensortec Community

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

    How to adapt Bosch Sensor API's to use with STM32?

    How to adapt Bosch Sensor API's to use with STM32?

    DroneKid
    Established Member

    I have two Bosch sensors model BMI160 and BMP388. I am trying to use these sensors with my STM32 based NUCLEO board. I am using CubeIDE and C to code STM32.

    Bosch has APIs for its sensors and they are pretty detailed. However, as far as I understand, a wrapper needs to be written in order to provide I2C or SPI connection.

    https://github.com/BoschSensortec/BMP3-Sensor-API

    Let me give an example from BMP388. Besides the main .c and .h files of the API, there are common.c and common.h files. As far as I understand interface communication happens via these files. In the standard version, "coines" protocol is used, but I need to convert it to STM32 HAL I2C communication for both sensors.

    For the BMP388 I created something like this:

    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);
    
    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;
    }

    But I have no idea how to edit common.c and common.h to be able to run this function.

    6 REPLIES 6

    DroneKid
    Established Member

    I can confirm that the sensor is working. Thank you for the code. 🙂

    DroneKid_0-1641496047323.png

    I will use this sensor to get the altitude information of a drone. Does the it have a direct register to get altitude or do I have to calculate it manually?

    Also, are there any settings or filters you would recommend for use with the drone? Or can I use the direct pressure value by converting it to height without filtering?

    BSTRobin
    Community Moderator
    Community Moderator

    Hello DroneKid,

    Yes, the reference code runs under FreeRTOS.

    The low layer hardware driver can be used for BMI 160.

    To get altitude, you could calculate it manually.

    For your application, it is recommended to calibrate sensor with standard barometer.

    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