Bosch Sensortec Community

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

    BHy MACU driver Porting guide

    BHy MACU driver Porting guide

    belaya
    Established Member

    Hello,

    started a new Projekt which contains the Sensordata from the BHI160b. I am using the BHI160 Shuttle Board.  My Microcontroller is an STM32L053R8 which i will use to read out the sensordata. I started to follow the driver Porting guide to adapt the Functions to my Platform. At first i created a New Projekt with my STM32 init code and also included the BHy MCU driver. At the beginning i removed the lines in the file bhy_support.c

    #include "FreeRTOS.h"
    #include "task.h"
    extern int8_t sensor_i2c_write(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size);
    extern int8_t sensor_i2c_read(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size);
    extern void trace_log(const char *fmt, ...);

    After that i tried build the target Files in i have an error:

    ..\Drivers\BHI160b_driver\inc\BHy_support.h(59): error: #5: cannot open source input file "twi.h": No such file or directory

    Because the twi.h is a platform specific library for Atmel i also removed this line from file bhy_support.h.

    After this change i tried to rebuild again and now i have a lot of undefined identifiers :

    ..\Drivers\BHI160b_driver\inc\bhy_uc_driver_types.h(252): error: #20: identifier "uint8_t" is undefined           uint8_t sensor_id;

    Even the Porting guide says that in this case, the bhy.h should be modified to define the following fixed-width types:

    s8, s16, s32, u8, u16, u32

    I looked in this file and i am not sure how to exactly implement these types. Does anyone have an example for that?

    Also i should implement specific  sensor_i2c_write()  sensor_i2c_read() functions. This 2 functions have to be in bhy_support.c?

    Because there are no existing i2c functions just the declaration like this:

    extern int8_t sensor_i2c_write(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size);
    extern int8_t sensor_i2c_read(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size);

    Are there any example codes that has an HAL i2c connection to this sensor?

    Thx for helping!

    8 REPLIES 8

    BSTRobin
    Community Moderator
    Community Moderator

    Hello Belaya,

    The following is a I2C read and write example on STM32F401, you could refer it.

    uint8_t GTXBuffer[256];

    int8_t SensorAPI_I2Cx_Read(uint8_t slave_address7, uint8_t subaddress, uint8_t *pBuffer, uint16_t ReadNumbr)
    {
    uint16_t DevAddress = slave_address7 << 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 slave_address7, uint8_t subaddress, uint8_t *pBuffer, uint16_t WriteNumbr)
    {
    uint16_t DevAddress = slave_address7 << 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;
    }

    belaya
    Established Member

    Thanks for that sample code! I can actually use it like that. But how about the problem with the datatypes defines in bhy.h? Do you know how to define them?

    belaya
    Established Member

    Is there a way that you can show me a sample main.c code to choose a sensor for my stm32?

    BSTRobin
    Community Moderator
    Community Moderator

    Hello Belaya,

    STM32 is 32 bit machine, data type define will be the following code in bhy.h.

    /*signed integer types*/
    typedef signed char s8;/**< used for signed 8bit */
    typedef signed short int s16;/**< used for signed 16bit */
    typedef signed int s32;/**< used for signed 32bit */

    /*unsigned integer types*/
    typedef unsigned char u8;/**< used for unsigned 8bit */
    typedef unsigned short int u16;/**< used for unsigned 16bit */
    typedef unsigned int u32;/**< used for unsigned 32bit */

    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