diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c
index 2e7a317..05be3ee 100644
--- a/Core/Src/freertos.c
+++ b/Core/Src/freertos.c
@@ -30,7 +30,8 @@ void task_shell_term_main_loop(void const * argument);
#include "anemometer_dev.h"
#include "uart_dev.h"
#include "frt_protocol.h"
-#include "inflash.h"
+#include "inflash.h"
+#include "hp203b.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -186,11 +187,13 @@ void SensorTask(void const * argument)
void LEDTask(void const * argument)
{
/* USER CODE BEGIN StartDefaultTask */
- /* Infinite loop */
+ /* Infinite loop */double press=0;double altitude=0;double Temp=0;
for(;;)
{
- osDelay(200);
+ osDelay(1000);
HAL_GPIO_TogglePin(GPIOC,GPIO_LED_CTRL_Pin);
+ Hp203bReadPressureTemperature(&press, &altitude, &Temp);
+ term_printf("pressure:%f\r\naltitude:%f\r\ntemperature:%f\r\n\r\n", press, altitude, Temp);
}
/* USER CODE END StartDefaultTask */
}
diff --git a/Core/Src/main.c b/Core/Src/main.c
index e5b5255..63fb28f 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -41,7 +41,7 @@
#include "anemometer_dev.h"
#include "uart_dev.h"
-#include "sht30.h"
+#include "sht30.h"
#include "inflash.h"
/* USER CODE END Includes */
diff --git a/Drivers/HP203B/hp203b.c b/Drivers/HP203B/hp203b.c
new file mode 100644
index 0000000..db43ceb
--- /dev/null
+++ b/Drivers/HP203B/hp203b.c
@@ -0,0 +1,93 @@
+#include "hp203b.h"
+#include "i2c.h"
+#include "pdebug.h"
+#include "assertions.h"
+#include "filter.h"
+#include "cmsis_os.h"
+
+uint8_t hp20X_SOFT_RST = 0x06; //软复位
+uint8_t hp20X_READ_P = 0x30; //压力
+uint8_t hp20X_READ_A = 0x31; //高度
+uint8_t hp20X_READ_T = 0x32; //温度
+uint8_t hp20X_READ_PT = 0x10; //温度压力
+uint8_t hp20X_READ_AT = 0x11; //温度海拔
+
+/****************************
+*名称:HP203_soft_reset
+*功能:对hp203发送软复位指令
+*参数:无
+*返回:无
+*****************************/
+void HP203_soft_reset(void)
+{
+ HAL_I2C_Master_Transmit(&hi2c3, HP20X_ADDRESSCMD, &hp20X_SOFT_RST, 1, 0xffff);//0xec,0x06----进行软件复位
+ osDelay(30); //延时20MS thread误差+10
+}
+
+
+/****************************
+*名称:Hp203bReadPressureTemperature
+*功能:获取气压、海拔、温度数据
+*参数: Press--气压值
+* Altitude--海拔
+* Temp--温度
+*返回:无
+*****************************/
+void Hp203bReadPressureTemperature(double *Hp203bPressure,double *Hp203bAltitude,double *Hp203bTemp)
+{
+ uint8_t Osr_Cfg = HP20X_CONVERT_OSR1024; //0x08
+
+ uint8_t DataBuf[6];
+ long Hp203b_Temp;
+ long Hp203b_Pressure;
+ long Hp203b_Altitude;
+ uint8_t status = 0xFF;
+
+ uint8_t command = HP20X_WR_CONVERT_CMD | Osr_Cfg;
+
+ status = HAL_I2C_Master_Transmit(&hi2c3, HP20X_ADDRESSCMD, &command, 1, 0xffff);
+ while(status != HAL_OK){}
+// if(HAL_I2C_Master_Transmit(&hi2c3, HP20X_ADDRESSCMD, &command, 1, 0xffff) == HAL_OK) //0x40 | 0x08 = 0x48----010: fixed; 010: OSR = 1024; 00: sensor pressure and temperature channel;
+// {
+ osDelay(74); //延时64MS 具体可以根据OSR值调整 thread误差+10
+
+ HAL_I2C_Master_Transmit(&hi2c3, HP20X_ADDRESSCMD, &hp20X_READ_PT, 1, 0xffff); //命令:0x10----读取温度和压力数据
+
+ HAL_I2C_Master_Receive(&hi2c3, HP20X_ADDRESSCMD, DataBuf, 6, 0xffff); //读取6个字节数据:3个字节的温度数据和3个字节的压力数据
+
+ Hp203b_Temp = DataBuf[0]; //将3个字节的温度数据整合成24位的温度数据
+ Hp203b_Temp <<= 8;
+ Hp203b_Temp |= DataBuf[1];
+ Hp203b_Temp <<= 8;
+ Hp203b_Temp |= DataBuf[2];
+
+ if(Hp203b_Temp > 0x7FFFFF) //判断是否负值
+ Hp203b_Temp = Hp203b_Temp - 16777216;
+
+ *Hp203bTemp = (double)Hp203b_Temp / 100; //计算温度数据
+
+ Hp203b_Pressure = DataBuf[3]; //将3个字节的压力数据整合成24位的压力数据
+ Hp203b_Pressure <<= 8;
+ Hp203b_Pressure |= DataBuf[4];
+ Hp203b_Pressure <<= 8;
+ Hp203b_Pressure |= DataBuf[5];
+
+ *Hp203bPressure = (double)Hp203b_Pressure / 100; //计算压力数据
+
+ HAL_I2C_Master_Transmit(&hi2c3, HP20X_ADDRESSCMD, &hp20X_READ_A, 1, 0xffff); //命令:0x31----读取高度数据
+
+ HAL_I2C_Master_Receive(&hi2c3, HP20X_ADDRESSCMD, DataBuf, 3, 0xffff); //读取3个字节数据:3个字节的高度数据
+
+ Hp203b_Altitude = DataBuf[0]; //将3个字节的高度数据整合成24位的高度数据
+ Hp203b_Altitude <<= 8;
+ Hp203b_Altitude |= DataBuf[1];
+ Hp203b_Altitude <<= 8;
+ Hp203b_Altitude |= DataBuf[2];
+
+ if(Hp203b_Altitude > 0x7FFFFF) //判断是否负值
+ Hp203b_Altitude = Hp203b_Altitude - 16777216;
+
+ *Hp203bAltitude = (double)Hp203b_Altitude / 100; //计算高度数据
+// }
+}
+
diff --git a/Drivers/HP203B/hp203b.h b/Drivers/HP203B/hp203b.h
new file mode 100644
index 0000000..27612a1
--- /dev/null
+++ b/Drivers/HP203B/hp203b.h
@@ -0,0 +1,21 @@
+#ifndef _HP203B_H_
+#define _HP203B_H_
+#include "i2c.h"
+#include "comm_types.h"
+
+//#define HP20X_ADDRESSCMD 0xec //CSB PIN = 1,高电平
+#define HP20X_ADDRESSCMD 0xee //CSB PIN = 0,低电平
+#define HP20XX_RDY 0x8d
+
+#define HP20X_WR_CONVERT_CMD 0x40
+#define HP20X_CONVERT_OSR4096 0<<2
+#define HP20X_CONVERT_OSR2048 1<<2
+#define HP20X_CONVERT_OSR1024 2<<2 //0x08
+#define HP20X_CONVERT_OSR512 3<<2
+#define HP20X_CONVERT_OSR256 4<<2
+#define HP20X_CONVERT_OSR128 5<<2
+
+void HP203_soft_reset(void);
+extern void Hp203bReadPressureTemperature(double *Hp203bPressure,double *Hp203bAltitude,double *Hp203bTemp);
+
+#endif
diff --git a/EWARM/micro_climate.ewp b/EWARM/micro_climate.ewp
index a54ad63..7271bfa 100644
--- a/EWARM/micro_climate.ewp
+++ b/EWARM/micro_climate.ewp
@@ -189,7 +189,7 @@