Hello, As I am using 3 sensors, I modified the initialisation code as follows: #define NB_BME 3
struct bme280_dev dev0, dev1, dev2;
struct bme280_dev dev[NB_BME];
uint8_t dev_addr[NB_BME] ={0,1,2};
uint8_t i;
dev[0] = dev0;
dev[1] = dev1;
dev[2] = dev2;
for(i=0;i<NB_BME;i++)
{
//déclaration instance capteurs
dev[i].intf_ptr = &dev_addr[i];
dev[i].intf = BME280_SPI_INTF;
dev[i].read = user_spi_read;
dev[i].write = user_spi_write;
dev[i].delay_us = user_delay_ms;
rslt = bme280_init(&dev[i]);
} And my read/write functions are as follows (I'm using STM32 HAL driver SPI function) int8_t user_spi_read(uint8_t reg_addr, uint8_t *reg_data, uint32_t len, void *intf_ptr)
{
int8_t rslt = 0;
/*---resetting the CS pin of the corresponding sensor (starts SPI comm)---*/
if(intf_ptr == &dev_addr[0])
HAL_GPIO_WritePin(CS1_GPIO_Port, CS1_Pin, GPIO_PIN_RESET);
if(intf_ptr == &dev_addr[1])
HAL_GPIO_WritePin(CS2_GPIO_Port, CS2_Pin, GPIO_PIN_RESET);
if(intf_ptr == &dev_addr[2])
HAL_GPIO_WritePin(CS3_GPIO_Port, CS3_Pin, GPIO_PIN_RESET);
/*--------------------------------------------------------------------------------------------------------------*/
// sending the address to read
HAL_SPI_Transmit(&hspi1, ®_addr, 1, HAL_MAX_DELAY);
// receiving the data from the adress read
HAL_SPI_Receive(&hspi1, reg_data, len, HAL_MAX_DELAY);
/*---setting the CS pin of the corresponding sensor (stops SPI comm)---*/
if(intf_ptr == &dev_addr[0])
HAL_GPIO_WritePin(CS1_GPIO_Port, CS1_Pin, GPIO_PIN_SET);
if(intf_ptr == &dev_addr[1])
HAL_GPIO_WritePin(CS2_GPIO_Port, CS2_Pin, GPIO_PIN_SET);
if(intf_ptr == &dev_addr[2])
HAL_GPIO_WritePin(CS3_GPIO_Port, CS3_Pin, GPIO_PIN_SET);
/*-----------------------------------------------------------------------------------------------------------*/
return rslt;
}
int8_t user_spi_write(uint8_t reg_addr, const uint8_t *reg_data, uint32_t len, void *intf_ptr)
{
int8_t rslt = 0;
/*---resetting the CS pin of the corresponding sensor (starts SPI comm)---*/
if(intf_ptr == &dev_addr[0])
HAL_GPIO_WritePin(CS1_GPIO_Port, CS1_Pin, GPIO_PIN_RESET);
if(intf_ptr == &dev_addr[1])
HAL_GPIO_WritePin(CS2_GPIO_Port, CS2_Pin, GPIO_PIN_RESET);
if(intf_ptr == &dev_addr[2])
HAL_GPIO_WritePin(CS3_GPIO_Port, CS3_Pin, GPIO_PIN_RESET);
/*---------------------------------------------------------------------------------------------------------------*/
//sending the address where to write
HAL_SPI_Transmit(&hspi1, ®_addr, 1, HAL_MAX_DELAY);
//sending the data to write
HAL_SPI_Transmit(&hspi1, (uint8_t*)reg_data, len, HAL_MAX_DELAY);
/*---setting the CS pin of the corresponding sensor (stops SPI comm)---*/
if(intf_ptr == &dev_addr[0])
HAL_GPIO_WritePin(CS1_GPIO_Port, CS1_Pin, GPIO_PIN_SET);
if(intf_ptr == &dev_addr[1])
HAL_GPIO_WritePin(CS2_GPIO_Port, CS2_Pin, GPIO_PIN_SET);
if(intf_ptr == &dev_addr[2])
HAL_GPIO_WritePin(CS3_GPIO_Port, CS3_Pin, GPIO_PIN_SET);
/*-----------------------------------------------------------------------------------------------------------*/
return rslt;
}
void user_delay_ms(uint32_t period, void *intf_ptr)
{
HAL_Delay(period);
} I wonder if the code modification due to the usage of multiple BME280 sensors is the source of problem. The application works well with one BME280 sensor. Thanks for your help
... View more