Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    Blocking behavior when intergrating BME688 to Nucleo board

    Blocking behavior when intergrating BME688 to Nucleo board


    Hello everyone,

    Currently, I am working with an IoT application on the board Nucleo-WL55JC1 with the sensor BME688. The example I am using is LoRaWAN_End_Node downloaded from STM32Cube MX. 

    What I did: I initialized the the BME688 and set up some configuration after the initialization of MX_LoRaWAN_Init(). I, then, set up some configuration outside the while loop. I "extern"ed the variables below so that I can used them elsewhere:

    struct bme68x_dev bme;
    struct bme68x_conf conf;
    struct bme68x_heatr_conf heatr_conf;

    Order of initialization are below:

      /* Initialize all configured peripherals */
      /* USER CODE BEGIN 2 */
      int8_t rslt = bme68x_interface_init(&bme, BME68X_I2C_INTF);
      //bme68x_check_rslt("bme68x_interface_init", rslt);
          // UART_Transmit_IT("/init\n");
      rslt = bme68x_init(&bme);
      //Set up the measurement
      conf.filter = BME68X_FILTER_OFF;
      conf.odr = BME68X_ODR_NONE;
      conf.os_hum = BME68X_OS_16X;
      conf.os_pres = BME68X_OS_1X;
      conf.os_temp = BME68X_OS_2X;
      rslt = bme68x_set_conf(&conf, &bme);
      heatr_conf.enable = BME68X_ENABLE;
      heatr_conf.heatr_temp = 300;
      heatr_conf.heatr_dur = 100;
      rslt = bme68x_set_heatr_conf(BME68X_SEQUENTIAL_MODE, &heatr_conf, &bme);
      rslt = bme68x_set_op_mode(BME68X_SEQUENTIAL_MODE, &bme);

    For obtaining the temperature/pressure/humidity/gas level, I got the data of the sensor in the function SendTxData in the file lora_app.c:

      struct bme68x_data data;
      uint32_t del_period;
      uint8_t n_fields;
    #ifdef CAYENNE_LPP
      uint8_t channel = 0;
      uint16_t pressure = 0;
      int16_t temperature = 0;
      uint16_t humidity = 0;
      uint32_t i = 0;
      int32_t latitude = 0;
      int32_t longitude = 0;
      uint16_t altitudeGps = 0;
    #endif /* CAYENNE_LPP */
      del_period = bme68x_get_meas_dur(BME68X_SEQUENTIAL_MODE, &conf, &bme) + (heatr_conf.heatr_dur * 1000);
      bme.delay_us(del_period, bme.intf_ptr);
      int8_t rslt = bme68x_get_data(BME68X_SEQUENTIAL_MODE, &data, &n_fields, &bme);
      float senTemp = data.temperature;
      float senPres = data.pressure;
      float senHumid = data.humidity;

    The problem: as in the code, I set the sensor to work in sequential mode, however, the whole setup stopped working after the first measurement. The same thing happened when I set the sensor to work in parallel mode. Sleep mode worked okay and for Forced mode, I could achieve the first measurement before the sensor turned to sleep mode (correct).


    (the end device started the first measurement and stopped at that point).

    Question: Where should I start tracking the problem or how do I fix this problem?

    I hope to have responses from you.

    Thank you very much, Huy Nguyen.


    5 REPLIES 5

    Community Moderator
    Community Moderator

    Hi huytyskland,

    One task is enough for BME688 sensor data read. You could refer previous attached example code on STM32 which run same platform with your's.