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, ®_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, ®_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
... View more