FluxDC/components/FluxUart/FluxUart.h
2025-03-15 09:37:07 +08:00

82 lines
1.7 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"
#include "FluxDisplayPort.h"
/* UART */
/* UART1 RT-2 TX-1*/
/* UART2 RT-46 TX-45*/
#define ECHO_TEST_TXD2 (45)
#define ECHO_TEST_RXD2 (46)
#define ECHO_UART_PORT_NUM2 (UART_NUM_2)
#define ECHO_TEST_TXD1 (1)
#define ECHO_TEST_RXD1 (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;
/* UART1 response task */
void uart1_echoTask(void);
/* UART2 response task */
void uart2_echoTask(void);
/* 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