2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @file FluxUart.h
|
|
|
|
|
|
* @brief 串口通讯头文件
|
|
|
|
|
|
*
|
|
|
|
|
|
* 用于数据收发及解析工作(重要!)
|
|
|
|
|
|
*
|
|
|
|
|
|
* @author wang xiang en
|
|
|
|
|
|
* @date 2025-04-19
|
|
|
|
|
|
* @version 版本号
|
|
|
|
|
|
* @copyright 版权声明((C)2025, YUWELL MEDTECH Co.ltd)
|
|
|
|
|
|
*/
|
2025-03-15 09:37:07 +08:00
|
|
|
|
#ifndef _FLUX_UART_H
|
|
|
|
|
|
#define _FLUX_UART_H
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
extern "C" {
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2025-03-11 18:55:34 +08:00
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
#include "freertos/FreeRTOS.h"
|
|
|
|
|
|
#include "freertos/task.h"
|
|
|
|
|
|
#include "driver/uart.h"
|
|
|
|
|
|
#include "driver/gpio.h"
|
|
|
|
|
|
#include "sdkconfig.h"
|
|
|
|
|
|
#include "esp_log.h"
|
|
|
|
|
|
|
2025-03-15 09:37:07 +08:00
|
|
|
|
|
2025-03-11 18:55:34 +08:00
|
|
|
|
/* UART */
|
|
|
|
|
|
/* UART1 RT-2 TX-1*/
|
|
|
|
|
|
/* UART2 RT-46 TX-45*/
|
2025-03-15 13:17:10 +08:00
|
|
|
|
#define ECHO_TEST_TXD2 GPIO_NUM_45
|
|
|
|
|
|
#define ECHO_TEST_RXD2 GPIO_NUM_46
|
2025-03-11 18:55:34 +08:00
|
|
|
|
#define ECHO_UART_PORT_NUM2 (UART_NUM_2)
|
|
|
|
|
|
|
2025-03-15 13:17:10 +08:00
|
|
|
|
#define ECHO_TEST_TXD1 GPIO_NUM_1
|
|
|
|
|
|
#define ECHO_TEST_RXD1 GPIO_NUM_2
|
2025-03-11 18:55:34 +08:00
|
|
|
|
#define ECHO_UART_PORT_NUM1 (UART_NUM_1)
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/*不使用RTS CTS*/
|
2025-03-11 18:55:34 +08:00
|
|
|
|
#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
|
|
|
|
|
|
#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/* 通讯参数设置 */
|
2025-03-11 18:55:34 +08:00
|
|
|
|
#define ECHO_UART_BAUD_RATE (9600)
|
|
|
|
|
|
#define ECHO_TASK_STACK_SIZE (16*1024)
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/* 选择使用大端/小端模式 */
|
2025-03-12 17:32:58 +08:00
|
|
|
|
#define BIG_ENDIAN_USED 0
|
|
|
|
|
|
#define LITTLE_ENDIAN_USED !BIG_ENDIAN_USED
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/* 流量计通讯参数设定 地址、功能码 */
|
2025-03-12 17:32:58 +08:00
|
|
|
|
#define FLUX_ADDR 0x01
|
|
|
|
|
|
#define FLUX_FUNC_READ 0x03
|
2025-03-25 09:36:18 +08:00
|
|
|
|
#define FLUX_FUNC_SET 0x10
|
|
|
|
|
|
#define FLUX_FUNC_SET_SINGLE 0x06
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/* 启动指令下发事件组标志位 */
|
|
|
|
|
|
#define START_TEST_EVENT_BIT BIT0
|
2025-03-25 09:36:18 +08:00
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/* 定义缓冲大小 */
|
|
|
|
|
|
#define BUF_SIZE (1024)
|
2025-03-12 17:32:58 +08:00
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/*定义工作模式*/
|
|
|
|
|
|
enum FluxMachineWorkMode{
|
|
|
|
|
|
FLUX_MODE_NORMAL,
|
|
|
|
|
|
FLUX_MODE_TIMER,
|
|
|
|
|
|
FLUX_MODE_VOLUME,
|
|
|
|
|
|
FLUX_MODE_REV,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief RTU通讯帧
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-12 17:32:58 +08:00
|
|
|
|
struct ModbusRTU_Frame
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned char ADDR;
|
|
|
|
|
|
unsigned char FUNC;
|
2025-03-13 10:26:19 +08:00
|
|
|
|
unsigned char DATA[4];
|
2025-03-12 17:32:58 +08:00
|
|
|
|
unsigned char CRC[2];
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 32位RTU通讯帧
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-25 09:36:18 +08:00
|
|
|
|
struct ModbusRTU_Frame2Reg
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned char ADDR;
|
|
|
|
|
|
unsigned char FUNC;
|
2025-03-11 18:55:34 +08:00
|
|
|
|
|
2025-03-25 09:36:18 +08:00
|
|
|
|
unsigned short regAddr;
|
|
|
|
|
|
unsigned short regNum;
|
|
|
|
|
|
uint8_t ByteNum;
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t DATA[4];
|
|
|
|
|
|
unsigned char CRC[2];
|
|
|
|
|
|
};
|
2025-03-24 08:08:44 +08:00
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 当前机器状态
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-24 08:08:44 +08:00
|
|
|
|
struct FluxMachineData
|
|
|
|
|
|
{
|
|
|
|
|
|
enum FluxMachineWorkMode workMode;
|
|
|
|
|
|
float time;
|
|
|
|
|
|
float volume;
|
|
|
|
|
|
float rev;
|
|
|
|
|
|
|
2025-03-25 09:36:18 +08:00
|
|
|
|
float breathTimes;
|
2025-03-25 11:15:34 +08:00
|
|
|
|
int32_t breathRate;
|
2025-03-25 09:36:18 +08:00
|
|
|
|
|
2025-03-24 08:08:44 +08:00
|
|
|
|
unsigned short finishFlag;
|
|
|
|
|
|
float liquidTemperature;
|
|
|
|
|
|
float cumulativeVolume;
|
|
|
|
|
|
};
|
2025-04-19 09:30:40 +08:00
|
|
|
|
|
|
|
|
|
|
/* 记录当前呼吸频率、累计流量、累计体积、累计时间等数据 */
|
2025-03-24 08:08:44 +08:00
|
|
|
|
extern struct FluxMachineData FluxMachineData;
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/* 通讯帧结构体 */
|
|
|
|
|
|
extern struct ModbusRTU_Frame2Reg flux_frame2Reg;
|
|
|
|
|
|
|
|
|
|
|
|
/* 通讯帧结构体 */
|
|
|
|
|
|
extern struct ModbusRTU_Frame flux_frame;
|
|
|
|
|
|
extern struct ModbusRTU_Frame breath_frame;
|
|
|
|
|
|
|
|
|
|
|
|
/* 定义用于下发启动指令的帧 */
|
|
|
|
|
|
extern struct ModbusRTU_Frame flux_frame_start;
|
|
|
|
|
|
|
|
|
|
|
|
/* 启动指令下发事件组 */
|
|
|
|
|
|
extern EventGroupHandle_t start_state_event_group;
|
|
|
|
|
|
|
2025-04-23 16:00:26 +08:00
|
|
|
|
/* 导出当前工作模式的变量 */
|
|
|
|
|
|
extern bool is_test_mode_nom;
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 启动指令下发宏函数
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define FLUX_TEST_START flux_frame_start.ADDR = FLUX_ADDR;\
|
|
|
|
|
|
flux_frame_start.FUNC = FLUX_FUNC_SET_SINGLE;\
|
|
|
|
|
|
\
|
|
|
|
|
|
flux_frame_start.DATA[0] = 0x00;\
|
|
|
|
|
|
flux_frame_start.DATA[1] = 0x01;\
|
|
|
|
|
|
flux_frame_start.DATA[2] = 0x00;\
|
|
|
|
|
|
flux_frame_start.DATA[3] = 0x01;\
|
|
|
|
|
|
ESP_ERROR_CHECK(ModbusRTU_Send_0306(ECHO_UART_PORT_NUM1,&flux_frame_start));\
|
|
|
|
|
|
ESP_LOGI("FLUX_TEST_START","send start");
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 测试正确显示
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define RESULT_RIGHT lv_obj_set_style_bg_color(ui_pageHome_panelTestResult,lv_color_hex(0x00FF00),LV_PART_MAIN);\
|
|
|
|
|
|
lv_label_set_text(ui_pageHome_labelTestResult,"V");
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 测试错误显示
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define RESULT_FAULT lv_obj_set_style_bg_color(ui_pageHome_panelTestResult,lv_color_hex(0xFF0000),LV_PART_MAIN);\
|
|
|
|
|
|
lv_label_set_text(ui_pageHome_labelTestResult,"X");
|
|
|
|
|
|
|
2025-04-22 15:14:43 +08:00
|
|
|
|
/* 定义主界面进度条显示控制函数 */
|
2025-04-25 09:03:30 +08:00
|
|
|
|
#define FLUX_PROGRESS_BAR_CONTROL(x) lv_bar_set_value(ui_pageHome_BarTestProgBS, x, LV_ANIM_ON);
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 串口1收发任务 (流量计)
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] arg not used
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-15 13:17:10 +08:00
|
|
|
|
void uart1_echoTask(void* arg);
|
2025-03-11 18:55:34 +08:00
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 串口2收发任务 (呼吸模拟器)
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] arg not used
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-15 13:17:10 +08:00
|
|
|
|
void uart2_echoTask(void* arg);
|
2025-03-11 18:55:34 +08:00
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 测试任务
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] arg not used
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-25 14:26:24 +08:00
|
|
|
|
void test_task(void *arg);
|
|
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief CRC16 校验函数
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] pchMsg 输入的数据
|
|
|
|
|
|
* @param[in] wDataLen 数据长度
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-12 17:32:58 +08:00
|
|
|
|
unsigned short CRC16(unsigned char* pchMsg, unsigned short wDataLen);
|
2025-03-13 10:26:19 +08:00
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 封装03 06指令函数 单寄存器写、多寄存器读
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] uart_num 串口号
|
|
|
|
|
|
* @param[in] frame 需要发送的数据帧
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-25 09:36:18 +08:00
|
|
|
|
esp_err_t ModbusRTU_Send_0306(uart_port_t uart_num, struct ModbusRTU_Frame *frame);
|
2025-03-13 10:26:19 +08:00
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 封装多寄存器写函数 0x10指令
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param[in] uart_num 串口号
|
|
|
|
|
|
* @param[in] frame 需要发送的数据帧
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-25 09:36:18 +08:00
|
|
|
|
esp_err_t ModbusRTU_Send_0x10(uart_port_t uart_num, struct ModbusRTU_Frame2Reg *frame);
|
2025-03-15 09:37:07 +08:00
|
|
|
|
|
2025-04-19 09:30:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 根据主界面内容刷新测试结果
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2025-03-25 09:36:18 +08:00
|
|
|
|
esp_err_t RefreshResult(void);
|
2025-03-15 09:37:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
} /*extern "C"*/
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|