Compare commits
6 Commits
Author | SHA1 | Date |
---|---|---|
|
1fbf61f7d4 | |
|
d49c313dab | |
|
1041bc976e | |
|
d6e066b87b | |
|
52d3ef0d0c | |
|
d92e4d08a7 |
|
@ -133,8 +133,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;
|
||||
|
||||
|
|
|
@ -32,8 +32,8 @@ typedef enum
|
|||
FRT_REGISTER_HUMIDITY = 7, /* 大气湿度 */
|
||||
FRT_REGISTER_PRESSURE = 8, /* 大气压 */
|
||||
FRT_REGISTER_RAIN = 9, /* 雨量 */
|
||||
FRT_REGISTER_PRECIPITATION_INTENSITY = 10, /* ×Ü·øÉä */
|
||||
FRT_REGISTER_UV_INTENSITY = 11, /* ×ÏÍâÇ¿¶È */
|
||||
FRT_REGISTER_LIGHT_INTENSITY_HIGH = 10, /* 光照强度高位 */
|
||||
FRT_REGISTER_LIGHT_INTENSITY_LOW = 11, /* 光照强度低位 */
|
||||
FRT_REGISTER_THROUGH_WIND_DIRECTION = 12, /* 极小风向 */
|
||||
FRT_REGISTER_INSTANTANEOUS_WIND_DIRECTION = 13, /* 瞬时风向 */
|
||||
FRT_REGISTER_PEAK_WIND_DIRECTION = 14, /* 极大风向 */
|
||||
|
|
|
@ -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; /* 占位留待升级 */
|
||||
|
|
|
@ -19,6 +19,7 @@ typedef u_int32_t device_handle;
|
|||
extern device_handle g_term_uart_handle;
|
||||
extern device_handle g_rs485_uart_handle;
|
||||
extern device_handle g_ec801_uart_handle;
|
||||
extern device_handle g_rain_uart_handle;
|
||||
|
||||
#define RS485_MAX_PACK_DATA_LEN 30
|
||||
|
||||
|
@ -42,6 +43,7 @@ void uart_dev_write(device_handle device, void *data, int len);
|
|||
void init_term_uart();
|
||||
void init_rs485_uart();
|
||||
void init_ec801_uart();
|
||||
void init_rain_uart();
|
||||
void uart_close(uartIndex_e uart_index);
|
||||
void term_printf(char *format, ...);
|
||||
int term_uart_readln(u_int8_t *buff, int buff_size, u_int32_t timeout_ms);
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "FIR.h"
|
||||
#include "LowPassFilter.h"
|
||||
#include "encrypt.h"
|
||||
#include "rain.h"
|
||||
|
||||
#define AVE_TIME 600 //滑动平均时间,秒,最大600
|
||||
#define COVER_TINE 10 //探头遮挡后导致的接收次数过小的报错临界次数
|
||||
|
@ -1142,6 +1143,7 @@ void tem_hum_update_task(void const * argument)
|
|||
{
|
||||
osDelay(1000);
|
||||
if(!tem_hun_check_flag)continue;
|
||||
getLightRainData();//雨量光照
|
||||
time_s_temp_humi ++;
|
||||
// 温湿度大气压更新
|
||||
if (time_s_temp_humi >= g_usrConfigInfo.temp_hum_update_time)
|
||||
|
|
|
@ -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,8 @@ 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_ReadRegPrecipitationIntensity(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegUVIntensity(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegLightHigh(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegLightLow(void *pMsg);
|
||||
/* 读 */
|
||||
static u_int16_t FRT_ReadRegDeviceAddr(void *pMsg);
|
||||
static u_int16_t FRT_ReadRegCommuBaudRate(void *pMsg);
|
||||
|
@ -44,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);
|
||||
/* 读配置 */
|
||||
|
@ -126,14 +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_UV_INTENSITY, FRT_ReadRegUVIntensity }, /* 紫外强度 */
|
||||
|
||||
{ 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 */
|
||||
|
@ -172,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 */
|
||||
|
@ -199,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;
|
||||
|
@ -399,29 +403,29 @@ static u_int16_t FRT_ReadRegPressure(void *pMsg)
|
|||
*/
|
||||
static u_int16_t FRT_ReadRegRain(void *pMsg)
|
||||
{
|
||||
u_int16_t value=0;
|
||||
u_int16_t value=(u_int16_t)(g_stMcs_Para.precipitation);
|
||||
return FRT_swap_endian_16(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 读光辐射强度寄存器值
|
||||
* @brief 读光照高位寄存器值
|
||||
* @param
|
||||
* @retval
|
||||
*/
|
||||
static u_int16_t FRT_ReadRegPrecipitationIntensity(void *pMsg)
|
||||
static u_int16_t FRT_ReadRegLightHigh(void *pMsg)
|
||||
{
|
||||
u_int16_t value=0;
|
||||
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_ReadRegUVIntensity(void *pMsg)
|
||||
static u_int16_t FRT_ReadRegLightLow(void *pMsg)
|
||||
{
|
||||
u_int16_t value=0;
|
||||
u_int16_t value=(u_int16_t)(g_stMcs_Para.lightIntensity);
|
||||
return FRT_swap_endian_16(value);
|
||||
}
|
||||
|
||||
|
@ -481,7 +485,9 @@ static u_int16_t FRT_ReadRegTempHumUpdateTime(void *pMsg)
|
|||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -567,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
|
||||
|
@ -1312,7 +1357,6 @@ 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_THROUGH_WIND_DIRECTION) ||\ */
|
||||
(start_reg_addr > FRT_REGISTER_PEAK_WIND_SPEED && 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 \
|
||||
|
@ -1325,7 +1369,6 @@ 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_THROUGH_WIND_DIRECTION)) ||\ */
|
||||
(((reg_num + start_reg_addr - 1) > FRT_REGISTER_PEAK_WIND_SPEED) && ((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) \
|
||||
|
@ -1380,7 +1423,7 @@ 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_LINEAR_ENABLE) && (start_reg_addr < FRT_REGISTER_ENCRYPT_1) ||\
|
||||
(start_reg_addr > FRT_REGISTER_ENCRYPT_4)
|
||||
)
|
||||
{
|
||||
|
@ -1391,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)
|
||||
)
|
||||
{
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "timer.h"
|
||||
#include "gpio.h"
|
||||
#include "inflash.h"
|
||||
#include "rain.h"
|
||||
|
||||
extern UART_HandleTypeDef huart1;
|
||||
extern UART_HandleTypeDef huart3;
|
||||
|
@ -14,15 +15,18 @@ static u_int8_t uart_putchar(device_handle device, char ch);
|
|||
|
||||
device_handle g_term_uart_handle;
|
||||
device_handle g_rs485_uart_handle;
|
||||
device_handle g_rain_uart_handle;
|
||||
device_handle g_ec801_uart_handle;
|
||||
|
||||
device_handle uart_dev_init(uartIndex_e uart_index, uint8_t *buff, int buff_size);
|
||||
static u_int8_t term_in_buff[200];
|
||||
static u_int8_t ec801_in_buff[200];
|
||||
static u_int8_t rs485_in_buff[300];
|
||||
static u_int8_t rain_in_buff[50];
|
||||
|
||||
u_int8_t rs485_out_buff[100];
|
||||
u_int8_t ec801_out_buff[100];
|
||||
u_int8_t rain_out_buff[50];
|
||||
static u_int8_t term_out_buff[100];
|
||||
|
||||
/**
|
||||
|
@ -47,6 +51,11 @@ uart_device_info uart_devices[]={
|
|||
.uart_index = EC801_UART_INDEX,
|
||||
.uart_baudrate = 115200,
|
||||
},
|
||||
[3] = {
|
||||
.init = 0,
|
||||
.uart_index = RAIN_RS485_UART_INDEX,
|
||||
.uart_baudrate = 9600,
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -92,6 +101,10 @@ static void uart_init(uartIndex_e uart_index, int baud)
|
|||
MX_UART5_Init(baud);
|
||||
// MX_USART5_UART_Init();
|
||||
}
|
||||
else if(uart_index == RAIN_RS485_UART_INDEX){
|
||||
MX_LPUART1_UART_Init(baud);
|
||||
// MX_LPUART1_UART_Init();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -107,6 +120,8 @@ void uart_close(uartIndex_e uart_index)
|
|||
HAL_UART_MspDeInit(&huart3);
|
||||
}else if(uart_index == EC801_UART_INDEX){
|
||||
HAL_UART_MspDeInit(&huart5);
|
||||
}else if(uart_index == RAIN_RS485_UART_INDEX){
|
||||
HAL_UART_MspDeInit(&hlpuart1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,6 +147,8 @@ static u_int8_t uart_putchar(device_handle device, char ch)
|
|||
ret= HAL_UART_Transmit(&huart3,(uint8_t*)&ch,1,10);
|
||||
}else if(device_info->uart_index == EC801_UART_INDEX){
|
||||
ret= HAL_UART_Transmit(&huart5,(uint8_t*)&ch,1,10);
|
||||
}else if(device_info->uart_index == RAIN_RS485_UART_INDEX){
|
||||
ret= HAL_UART_Transmit(&hlpuart1,(uint8_t*)&ch,1,10);
|
||||
}
|
||||
|
||||
if(ret == HAL_OK){
|
||||
|
@ -331,3 +348,12 @@ void init_ec801_uart()
|
|||
g_ec801_uart_handle = uart_dev_init(EC801_UART_INDEX, ec801_in_buff, sizeof(ec801_in_buff));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ³õʼ»¯ÓêÁ¿´®¿Ú.
|
||||
* @retval None
|
||||
*/
|
||||
void init_rain_uart()
|
||||
{
|
||||
rainLightPowerOn();
|
||||
g_rain_uart_handle = uart_dev_init(RAIN_RS485_UART_INDEX, rain_in_buff, sizeof(rain_in_buff));
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ extern UART_HandleTypeDef huart3;
|
|||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_LPUART1_UART_Init(void);
|
||||
void MX_LPUART1_UART_Init(int baud);
|
||||
void MX_UART5_Init(int baud);
|
||||
void MX_USART1_UART_Init(int baud);
|
||||
void MX_USART3_UART_Init(int baud);
|
||||
|
|
|
@ -34,6 +34,7 @@ void task_shell_term_main_loop(void const * argument);
|
|||
#include "hp203b.h"
|
||||
#include "tmp117.h"
|
||||
#include "encrypt.h"
|
||||
#include "rain.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
|
@ -156,6 +157,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 */
|
||||
|
|
|
@ -153,7 +153,7 @@ void Flash_EnableReadProtection(void)
|
|||
MX_GPIO_Init();
|
||||
MX_DMA_Init();
|
||||
MX_ADC1_Init();
|
||||
MX_LPUART1_UART_Init();
|
||||
// MX_LPUART1_UART_Init(4800);
|
||||
// MX_USART1_UART_Init();
|
||||
// MX_USART3_UART_Init();
|
||||
MX_TIM2_Init();
|
||||
|
@ -168,6 +168,7 @@ void Flash_EnableReadProtection(void)
|
|||
/* USER CODE BEGIN 2 */
|
||||
init_term_uart();
|
||||
init_rs485_uart();
|
||||
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__);
|
||||
|
@ -217,8 +218,10 @@ void SystemClock_Config(void)
|
|||
/** Initializes the RCC Oscillators according to the specified parameters
|
||||
* in the RCC_OscInitTypeDef structure.
|
||||
*/
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_HSI;
|
||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||
RCC_OscInitStruct.PLL.PLLM = 1;
|
||||
|
|
|
@ -279,13 +279,20 @@ void UART5_IRQHandler(void)
|
|||
*/
|
||||
void LPUART1_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN LPUART1_IRQn 0 */
|
||||
|
||||
/* USER CODE END LPUART1_IRQn 0 */
|
||||
/* USER CODE BEGIN USART3_IRQn 0 */
|
||||
uint8_t c = 0;
|
||||
/* USER CODE END USART3_IRQn 0 */
|
||||
HAL_UART_IRQHandler(&hlpuart1);
|
||||
/* USER CODE BEGIN LPUART1_IRQn 1 */
|
||||
/* USER CODE BEGIN USART3_IRQn 1 */
|
||||
uart_device_info *dev = (uart_device_info *)g_rain_uart_handle;
|
||||
HAL_UART_Receive_IT(&hlpuart1, rx_uart2_buf,1);
|
||||
c = rx_uart2_buf[0];
|
||||
|
||||
/* USER CODE END LPUART1_IRQn 1 */
|
||||
if(!RingQueueFull(&dev->uart_ring_queue))
|
||||
InRingQueue(&dev->uart_ring_queue, c);
|
||||
|
||||
HAL_UART_Receive_IT(&hlpuart1, rx_uart2_buf,1);
|
||||
/* USER CODE END USART3_IRQn 1 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
|
|
@ -34,7 +34,7 @@ UART_HandleTypeDef huart3;
|
|||
|
||||
/* LPUART1 init function */
|
||||
|
||||
void MX_LPUART1_UART_Init(void)
|
||||
void MX_LPUART1_UART_Init(int baud)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN LPUART1_Init 0 */
|
||||
|
@ -45,8 +45,8 @@ void MX_LPUART1_UART_Init(void)
|
|||
|
||||
/* USER CODE END LPUART1_Init 1 */
|
||||
hlpuart1.Instance = LPUART1;
|
||||
hlpuart1.Init.BaudRate = 209700;
|
||||
hlpuart1.Init.WordLength = UART_WORDLENGTH_7B;
|
||||
hlpuart1.Init.BaudRate = baud;
|
||||
hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
|
||||
hlpuart1.Init.StopBits = UART_STOPBITS_1;
|
||||
hlpuart1.Init.Parity = UART_PARITY_NONE;
|
||||
hlpuart1.Init.Mode = UART_MODE_TX_RX;
|
||||
|
@ -58,7 +58,7 @@ void MX_LPUART1_UART_Init(void)
|
|||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN LPUART1_Init 2 */
|
||||
//HAL_UART_Receive_IT(&hlpuart1, rx_uart2_buf,1);
|
||||
HAL_UART_Receive_IT(&hlpuart1, rx_uart2_buf,1);
|
||||
/* USER CODE END LPUART1_Init 2 */
|
||||
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||
/** Initializes the peripherals clock
|
||||
*/
|
||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPUART1;
|
||||
PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_SYSCLK;
|
||||
PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_HSI;
|
||||
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
|
@ -192,7 +192,8 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN LPUART1_MspInit 1 */
|
||||
|
||||
HAL_NVIC_SetPriority(LPUART1_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(LPUART1_IRQn);
|
||||
/* USER CODE END LPUART1_MspInit 1 */
|
||||
}
|
||||
else if(uartHandle->Instance==UART5)
|
||||
|
@ -338,7 +339,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
|||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11);
|
||||
|
||||
/* USER CODE BEGIN LPUART1_MspDeInit 1 */
|
||||
|
||||
HAL_NVIC_DisableIRQ(LPUART1_IRQn);
|
||||
/* USER CODE END LPUART1_MspDeInit 1 */
|
||||
}
|
||||
else if(uartHandle->Instance==UART5)
|
||||
|
|
|
@ -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, 0x03, 0x00, 0x01, 0x74, 0x0A};
|
||||
uart_dev_write(g_rain_uart_handle, getRainDataCmd, sizeof(getRainDataCmd));
|
||||
}
|
||||
|
||||
//清空雨量指令
|
||||
void clearRainData(void)
|
||||
{
|
||||
uint8_t getRainDataCmd[] = {0x01, 0x06, 0x01, 0x05, 0x00, 0x00, 0x98, 0x37};
|
||||
uart_dev_write(g_rain_uart_handle, getRainDataCmd, sizeof(getRainDataCmd));
|
||||
}
|
||||
|
||||
//获取光照指令,返回一倍光照,四个字节
|
||||
void getLightData(void)
|
||||
{
|
||||
uint8_t getRainDataCmd[] = {0x01, 0x03, 0x00, 0x05, 0x00, 0x02, 0xD4, 0x0A};
|
||||
uart_dev_write(g_rain_uart_handle, getRainDataCmd, sizeof(getRainDataCmd));
|
||||
}
|
||||
|
||||
//同时获取光照雨量指令,返回一倍光照,四个字节;十倍雨量两个字节
|
||||
void getLightRainData(void)
|
||||
{
|
||||
uint8_t getRainDataCmd[] = {0x01, 0x03, 0x00, 0x03, 0x00, 0x04, 0xB4, 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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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__ */
|
||||
|
|
@ -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>
|
||||
<state>$PROJ_DIR$\..\Drivers\Tmp117</state>
|
||||
</option>
|
||||
<option>
|
||||
|
@ -1486,6 +1487,7 @@
|
|||
<state>$PROJ_DIR$\..\tools</state>
|
||||
<state>$PROJ_DIR$\..\App\Inc</state>
|
||||
<state>$PROJ_DIR$\..\Drivers\HP203B</state>
|
||||
<state>$PROJ_DIR$\..\Drivers\RainLight</state>
|
||||
<state>$PROJ_DIR$\..\Drivers\Tmp117</state>
|
||||
</option>
|
||||
<option>
|
||||
|
@ -2367,6 +2369,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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue