Problem Reading data via SPI - BME680 STM32.

Hi,

I am implementing the BME680 on a project. I am trying it with the STM32F407 dev board using SPI1. 
I can not read any data, could you help me? I really don't know what am i missing.
- Drivers: https://github.com/BoschSensortec/BME680_driver

Code Snippet: 

 void main(){
bme680_start(&gas_sensor);
uint16_t meas_period = 180;
bme680_get_profile_dur(&meas_period, &gas_sensor);
HAL_Delay(meas_period);

while(1){

bme680_get_sensor_data(&data, &gas_sensor);
t680 = (uint32_t) data.temperature / 100.0;
h680 = (uint32_t) data.humidity / 1000.0;
p680 = (uint32_t) data.pressure / 1000.0;

// Trigger the next measurement if you would like to read data out continuously
if(gas_sensor.power_mode == BME680_FORCED_MODE) bme680_set_sensor_mode(&gas_sensor);
HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_14);//toggle led

HAL_Delay(meas_period);

}

 

/* ----- USER FUNCTIONS ------ */

void bme680_start(struct bme680_dev * gas_sensor){

/* You may assign a chip select identifier to be handled later */
gas_sensor->dev_id = 0;
gas_sensor->intf = BME680_SPI_INTF;
gas_sensor->read = user_spi_read;
gas_sensor->write = user_spi_write;
gas_sensor->delay_ms = user_delay_ms;
gas_sensor->amb_temp = 20;
int8_t rslt = BME680_OK;
rslt = bme680_init(gas_sensor);


/* Set the temperature, pressure and humidity settings */
gas_sensor->tph_sett.os_hum = BME680_OS_2X;
gas_sensor->tph_sett.os_pres = BME680_OS_4X;
gas_sensor->tph_sett.os_temp = BME680_OS_8X;
gas_sensor->tph_sett.filter = BME680_FILTER_SIZE_3;
/* Set the remaining gas sensor settings and link the heating profile */
gas_sensor->gas_sett.run_gas = BME680_ENABLE_GAS_MEAS;
/* Create a ramp heat waveform in 3 steps */
gas_sensor->gas_sett.heatr_temp = 320; /* degree Celsius */
gas_sensor->gas_sett.heatr_dur = 150; /* milliseconds */

/* Select the power mode */
/* Must be set before writing the sensor configuration */
gas_sensor->power_mode = BME680_FORCED_MODE;

/* Set the required sensor settings needed */
uint8_t set_required_settings;
set_required_settings = BME680_OST_SEL | BME680_OSP_SEL | BME680_OSH_SEL | BME680_GAS_SENSOR_SEL | BME680_FILTER_SEL;


/* Set the desired sensor configuration */
rslt = bme680_set_sensor_settings(set_required_settings,gas_sensor);

 


/* Set the power mode */
rslt = bme680_set_sensor_mode(gas_sensor);
}

 

void user_delay_ms(uint32_t period)
{
HAL_Delay(period);
}

int8_t user_spi_read(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len)
{
int8_t rslt = 0;
dev_id = 0;


HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET); //CS low
HAL_SPI_Transmit(&hspi1, &reg_addr, 1, 100);
HAL_SPI_Receive(&hspi1, reg_data, len, 100);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET); //cs high

 

return rslt;
}

int8_t user_spi_write(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len)
{
int8_t rslt = 0;
dev_id = 0;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET); //cs low
HAL_SPI_Transmit(&hspi1, &reg_addr, 1, 150);
HAL_SPI_Transmit(&hspi1, reg_data, len, 150);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET); //cs high

return rslt;
}

 


This image show the results:

meas_period = 183ms, t680 = 42949672, p680 = 22

 

 

 

 

 

5 replies