From c6ec628b9fda7783f9aa1a5f0d1a7f9510eaf4d4 Mon Sep 17 00:00:00 2001 From: 95384 <664090429@qq.com> Date: Thu, 6 Mar 2025 08:57:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0SHT45=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Src/anemometer_dev.c | 25 ++++++------ Drivers/Sht3x/sht30.c | 85 ++++++++++++++++++++++++++++++++-------- 2 files changed, 81 insertions(+), 29 deletions(-) diff --git a/App/Src/anemometer_dev.c b/App/Src/anemometer_dev.c index 4665d22..e298739 100644 --- a/App/Src/anemometer_dev.c +++ b/App/Src/anemometer_dev.c @@ -1089,7 +1089,7 @@ static void getTempHumiPress(void) //置错误标志位 g_error_log.temp_error_TMP117 = 1; //使用备用温度 - g_stMcs_Para.temperature = backupTemperature1; + g_stMcs_Para.temperature = backupTemperature2; } else { @@ -1105,20 +1105,20 @@ static void getTempHumiPress(void) //关电重启,第一次进入错误判断,此时此时错误标志位为0,关电并置位错误标志位; //再进入错误标志位检测到错误标志位后开电 //下一次监测如果SHT30恢复,则正常运行,如果没有恢复,电继续开着,保证温度传感器正常运行 - if(g_error_log.temp_error_SHT30 == 0) - { - HAL_GPIO_WritePin(GPIOB, GPIO_SHT_PWR_EN_Pin, GPIO_PIN_RESET); - HAL_I2C_DeInit(&hi2c1); - }else - { - HAL_GPIO_WritePin(GPIOB, GPIO_SHT_PWR_EN_Pin, GPIO_PIN_SET); - MX_I2C1_Init(); - sht30_init(); - } +// if(g_error_log.temp_error_SHT30 == 0) +// { +// HAL_GPIO_WritePin(GPIOB, GPIO_SHT_PWR_EN_Pin, GPIO_PIN_RESET); +// HAL_I2C_DeInit(&hi2c1); +// }else +// { +// HAL_GPIO_WritePin(GPIOB, GPIO_SHT_PWR_EN_Pin, GPIO_PIN_SET); +// MX_I2C1_Init(); +// sht30_init(); +// } //置错误标志位 g_error_log.temp_error_SHT30 = 1; #if TEMP_SENSOR == SHT30_SENSOR - g_stMcs_Para.temperature = backupTemperature1; + g_stMcs_Para.temperature = 0; #endif /*TEMP_SENSOR == SHT30_SENSOR*/ } else @@ -1151,6 +1151,7 @@ void tem_hum_update_task(void const * argument) if(tem_hun_check_flag) { //采集温湿度与大气压 + osDelay(10);//等待传感器初始化 getTempHumiPress(); } diff --git a/Drivers/Sht3x/sht30.c b/Drivers/Sht3x/sht30.c index 1c3aa95..f9e7e7b 100644 --- a/Drivers/Sht3x/sht30.c +++ b/Drivers/Sht3x/sht30.c @@ -119,6 +119,51 @@ u_int8_t sht30_collect_data(stTempHumiSensor stSensorDev, float *temp, float *hu } +/** + * @brief ʪݲɼ + * @param + * @retval + */ +u_int8_t sht45_collect_data(stTempHumiSensor stSensorDev, float *temp, float *humi) +{ + u_int8_t read_buff[6] = {0}; + uint8_t _cmd[] = {0xFD}; + + u_int16_t temp_value; + u_int16_t humi_value; + + HAL_I2C_Master_Transmit(&hi2c1,stSensorDev.i2c_reg_addr,_cmd,1,0xff); + osDelay(15); + + if(HAL_I2C_Master_Receive(&hi2c1,stSensorDev.i2c_reg_addr,read_buff,6,0xff) != HAL_OK){ + return HAL_ERROR; + } + + if(CheckCrc8(read_buff, 0xFF) != read_buff[2] && CheckCrc8(&read_buff[3], 0xFF) != read_buff[5]){ + return HAL_ERROR; + } + + temp_value = ((u_int16_t)read_buff[0]<<8)|read_buff[1]; + *temp = -45 + 175*((float)temp_value/65535); + + humi_value = ((u_int16_t)read_buff[3]<<8)|read_buff[4]; + *humi = -6 + 125*((float)humi_value / 65535); + + return HAL_OK; +} + +static float calculateAverage(float arr[], int avgLength) { + float sum = 0; + + // 飨10Ԫأռֱֵﵽָ + for (int i = 0; i < 10; ++i) { + sum += arr[i]; + } + + // ƽֵֵ + float average = sum / avgLength; + return average; +} /** * @brief ȡʪ * @param @@ -126,48 +171,54 @@ u_int8_t sht30_collect_data(stTempHumiSensor stSensorDev, float *temp, float *hu */ #define COLLECT_DATA_NUM 10 BOOL get_temp_humi_data(float* temdata, float* humidata) -{ - U_DataType collect_temdata[COLLECT_DATA_NUM]={0x00}; - U_DataType collect_humidata[COLLECT_DATA_NUM]={0x00}; - U_DataType tmp_temdata,tmp_humidata; - +{ + float collect_temdata[COLLECT_DATA_NUM] = {0}; + float collect_humidata[COLLECT_DATA_NUM] = {0}; + float tmp_temdata,tmp_humidata; + uint8_t ret_falt = 0;; + for(int i=0; i= COLLECT_DATA_NUM) + { + goto error_return; + } - tmp_temdata = filter_middle(collect_temdata,COLLECT_DATA_NUM, FILTER_DATA_TYPE_FLOAT); - tmp_humidata = filter_middle(collect_humidata,COLLECT_DATA_NUM, FILTER_DATA_TYPE_FLOAT); + tmp_temdata = calculateAverage(collect_temdata,COLLECT_DATA_NUM - ret_falt); + tmp_humidata = calculateAverage(collect_humidata,COLLECT_DATA_NUM - ret_falt); // // AssertError((tmp_temdata.fValue >= -40) && (tmp_temdata.fValue <= 85), return FALSE, "sht30¶ֵУʧ"); // AssertError((tmp_humidata.fValue >= 0) && (tmp_humidata.fValue <= 100), return FALSE, "sht30ʪֵУʧ"); - if(tmp_temdata.fValue < -50) + if(tmp_temdata < -50) { // tmp_temdata.fValue = -40; // term_printf("sht30¶ֵУʧ"); // return FALSE; goto error_return; } - if(tmp_temdata.fValue > 125) + if(tmp_temdata > 125) { // tmp_temdata.fValue = 125; // term_printf("sht30¶ֵУʧ"); -// return FALSE; +// return FALSE; goto error_return; } - if(tmp_humidata.fValue < 0) + if(tmp_humidata < 0) { // tmp_humidata.fValue = 0; // term_printf("sht30ʪֵУʧ"); // return FALSE; goto error_return; } - if(tmp_humidata.fValue > 100) + if(tmp_humidata > 100) { // tmp_humidata.fValue = 100; // term_printf("sht3ʪֵУʧ"); @@ -175,8 +226,8 @@ BOOL get_temp_humi_data(float* temdata, float* humidata) goto error_return; } - *temdata = tmp_temdata.fValue; - *humidata = tmp_humidata.fValue; + *temdata = tmp_temdata; + *humidata = tmp_humidata; //g_stTempHumiData.temp = tmp_temdata.fValue; //g_stTempHumiData.humi = tmp_humidata.fValue;