12-30-2021 08:38 PM
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.
For STM32 side, I'm using CubeIDE and coding on C.
12-31-2021 02:42 AM
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(>XBuffer[1], pBuffer, WriteNumbr);
// send register address
HAL_I2C_Master_Transmit(&I2C_HANDLE, DevAddress, GTXBuffer, WriteNumbr+1, BUS_TIMEOUT);
return 0;
}
01-02-2022 01:04 AM
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.
01-06-2022 06:35 AM
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.