101 lines
2.0 KiB
C
101 lines
2.0 KiB
C
|
|
#ifndef _FLUX_UART_H
|
|
#define _FLUX_UART_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#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"
|
|
|
|
|
|
/* UART */
|
|
/* UART1 RT-2 TX-1*/
|
|
/* UART2 RT-46 TX-45*/
|
|
#define ECHO_TEST_TXD2 GPIO_NUM_45
|
|
#define ECHO_TEST_RXD2 GPIO_NUM_46
|
|
#define ECHO_UART_PORT_NUM2 (UART_NUM_2)
|
|
|
|
#define ECHO_TEST_TXD1 GPIO_NUM_1
|
|
#define ECHO_TEST_RXD1 GPIO_NUM_2
|
|
#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)
|
|
|
|
/* 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
|
|
|
|
/* Digital flow meter address */
|
|
#define FLUX_ADDR 0x01
|
|
#define FLUX_FUNC_READ 0x03
|
|
#define FLUX_FUNC_SET 0x16
|
|
|
|
/* 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;
|
|
unsigned char DATA[4];
|
|
unsigned char CRC[2];
|
|
};
|
|
|
|
extern struct ModbusRTU_Frame flux_frame;
|
|
extern struct ModbusRTU_Frame breath_frame;
|
|
|
|
typedef enum FluxMachineWorkMode{
|
|
FLUX_MODE_NORMAL,
|
|
FLUX_MODE_TIMER,
|
|
FLUX_MODE_VOLUME,
|
|
FLUX_MODE_REV,
|
|
};
|
|
|
|
struct FluxMachineData
|
|
{
|
|
enum FluxMachineWorkMode workMode;
|
|
float time;
|
|
float volume;
|
|
float rev;
|
|
|
|
unsigned short finishFlag;
|
|
float liquidTemperature;
|
|
float cumulativeVolume;
|
|
};
|
|
extern struct FluxMachineData FluxMachineData;
|
|
|
|
/* UART1 response task */
|
|
void uart1_echoTask(void* arg);
|
|
|
|
/* UART2 response task */
|
|
void uart2_echoTask(void* arg);
|
|
|
|
/* CRC16 checksum */
|
|
unsigned short CRC16(unsigned char* pchMsg, unsigned short wDataLen);
|
|
|
|
|
|
esp_err_t ModbusRTU_Send(uart_port_t uart_num, struct ModbusRTU_Frame *frame);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
} /*extern "C"*/
|
|
#endif
|
|
|
|
#endif |