Compare commits

...

3 Commits

12 changed files with 389 additions and 28 deletions

View File

@ -129,8 +129,8 @@ typedef struct _mcs_para{
float32_t temperature; /* 环境温度 */
float32_t humidity; /* 环境湿度 */
float32_t pressure; /* 压强 */
float32_t precipitation; /* 雨量 */
float32_t precipitation_intensity; /* 光辐射 */
uint16_t precipitation; /* 雨量 已经是10倍了 */
uint32_t lightIntensity; /* 光强度 */
}mcs_para;
extern mcs_para g_stMcs_Para;

View File

@ -38,7 +38,8 @@ typedef enum
FRT_REGISTER_HUMIDITY = 13, /* 大气湿度 */
FRT_REGISTER_PRESSURE = 14, /* 大气压 */
FRT_REGISTER_RAIN = 15, /* 雨量 */
FRT_REGISTER_PRECIPITATION_INTENSITY = 16, /* ×Ü·øÉä */
FRT_REGISTER_LIGHT_INTENSITY_HIGH = 16, /* 光照高位 */
FRT_REGISTER_LIGHT_INTENSITY_LOW = 17, /* 光照低位 */
FRT_REGISTER_DEVICE_ADDR = 20, /* 设备地址 */
FRT_REGISTER_COMMU_BAUDRATE = 21, /* 波特率 */

View File

