FluxDC/components/FluxUart/FluxUart.h

143 lines
3.4 KiB
C
Raw Normal View History

2025-03-11 18:55:34 +08:00
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)
#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)
#define ECHO_UART_BAUD_RATE (9600)
#define ECHO_TASK_STACK_SIZE (16*1024)
2025-03-15 09:37:07 +08:00
/* Choose whether to use big-endian or little-endian. Modbus-RTU communication uses little-endian. */
#define BIG_ENDIAN_USED 0
#define LITTLE_ENDIAN_USED !BIG_ENDIAN_USED
2025-03-15 09:37:07 +08:00
/* Digital flow meter address */
#define FLUX_ADDR 0x01
#define FLUX_FUNC_READ 0x03
#define FLUX_FUNC_SET 0x10
#define FLUX_FUNC_SET_SINGLE 0x06
#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");
2025-03-15 09:37:07 +08:00
/* Modbus-RTU frame format */
/* All data from the wet flow meter are two bytes long */
/*
ADDR : 1byte
FUNC : 1byte
DATA : 2byte
CRC : 2byte
*/
struct ModbusRTU_Frame
{
unsigned char ADDR;
unsigned char FUNC;
2025-03-13 10:26:19 +08:00
unsigned char DATA[4];
unsigned char CRC[2];
};
2025-03-13 10:26:19 +08:00
extern struct ModbusRTU_Frame flux_frame;
extern struct ModbusRTU_Frame breath_frame;
extern struct ModbusRTU_Frame flux_frame_start;
/*定义32位寄存器写结构体*/
struct ModbusRTU_Frame2Reg
{
unsigned char ADDR;
unsigned char FUNC;
2025-03-11 18:55:34 +08:00
unsigned short regAddr;
unsigned short regNum;
uint8_t ByteNum;
uint8_t DATA[4];
unsigned char CRC[2];
};
extern struct ModbusRTU_Frame2Reg flux_frame2Reg;
/*定义工作模式*/
enum FluxMachineWorkMode{
2025-03-24 08:08:44 +08:00
FLUX_MODE_NORMAL,
FLUX_MODE_TIMER,
FLUX_MODE_VOLUME,
FLUX_MODE_REV,
};
struct FluxMachineData
{
enum FluxMachineWorkMode workMode;
float time;
float volume;
float rev;
float breathTimes;
int32_t breathRate;
2025-03-24 08:08:44 +08:00
unsigned short finishFlag;
float liquidTemperature;
float cumulativeVolume;
};
extern struct FluxMachineData FluxMachineData;
2025-03-15 09:37:07 +08:00
/* UART1 response task */
2025-03-15 13:17:10 +08:00
void uart1_echoTask(void* arg);
2025-03-11 18:55:34 +08:00
2025-03-15 09:37:07 +08:00
/* UART2 response task */
2025-03-15 13:17:10 +08:00
void uart2_echoTask(void* arg);
2025-03-11 18:55:34 +08:00
2025-03-25 14:26:24 +08:00
/*测试任务*/
void test_task(void *arg);
extern EventGroupHandle_t start_state_event_group;
#define START_TEST_EVENT_BIT BIT0
2025-03-15 09:37:07 +08:00
/* CRC16 checksum */
unsigned short CRC16(unsigned char* pchMsg, unsigned short wDataLen);
2025-03-13 10:26:19 +08:00
/*封装03 06指令函数 单寄存器写、多寄存器读*/
esp_err_t ModbusRTU_Send_0306(uart_port_t uart_num, struct ModbusRTU_Frame *frame);
2025-03-13 10:26:19 +08:00
/*封装多寄存器写函数 0x10指令*/
esp_err_t ModbusRTU_Send_0x10(uart_port_t uart_num, struct ModbusRTU_Frame2Reg *frame);
2025-03-15 09:37:07 +08:00
/*根据主界面内容刷新测试结果*/
esp_err_t RefreshResult(void);
2025-03-15 09:37:07 +08:00
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif