diff --git a/fw/Core/Src/scd4x.c b/fw/Core/Src/scd4x.c index 1fc96ec..a0494d5 100644 --- a/fw/Core/Src/scd4x.c +++ b/fw/Core/Src/scd4x.c @@ -65,7 +65,8 @@ int8_t scd4x_read_measurement(uint16_t * co2, int16_t *temperature, uint16_t *re return SCD4X_ERROR; }*/ - + // disable interrupts to prevent MODBUS/I2C conflict + uart_disable_interrupts(); // start measurement buffer[0] = SCD4X_READ_MEASUREMENT >> 8; buffer[1] = SCD4X_READ_MEASUREMENT & 0x00ff; @@ -75,11 +76,12 @@ int8_t scd4x_read_measurement(uint16_t * co2, int16_t *temperature, uint16_t *re /*if (result != I2C_OK) { return SCD4X_ERROR; }*/ - uart_disable_interrupts(); - LL_mDelay(1); // 10 ms should be enough uart_enable_interrupts(); + LL_mDelay(1); // 10 ms should be enough + uart_disable_interrupts(); // read out result = i2c_receive(SCD4X_I2C_ADDRESS<<1, buffer, 9); + uart_enable_interrupts(); if (result != I2C_OK) { return SCD4X_ERROR; diff --git a/fw/Core/Src/sht4x.c b/fw/Core/Src/sht4x.c index af6c23b..181a4bf 100644 --- a/fw/Core/Src/sht4x.c +++ b/fw/Core/Src/sht4x.c @@ -23,6 +23,8 @@ int8_t sht4x_measure(int16_t *temperature, uint16_t *relative_humidity) uint8_t buffer[32]; int result; + // disable interrupts to prevent modbus/i2c conflict + uart_disable_interrupts(); // start measurement buffer[0] = SHT4X_START_MEAS_HIGH_PRECISION; result = i2c_transmit(SHT4X_I2C_ADDRESS<<1, buffer, 1); @@ -31,11 +33,12 @@ int8_t sht4x_measure(int16_t *temperature, uint16_t *relative_humidity) if (result != I2C_OK) { return SHT4X_ERROR; }*/ - uart_disable_interrupts(); - LL_mDelay(10); // 10 ms should be enough uart_enable_interrupts(); + LL_mDelay(10); // 10 ms should be enough + uart_disable_interrupts(); // read out result = i2c_receive(SHT4X_I2C_ADDRESS<<1, buffer, 6); + uart_enable_interrupts(); if (result != I2C_OK) { return SHT4X_ERROR; }