@ -31,6 +31,7 @@ typedef struct _usr_config_info{
u_int16_t uart_baud; /* 串口波特率 */
u_int16_t speed_average_time; /* 风速平均时间 */
u_int16_t temp_hum_update_time; /* 温湿度平均时间 */
u_int16_t rainPowr; /* 雨量电源 */
u_int16_t temp0; /* 占位留待升级 */
u_int16_t temp1; /* 占位留待升级 */
u_int16_t temp2; /* 占位留待升级 */
@ -39,6 +40,8 @@ typedef struct _usr_config_info{
u_int16_t temp5; /* 占位留待升级 */
u_int16_t temp6; /* 占位留待升级 */
u_int16_t temp7; /* 占位留待升级 */
u_int16_t temp8; /* 占位留待升级 */
u_int16_t temp9; /* 占位留待升级 */
u_int8_t flag_end;
}usr_config_info;

View File

@ -5,6 +5,7 @@
#include "anemometer_dev.h"
#include "sht30.h"
#include "hp203b.h"
#include "rain.h"
extern u_int8_t rs485_out_buff[50];
extern uart_device_info uart_devices[];
@ -31,8 +32,9 @@ static u_int16_t FRT_ReadRegTemperature(void *pMsg);
static u_int16_t FRT_ReadRegHumidity(void *pMsg);
static u_int16_t FRT_ReadRegPressure(void *pMsg);
static u_int16_t FRT_ReadRegRain(void *pMsg);
static u_int16_t FRT_ReadRegLightHigh(void *pMsg);
static u_int16_t FRT_ReadRegLightLow(void *pMsg);
/* 读 */
static u_int16_t FRT_ReadRegPrecipitationIntensity(void *pMsg);
static u_int16_t FRT_ReadRegDeviceAddr(void *pMsg);
static u_int16_t FRT_ReadRegCommuBaudRate(void *pMsg);
static u_int16_t FRT_ReadRegSpeedAverageTime(void *pMsg);
@ -43,6 +45,8 @@ static u_int16_t FRT_WriteRegDeviceAddr(void *pMsg);
static u_int16_t FRT_WriteRegCommuBaudRate(void *pMsg);
static u_int16_t FRT_WriteRegSpeedAverageTime(void *pMsg);
static u_int16_t FRT_WriteRegTempHumUpdateTime(void *pMsg);
static u_int16_t FRT_WriteRegRainPowr(void *pMsg);
static u_int16_t FRT_WriteRegRainReset(void *pMsg);
static u_int16_t FRT_WriteRegSoftReset(void *pMsg);
static u_int16_t FRT_WriteRegResetDefault(void *pMsg);
/* 读配置 */
@ -125,12 +129,13 @@ FRT_RegProcTable_s g_RegTbl[] =
{ FRT_REGISTER_HUMIDITY, FRT_ReadRegHumidity }, /* 大气湿度 */
{ FRT_REGISTER_PRESSURE, FRT_ReadRegPressure }, /* 大气压 */
{ FRT_REGISTER_RAIN, FRT_ReadRegRain }, /* 雨量 */
{ FRT_REGISTER_PRECIPITATION_INTENSITY, FRT_ReadRegPrecipitationIntensity }, /* 总辐射 */
{ FRT_REGISTER_LIGHT_INTENSITY_HIGH, FRT_ReadRegLightHigh }, /* 光照高位 */
{ FRT_REGISTER_LIGHT_INTENSITY_LOW, FRT_ReadRegLightLow }, /* 光照低位 */
{ FRT_REGISTER_DEVICE_ADDR, FRT_ReadRegDeviceAddr }, /* 设备地址 */
{ FRT_REGISTER_COMMU_BAUDRATE, FRT_ReadRegCommuBaudRate }, /* 波特率 */
{ FRT_REGISTER_SPEED_AVERAGE_TIME, FRT_ReadRegSpeedAverageTime }, /* 风速平均时间 */
{ FRT_REGISTER_TEMPHUM_UPDATE_TIME, FRT_ReadRegTempHumUpdateTime }, /* 温湿度更新时间 */
{ FRT_REGISTER_RAIN_POWER_CONTROL, FRT_ReadRegRainPowerCtl }, /* 雨量电源时间 */
{ FRT_REGISTER_RAIN_POWER_CONTROL, FRT_ReadRegRainPowerCtl }, /* 雨量电源控制 */
{ FRT_REGISTER_TRANSDUCER_CFG_1R5, FRT_ReadRegTransducerCFG1R5 }, /* 读换能器参数寄存器值1R5 */
{ FRT_REGISTER_TRANSDUCER_CFG_4R5, FRT_ReadRegTransducerCFG4R5 }, /* 读换能器参数寄存器值4R5 */
{ FRT_REGISTER_TRANSDUCER_CFG_8R0, FRT_ReadRegTransducerCFG8R0 }, /* 读换能器参数寄存器值8R0 */
@ -169,6 +174,8 @@ FRT_RegProcTable_s g_Write_RegTbl[] =
{ FRT_REGISTER_COMMU_BAUDRATE, FRT_WriteRegCommuBaudRate }, /* 写波特率 */
{ FRT_REGISTER_SPEED_AVERAGE_TIME, FRT_WriteRegSpeedAverageTime }, /* 写风速平均时间 */
{ FRT_REGISTER_TEMPHUM_UPDATE_TIME, FRT_WriteRegTempHumUpdateTime }, /* 写温湿度更新时间 */
{ FRT_REGISTER_RAIN_POWER_CONTROL, FRT_WriteRegRainPowr }, /* 写雨量电源 */
{ FRT_REGISTER_RAIN_REST, FRT_WriteRegRainReset }, /* 写雨量复位 */
{ FRT_REGISTER_SOFT_REST, FRT_WriteRegSoftReset }, /* 软件复位 */
{ FRT_REGISTER_REST_DEFAULT_SETTING, FRT_WriteRegResetDefault }, /* 恢复出厂设置 */
{ FRT_REGISTER_TRANSDUCER_CFG_1R5, FRT_WriteRegTransducerCFG1R5 }, /* 写换能器参数寄存器值1R5 */
@ -196,7 +203,7 @@ FRT_RegProcTable_s g_Write_RegTbl[] =
* @param
* @retval
*/
unsigned short CRC16(unsigned char *arr_buff, unsigned char len)
static unsigned short CRC16(unsigned char *arr_buff, unsigned char len)
{
unsigned short crc=0xFFFF;
unsigned char i, j;
@ -396,19 +403,30 @@ static u_int16_t FRT_ReadRegPressure(void *pMsg)
*/
static u_int16_t FRT_ReadRegRain(void *pMsg)
{
u_int16_t value=9;
u_int16_t value=(u_int16_t)(g_stMcs_Para.precipitation);
return FRT_swap_endian_16(value);
}
/**
* @brief
* @param
* @retval
*/
static u_int16_t FRT_ReadRegLightHigh(void *pMsg)
{
u_int16_t value=(u_int16_t)(g_stMcs_Para.lightIntensity>>16);
return FRT_swap_endian_16(value);
}
/**
* @brief
* @brief
* @param
* @retval
*/
static u_int16_t FRT_ReadRegPrecipitationIntensity(void *pMsg)
static u_int16_t FRT_ReadRegLightLow(void *pMsg)
{
u_int16_t value=10;
return FRT_swap_endian_16(value);
u_int16_t value=(u_int16_t)(g_stMcs_Para.lightIntensity);
return FRT_swap_endian_16(value);
}
/**
@ -466,8 +484,10 @@ static u_int16_t FRT_ReadRegTempHumUpdateTime(void *pMsg)
* @retval
*/
static u_int16_t FRT_ReadRegRainPowerCtl(void *pMsg)
{
return 0;
{
read_config_info();
u_int16_t value=g_usrConfigInfo.rainPowr;
return FRT_swap_endian_16(value);
}
/**
@ -553,6 +573,45 @@ static u_int16_t FRT_WriteRegTempHumUpdateTime(void *pMsg)
return 0;
}
/**
* @brief
* @param
* @retval
*/
static u_int16_t FRT_WriteRegRainPowr(void *pMsg)
{
uint16_t *pMsgAddr = (uint16_t *)pMsg;
uint16_t data = *pMsgAddr;
if(data == 0x0001)
{
rainLightPowerOn();
g_usrConfigInfo.rainPowr = 1;
save_usr_config_info(g_usrConfigInfo);
}else {
rainLightPowerOff();
g_usrConfigInfo.rainPowr = 0;
save_usr_config_info(g_usrConfigInfo);
}
return 0;
}
/**
* @brief
* @param
* @retval
*/
static u_int16_t FRT_WriteRegRainReset(void *pMsg)
{
uint16_t *pMsgAddr = (uint16_t *)pMsg;
uint16_t data = *pMsgAddr;
if(data == 0x0001)
{
clearRainData();
}
return 0;
}
/**
* @brief
* @param
@ -1298,9 +1357,9 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg)
u_int16_t reg_num= (data[4] << 8)| data[5];
if ( \
start_reg_addr < 0x00 ||\
(start_reg_addr > FRT_REGISTER_PRESSURE && start_reg_addr < FRT_REGISTER_DEVICE_ADDR) ||\
(start_reg_addr > FRT_REGISTER_TEMPHUM_UPDATE_TIME && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\
start_reg_addr > FRT_REGISTER_ID_4 \
(start_reg_addr > FRT_REGISTER_LIGHT_INTENSITY_LOW && start_reg_addr < FRT_REGISTER_DEVICE_ADDR) ||\
(start_reg_addr > FRT_REGISTER_RAIN_POWER_CONTROL && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\
start_reg_addr > FRT_REGISTER_ID_4 \
)
{
@ -1310,9 +1369,9 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg)
if ( \
reg_num < 0x01 ||\
(((reg_num + start_reg_addr - 1) > FRT_REGISTER_PRESSURE) && ((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR)) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_TEMPHUM_UPDATE_TIME) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\
((reg_num + start_reg_addr -1) > FRT_REGISTER_ID_4) \
(((reg_num + start_reg_addr - 1) > FRT_REGISTER_LIGHT_INTENSITY_LOW) && ((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR)) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_RAIN_POWER_CONTROL) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\
((reg_num + start_reg_addr -1) > FRT_REGISTER_ID_4) \
)
{
@ -1363,8 +1422,8 @@ void FRT_MsgProc_WriteRegister(device_handle device, void *pMsg)
// 校验
if (start_reg_addr < FRT_REGISTER_DEVICE_ADDR ||\
(start_reg_addr > FRT_REGISTER_REST_DEFAULT_SETTING && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\
(start_reg_addr > FRT_REGISTER_DISTANCE_WE && start_reg_addr < FRT_REGISTER_LINEAR_POINT_Y_1) ||\
(start_reg_addr > FRT_REGISTER_LINEAR_POINT_Y_5) && (start_reg_addr < FRT_REGISTER_ENCRYPT_1) ||\
(start_reg_addr > FRT_REGISTER_DISTANCE_WE && start_reg_addr < FRT_REGISTER_LINEAR_POINT_Y_1) ||\
(start_reg_addr > FRT_REGISTER_LINEAR_ENABLE) && (start_reg_addr < FRT_REGISTER_ENCRYPT_1) ||\
(start_reg_addr > FRT_REGISTER_ENCRYPT_4)
)
{
@ -1375,7 +1434,7 @@ void FRT_MsgProc_WriteRegister(device_handle device, void *pMsg)
((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_REST_DEFAULT_SETTING) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_DISTANCE_WE) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_LINEAR_POINT_Y_1)) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_LINEAR_POINT_Y_5) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_ENCRYPT_1)) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_LINEAR_ENABLE) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_ENCRYPT_1)) ||\
((reg_num + start_reg_addr -1) > FRT_REGISTER_ENCRYPT_4)
)
{

View File

@ -11,6 +11,7 @@ usr_config_info g_usrConfigInfo={
.uart_baud = 9600, /* 默认波特率 */
.speed_average_time = 600, /* 平均风速默认10分钟更新 */
.temp_hum_update_time = 600, /* 温湿度更新时间 */
.rainPowr = 1, /* モ<>ソオ釀エ */
.flag_end = FLAG_SAVE_INFLASH_END,
};

View File

@ -4,6 +4,7 @@
#include "timer.h"
#include "gpio.h"
#include "inflash.h"
#include "rain.h"
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart3;
@ -352,7 +353,7 @@ void init_ec801_uart()
* @retval None
*/
void init_rain_uart()
{
HAL_GPIO_WritePin(GPIO_RAIN_PWR_CTRL_GPIO_Port, GPIO_RAIN_PWR_CTRL_Pin, GPIO_PIN_SET);
{
rainLightPowerOn();
g_rain_uart_handle = uart_dev_init(RAIN_RS485_UART_INDEX, rain_in_buff, sizeof(rain_in_buff));
}

View File

@ -33,6 +33,7 @@ void task_shell_term_main_loop(void const * argument);
#include "inflash.h"
#include "hp203b.h"
#include "encrypt.h"
#include "rain.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@ -155,6 +156,7 @@ void StartDefaultTask(void const * argument)
{
read_and_process_uart_data(g_rs485_uart_handle);
read_and_process_uart_data(g_term_uart_handle);
readProcessRainData(g_rain_uart_handle);
osDelay(200);
}
/* USER CODE END StartDefaultTask */
@ -197,8 +199,8 @@ void LEDTask(void const * argument)
{
osDelay(1000);
if(LED_Check_flag)
{
HAL_GPIO_TogglePin(GPIOC,GPIO_LED_CTRL_Pin);
{getLightRainData();
HAL_GPIO_TogglePin(GPIOC,GPIO_LED_CTRL_Pin);
}
}
/* USER CODE END StartDefaultTask */

View File

@ -167,7 +167,7 @@ void Flash_EnableReadProtection(void)
/* USER CODE BEGIN 2 */
init_term_uart();
init_rs485_uart();
init_rain_uart();uart_dev_write(g_rain_uart_handle, "Hello", 5);
init_rain_uart();
// init_ec801_uart();
term_printf("Micro Climate Station Sensor.\r\n");
term_printf("Version 1.0.0 Build: %s %s\r\n",__DATE__,__TIME__);

252
Drivers/RainLight/rain.c Normal file
View File

@ -0,0 +1,252 @@
#include "rain.h"
#include "gpio.h"
#include "main.h"
#include "cmsis_os.h"
#include "anemometer_dev.h"
//开电
void rainLightPowerOn(void)
{
HAL_GPIO_WritePin(GPIO_RAIN_PWR_CTRL_GPIO_Port, GPIO_RAIN_PWR_CTRL_Pin, GPIO_PIN_SET);
}
//关电
void rainLightPowerOff(void)
{
HAL_GPIO_WritePin(GPIO_RAIN_PWR_CTRL_GPIO_Port, GPIO_RAIN_PWR_CTRL_Pin, GPIO_PIN_RESET);
}
//获取雨量指令,返回的雨量是十倍,两个字节
void getRainData(void)
{
uint8_t getRainDataCmd[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A};
uart_dev_write(g_rain_uart_handle, getRainDataCmd, sizeof(getRainDataCmd));
}
//清空雨量指令
void clearRainData(void)
{
uint8_t getRainDataCmd[] = {0x01, 0x06, 0x00, 0x00, 0x00, 0x5A, 0x09, 0xF1};
uart_dev_write(g_rain_uart_handle, getRainDataCmd, sizeof(getRainDataCmd));
}
//获取光照指令,返回一倍光照,四个字节
void getLightData(void)
{
uint8_t getRainDataCmd[] = {0x01, 0x03, 0x00, 0x02, 0x00, 0x02, 0x65, 0xCB};
uart_dev_write(g_rain_uart_handle, getRainDataCmd, sizeof(getRainDataCmd));
}
//同时获取光照雨量指令,返回一倍光照,四个字节;十倍雨量两个字节
void getLightRainData(void)
{
uint8_t getRainDataCmd[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x04, 0x44, 0x09};
uart_dev_write(g_rain_uart_handle, getRainDataCmd, sizeof(getRainDataCmd));
}
/**
* @brief
* @param
* @retval
*/
static int read_rain_pack(device_handle uart_handle,u_int8_t *buff, u_int32_t buff_size)
{
u_int32_t offset = 0;
char c = 0;
unsigned char new_buff[50];
buff_size--; //预留一个'\0'位置
for (int offset = 0; offset < buff_size;)
{
// 逐字符读取
c = uart_dev_in_char(uart_handle);
buff[offset++] = c;
// 判断首字符是否是地址,是地址再开始读取,不是则将索引退一步
if(offset == sizeof(unsigned char))
{
if(buff[0] != 0x01)
{
memcpy(buff, buff + 1, offset - 1);
offset--;
buff_size--;
}
}
// 判断功能码对不对,不对缩一位
else if(buff[1] != 0x06 && buff[1] != 0x03)
{
memcpy(buff, buff + 1, offset - 1);
offset--;
buff_size--;
}
// 读雨量
else if (buff[1] == 0x03 && buff[2] == 0x02 && offset == 7)
{
return offset;
}
// 读光照
else if (buff[1] == 0x03 && buff[2] == 0x04 && offset == 9)
{
return offset;
}
// 读光照雨量
else if (buff[1] == 0x03 && buff[2] == 0x08 && offset == 13)
{
return offset;
}
// 清除雨量
else if (buff[1] == 0x06 & offset == 8)
{
return offset;
}
}
return 0;
}
/**
* @brief
* @param
* @retval
*/
static void processLightData(u_int8_t *pMsg)
{
uint32_t lightVal = pMsg[0]<<24|pMsg[1]<<16|pMsg[2]<<8|pMsg[3];
g_stMcs_Para.lightIntensity = lightVal;
// term_printf("lightVal:%d", lightVal);
}
/**
* @brief
* @param
* @retval
*/
static void processRainData(u_int8_t *pMsg)
{
uint32_t rainVal = pMsg[0]<<8|pMsg[1];
g_stMcs_Para.precipitation = rainVal;
// term_printf("lightVal:%d", rainVal);
}
/**
* @brief
* @param
* @retval
*/
static void processLightRainData(u_int8_t *lightMsg, u_int8_t *rainMsg)
{
uint32_t rainVal = rainMsg[0]<<8|rainMsg[1];
uint32_t lightVal = lightMsg[0]<<24|lightMsg[1]<<16|lightMsg[2]<<8|lightMsg[3];
g_stMcs_Para.precipitation = rainVal;
g_stMcs_Para.lightIntensity = lightVal;
// term_printf("lightVal:%d", rainVal);
}
/**
* @brief
* @param
* @retval
*/
static void process0RainData(u_int8_t *pMsg)
{
}
/**
* @brief modbus crc16算法
* @param
* @retval
*/
static unsigned short CRC16(unsigned char *arr_buff, unsigned char len)
{
unsigned short crc=0xFFFF;
unsigned char i, j;
for ( j=0; j<len; j++){
crc=crc ^*arr_buff++;
for ( i=0; i<8; i++){
if( ( crc&0x0001) >0){
crc=crc>>1;
crc=crc^ 0xa001;
}else{
crc=crc>>1;
}
}
}
return crc;
}
/**
* @brief
* @param
* @retval
*/
#define RAIN_BUFF_CRC16(x) ((x[MsgLen - 2]) | (x[MsgLen - 1] << 8))
static void rainMsgHandler(device_handle device, u_int8_t *pMsg, u_int32_t MsgLen)
{
if(CRC16(pMsg, MsgLen-2) != RAIN_BUFF_CRC16(pMsg))
{
// term_printf("CRC不过");
return;
}
if((pMsg[1] != 0x03) && (pMsg[1] != 0x06))
{
// term_printf("功能码不过");
return;
}
uint8_t msgData[4] = {0};
switch(MsgLen)
{
//雨量数据
case 7:
msgData[0] = pMsg[3];
msgData[1] = pMsg[4];
processRainData(msgData);
break;
//清空雨量返回
case 8:
msgData[0] = pMsg[4];
msgData[1] = pMsg[5];
process0RainData(msgData);
break;
//数据光照
case 9:
msgData[0] = pMsg[3];
msgData[1] = pMsg[4];
msgData[2] = pMsg[5];
msgData[3] = pMsg[6];
processLightData(msgData);
break;
//数据光照雨量
case 13:
msgData[0] = pMsg[7];//光照
msgData[1] = pMsg[8];
msgData[2] = pMsg[9];
msgData[3] = pMsg[10];
uint8_t rainMsg[] = {pMsg[3], pMsg[4]};//雨量
processLightRainData(msgData, rainMsg);
break;
default:
break;
}
}
/**
* @brief
* @param
* @retval
*/
static u_int8_t rs485_buff[20]={0x00};
void readProcessRainData(device_handle device)
{
if(uart_dev_char_present(device))
{
osDelay(20);
memset(rs485_buff,0,sizeof(rs485_buff));
int ret = read_rain_pack(device, rs485_buff, sizeof(rs485_buff));
if(ret > 0)
{
rainMsgHandler(device, rs485_buff, ret);
}
}
}

22
Drivers/RainLight/rain.h Normal file
View File

@ -0,0 +1,22 @@
#ifndef __RAIN_H__
#define __RAIN_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "uart_dev.h"
void rainLightPowerOn(void); //开雨量光照电源
void rainLightPowerOff(void); //关雨量光照电源
void getRainData(void); //获取雨量指令
void clearRainData(void); //清空雨量数据
void getLightData(void); //获取光照数据
void getLightRainData(void); //获取光照与雨量
void readProcessRainData(device_handle device);//读取并解析数据
#ifdef __cplusplus
}
#endif
#endif /*___RAIN_H__ */

View File

@ -374,6 +374,7 @@
<state>$PROJ_DIR$\..\tools</state>
<state>$PROJ_DIR$\..\App\Inc</state>
<state>$PROJ_DIR$\..\Drivers\HP203B</state>
<state>$PROJ_DIR$\..\Drivers\RainLight</state>
</option>
<option>
<name>CCStdIncCheck</name>
@ -1485,6 +1486,7 @@
<state>$PROJ_DIR$\..\tools</state>
<state>$PROJ_DIR$\..\App\Inc</state>
<state>$PROJ_DIR$\..\Drivers\HP203B</state>
<state>$PROJ_DIR$\..\Drivers\RainLight</state>
</option>
<option>
<name>CCStdIncCheck</name>
@ -2365,6 +2367,15 @@
<name>$PROJ_DIR$\..\Drivers\HP203B\hp203b.h</name>
</file>
</group>
<group>
<name>RainLight</name>
<file>
<name>$PROJ_DIR$\..\Drivers\RainLight\rain.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Drivers\RainLight\rain.h</name>
</file>
</group>
<group>
<name>RingQueue</name>
<file>

View File

@ -2994,6 +2994,15 @@
<name>$PROJ_DIR$\..\Drivers\HP203B\hp203b.h</name>
</file>
</group>
<group>
<name>RainLight</name>
<file>
<name>$PROJ_DIR$\..\Drivers\RainLight\rain.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Drivers\RainLight\rain.h</name>
</file>
</group>
<group>
<name>RingQueue</name>
<file>