752 lines
29 KiB
C
752 lines
29 KiB
C
|
||
/**
|
||
******************************************************************************
|
||
* @file hal_uart.h
|
||
* @author William Liang
|
||
* @version V1.0.0
|
||
* @date 07/22/2013
|
||
* @brief This file contains the headers of the uart handlers.
|
||
******************************************************************************
|
||
*/
|
||
|
||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||
#ifndef _UART_H_
|
||
#define _UART_H_
|
||
|
||
/* Includes ------------------------------------------------------------------*/
|
||
|
||
#include "include.h"
|
||
#include "protocol.h"
|
||
#include "storage.h"
|
||
|
||
#define USART_BUF_SIXE 255
|
||
|
||
//define COM MBUS master infomation
|
||
#define COM_MBUS_MASTER_NO USART1
|
||
|
||
#ifdef COMMON_VER
|
||
#define COM_MBUS_MASTER_BAUD 2400
|
||
#endif
|
||
|
||
#ifdef AMT_VER
|
||
#define COM_MBUS_MASTER_BAUD 1200
|
||
#endif
|
||
|
||
#define COM_MBUS_MASTER_CHECK USART_Parity_Even
|
||
#define COM_MBUS_MASTER_CLK RCC_APB2Periph_USART1
|
||
|
||
#define COM_MBUS_MASTER_TX_PIN GPIO_Pin_9
|
||
#define COM_MBUS_MASTER_TX_PORT GPIOA
|
||
#define COM_MBUS_MASTER_TX_PORT_CLK RCC_APB2Periph_GPIOA
|
||
|
||
#define COM_MBUS_MASTER_RX_PIN GPIO_Pin_10
|
||
#define COM_MBUS_MASTER_RX_PORT GPIOA
|
||
#define COM_MBUS_MASTER_RX_PORT_CLK RCC_APB2Periph_GPIOA
|
||
|
||
#define COM_MBUS_MASTER_IRQn USART1_IRQn
|
||
|
||
#define COM_MBUS_MASTER_DMA_CLK RCC_AHBPeriph_DMA1
|
||
#define COM_MBUS_MASTER_TX_DMA_CHANNEL DMA1_Channel4
|
||
#define COM_MBUS_MASTER_DR_BASE (USART1_BASE + 4)
|
||
#define COM_MBUS_MASTER_TX_IRQHandler DMA1_Channel4_IRQHandler
|
||
#define COM_MBUS_MASTER_RX_IRQHandler USART1_IRQHandler
|
||
#define COM_MBUS_MASTER_TX_DMA_COMPLETE DMA1_IT_TC4
|
||
#define COM_MBUS_MASTER_TX_DMA_ERROR DMA1_IT_TE4
|
||
#define COM_MBUS_MASTER_DMA_IRQn DMA1_Channel4_IRQn
|
||
|
||
#define COM_MBUS_MASTER_TX_BUFFER_SIZE 200
|
||
#define COM_MBUS_MASTER_RX_BUFFER_SIZE 512
|
||
#define COM_MBUS_MASTER_STR "MBUS master"
|
||
|
||
|
||
//define COM LORA moudule infomation
|
||
//#define COM_RADIO_NO UART5
|
||
//#define COM_RADIO_BAUD 9600 //8,e,1
|
||
//#define COM_RADIO_CHECK USART_Parity_Even
|
||
//#define COM_RADIO_CLK RCC_APB1Periph_UART5
|
||
//
|
||
//#define COM_RADIO_TX_PIN GPIO_Pin_12
|
||
//#define COM_RADIO_TX_PORT GPIOC
|
||
//#define COM_RADIO_TX_PORT_CLK RCC_APB2Periph_GPIOC
|
||
//
|
||
//#define COM_RADIO_RX_PIN GPIO_Pin_2
|
||
//#define COM_RADIO_RX_PORT GPIOD
|
||
//#define COM_RADIO_RX_PORT_CLK RCC_APB2Periph_GPIOD
|
||
//
|
||
//#define COM_RADIO_IRQn UART5_IRQn
|
||
//
|
||
//#define COM_RADIO_DMA_CLK 0
|
||
//
|
||
//#define COM_RADIO_TX_DMA_CHANNEL 0
|
||
//#define COM_RADIO_DR_BASE 0
|
||
//#define COM_RADIO_TX_IRQHandler 0
|
||
//#define COM_RADIO_RX_IRQHandler 0
|
||
//#define COM_RADIO_TX_DMA_COMPLETE 0
|
||
//#define COM_RADIO_TX_DMA_ERROR 0
|
||
//#define COM_RADIO_DMA_IRQn 0
|
||
//
|
||
//
|
||
//#define COM_RADIO_TX_BUFFER_SIZE 255
|
||
//#define COM_RADIO_RX_BUFFER_SIZE 255
|
||
//#define COM_RADIO_STR "radio"
|
||
|
||
|
||
#define COM_RADIO_NO UART4
|
||
#define COM_RADIO_BAUD 2400 //8,e,1
|
||
#define COM_RADIO_CHECK USART_Parity_Even
|
||
#define COM_RADIO_CLK RCC_APB1Periph_UART4
|
||
|
||
#define COM_RADIO_TX_PIN GPIO_Pin_10
|
||
#define COM_RADIO_TX_PORT GPIOC
|
||
#define COM_RADIO_TX_PORT_CLK RCC_APB2Periph_GPIOC
|
||
|
||
#define COM_RADIO_RX_PIN GPIO_Pin_11
|
||
#define COM_RADIO_RX_PORT GPIOC
|
||
#define COM_RADIO_RX_PORT_CLK RCC_APB2Periph_GPIOC
|
||
|
||
#define COM_RADIO_IRQn UART4_IRQn
|
||
|
||
#define COM_RADIO_DMA_CLK RCC_AHBPeriph_DMA2
|
||
|
||
#define COM_RADIO_TX_DMA_CHANNEL DMA2_Channel5
|
||
#define COM_RADIO_DR_BASE (UART4_BASE + 4)
|
||
#define COM_RADIO_TX_IRQHandler DMA2_Channel4_5_IRQHandler
|
||
#define COM_RADIO_RX_IRQHandler UART4_IRQHandler
|
||
#define COM_RADIO_TX_DMA_COMPLETE DMA2_IT_TC5
|
||
#define COM_RADIO_TX_DMA_ERROR DMA2_IT_TE5
|
||
#define COM_RADIO_DMA_IRQn DMA2_Channel4_5_IRQn
|
||
|
||
|
||
//#define COM_RADIO_TX_BUFFER_SIZE 255
|
||
//#define COM_RADIO_RX_BUFFER_SIZE 255
|
||
#define COM_RADIO_TX_BUFFER_SIZE 10
|
||
#define COM_RADIO_RX_BUFFER_SIZE 10
|
||
#define COM_RADIO_STR "radio"
|
||
|
||
|
||
//
|
||
//#define COM_DEBUG_NO UART4 // DEBUG
|
||
//#define COM_DEBUG_BAUD 9600
|
||
//#define COM_DEBUG_CHECK USART_Parity_Even
|
||
//#define COM_DEBUG_CLK RCC_APB1Periph_UART4
|
||
//
|
||
//#define COM_DEBUG_TX_PIN GPIO_Pin_10
|
||
//#define COM_DEBUG_TX_PORT GPIOC
|
||
//#define COM_DEBUG_TX_PORT_CLK RCC_APB2Periph_GPIOC
|
||
//
|
||
//#define COM_DEBUG_RX_PIN GPIO_Pin_11
|
||
//#define COM_DEBUG_RX_PORT GPIOC
|
||
//#define COM_DEBUG_RX_PORT_CLK RCC_APB2Periph_GPIOC
|
||
//
|
||
//#define COM_DEBUG_IRQn UART4_IRQn
|
||
//
|
||
//#define COM_DEBUG_DMA_CLK RCC_AHBPeriph_DMA2
|
||
//#define COM_DEBUG_TX_DMA_CHANNEL DMA2_Channel5
|
||
//#define COM_DEBUG_DR_BASE (UART4_BASE + 4)
|
||
//#define COM_DEBUG_TX_IRQHandler DMA2_Channel4_5_IRQHandler
|
||
//#define COM_DEBUG_RX_IRQHandler UART4_IRQHandler
|
||
//#define COM_DEBUG_TX_DMA_COMPLETE DMA2_IT_TC5
|
||
//#define COM_DEBUG_TX_DMA_ERROR DMA2_IT_TE5
|
||
//#define COM_DEBUG_DMA_IRQn DMA2_Channel4_5_IRQn
|
||
//#define COM_DEBUG_TX_BUFFER_SIZE 255
|
||
//#define COM_DEBUG_RX_BUFFER_SIZE 255
|
||
//#define COM_DEBUG_STR "DEBUG"
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
//define COM PLC module infomation
|
||
#define COM_PLC_NO USART3
|
||
#define COM_PLC_BAUD 115200
|
||
#define COM_PLC_CHECK USART_Parity_No
|
||
//#define COM_PLC_BAUD 2400
|
||
//#define COM_PLC_CHECK USART_Parity_Even
|
||
#define COM_PLC_CLK RCC_APB1Periph_USART3
|
||
|
||
#define COM_PLC_TX_PIN GPIO_Pin_10
|
||
#define COM_PLC_TX_PORT GPIOB
|
||
#define COM_PLC_TX_PORT_CLK RCC_APB2Periph_GPIOB
|
||
|
||
#define COM_PLC_RX_PIN GPIO_Pin_11
|
||
#define COM_PLC_RX_PORT GPIOB
|
||
#define COM_PLC_RX_PORT_CLK RCC_APB2Periph_GPIOB
|
||
|
||
#define COM_PLC_IRQn USART3_IRQn
|
||
|
||
#define COM_PLC_DMA_CLK RCC_AHBPeriph_DMA1
|
||
#define COM_PLC_TX_DMA_CHANNEL DMA1_Channel2
|
||
#define COM_PLC_DR_BASE (USART3_BASE + 4)
|
||
#define COM_PLC_TX_IRQHandler DMA1_Channel2_IRQHandler
|
||
#define COM_PLC_RX_IRQHandler USART3_IRQHandler
|
||
#define COM_PLC_TX_DMA_COMPLETE DMA1_IT_TC2
|
||
#define COM_PLC_TX_DMA_ERROR DMA1_IT_TE2
|
||
#define COM_PLC_DMA_IRQn DMA1_Channel2_IRQn
|
||
|
||
#define COM_PLC_TX_BUFFER_SIZE 512
|
||
#define COM_PLC_RX_BUFFER_SIZE 512
|
||
#define COM_PLC_STR "PLC"
|
||
|
||
|
||
//define COM LORA moudule infomation
|
||
#define COM_485_NO USART2
|
||
#define COM_485_BAUD 2400 //8,e,1
|
||
#define COM_485_CHECK USART_Parity_Even//USART_Parity_No
|
||
#define COM_485_CLK RCC_APB1Periph_USART2
|
||
|
||
#define COM_485_TX_PIN GPIO_Pin_2
|
||
#define COM_485_TX_PORT GPIOA
|
||
#define COM_485_TX_PORT_CLK RCC_APB2Periph_GPIOA
|
||
|
||
#define COM_485_RX_PIN GPIO_Pin_3
|
||
#define COM_485_RX_PORT GPIOA
|
||
#define COM_485_RX_PORT_CLK RCC_APB2Periph_GPIOA
|
||
|
||
#define COM_485_IRQn USART2_IRQn
|
||
|
||
#define COM_485_DMA_CLK RCC_AHBPeriph_DMA1
|
||
#define COM_485_TX_DMA_CHANNEL DMA1_Channel7
|
||
#define COM_485_DR_BASE (USART2_BASE + 4)
|
||
#define COM_485_TX_IRQHandler DMA1_Channel7_IRQHandler
|
||
#define COM_485_RX_IRQHandler USART2_IRQHandler
|
||
#define COM_485_TX_DMA_COMPLETE DMA1_IT_TC7
|
||
#define COM_485_TX_DMA_ERROR DMA1_IT_TE7
|
||
#define COM_485_DMA_IRQn DMA1_Channel7_IRQn
|
||
|
||
#define COM_485_TX_BUFFER_SIZE 255
|
||
#define COM_485_RX_BUFFER_SIZE 255
|
||
//#define COM_485_TX_BUFFER_SIZE 20
|
||
//#define COM_485_RX_BUFFER_SIZE 10
|
||
#define COM_485_STR "485"
|
||
|
||
|
||
|
||
#define COM_4852_NO NULL//USART2
|
||
#define COM_4852_BAUD 600 //8,e,1
|
||
#define COM_4852_CHECK USART_Parity_Even
|
||
#define COM_4852_CLK NULL//RCC_APB1Periph_USART2
|
||
|
||
#define COM_4852_TX_PIN GPIO_Pin_4
|
||
#define COM_4852_TX_PORT GPIOA
|
||
#define COM_4852_TX_PORT_CLK RCC_APB2Periph_GPIOA
|
||
|
||
#define COM_4852_RX_PIN GPIO_Pin_5
|
||
#define COM_4852_RX_PORT GPIOA
|
||
#define COM_4852_RX_PORT_CLK RCC_APB2Periph_GPIOA
|
||
|
||
|
||
#define COM_4852_TX_BIT0 GPIO_ResetBits(COM_4852_TX_PORT, COM_4852_TX_PIN);
|
||
#define COM_4852_TX_BIT1 GPIO_SetBits(COM_4852_TX_PORT, COM_4852_TX_PIN);
|
||
#define COM_4852_RX_BIT GPIO_ReadInputDataBit(COM_4852_RX_PORT, COM_4852_RX_PIN)
|
||
//接收管脚中断
|
||
#define COM_4852_RX_LINE EXTI_Line5
|
||
#define COM_4852_RX_PORT_SOURCE GPIO_PortSourceGPIOA
|
||
#define COM_4852_RX_PIN_SOURCE GPIO_PinSource5
|
||
#define COM_4852_IRQn EXTI9_5_IRQn//USART2_IRQn
|
||
//数据波特率定时器
|
||
#define COM_4852_BAUD_TIMER TIM4
|
||
#define COM_4852_BAUD_TIMER_CLK RCC_APB1Periph_TIM4
|
||
#define COM_4852_BAUD_PRESC 100
|
||
#define COM_4852_BAUD_TIMER_PERIOD (SystemCoreClock/COM_4852_BAUD_PRESC/COM_4852_BAUD)
|
||
#define COM_4852_BAUD_IRQn TIM4_IRQn
|
||
#define COM_4852_BAUD_IRQHandler TIM4_IRQHandler
|
||
|
||
|
||
|
||
|
||
#define COM_4852_DMA_CLK 0//RCC_AHBPeriph_DMA1
|
||
#define COM_4852_TX_DMA_CHANNEL 0//DMA1_Channel7
|
||
#define COM_4852_DR_BASE 0//(USART2_BASE + 4)
|
||
#define COM_4852_TX_IRQHandler 0//DMA1_Channel7_IRQHandler
|
||
#define COM_4852_RX_IRQHandler EXTI9_5_IRQHandler//USART2_IRQHandler
|
||
#define COM_4852_TX_DMA_COMPLETE 0//DMA1_IT_TC7
|
||
#define COM_4852_TX_DMA_ERROR 0//DMA1_IT_TE7
|
||
#define COM_4852_DMA_IRQn 0//DMA1_Channel7_IRQn
|
||
|
||
#define COM_4852_TX_BUFFER_SIZE 255
|
||
#define COM_4852_RX_BUFFER_SIZE 255
|
||
#define COM_4852_STR "4852"
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
//define COM module end
|
||
#define MBUS_OVERLOAD_FLAG_PIN GPIO_Pin_3
|
||
#define MBUS_OVERLOAD_FLAG_PIN_PORT GPIOC
|
||
#define MBUS_OVERLOAD_FLAG_PORT_CLK RCC_APB2Periph_GPIOC
|
||
|
||
#define MBUS_OVERLOAD_FLAG_PORT_SOURCE GPIO_PortSourceGPIOC
|
||
#define MBUS_OVERLOAD_FLAG_PIN_SOURCE GPIO_PinSource3
|
||
#define MBUS_OVERLOAD_FLAG_LINE EXTI_Line3
|
||
#define MBUS_OVERLOAD_FLAG_IRQHandler EXTI3_IRQHandler
|
||
*/
|
||
|
||
|
||
#define MBUSM_BAUD_COFF (11 * 1000 / COM_MBUS_MASTER_BAUD)
|
||
#define PLC_BAUD_COFF (11 * 1000 / COM_PLC_BAUD)
|
||
#define RS485_BAUD_COFF (11 * 1000 / COM_485_BAUD)
|
||
#define PRINT_BAUD_COFF (11 * 1000 / COM_DEBUG_BAUD)
|
||
|
||
|
||
//#define MBUS_SWITCH_TIMEOUT (10000 /portTICK_RATE_MS)
|
||
#define MBUS_SWITCH_TIMEOUT (60000 /portTICK_RATE_MS)
|
||
|
||
|
||
#define PORT_RX_TIMEOUT (70 /portTICK_RATE_MS)//设置串口的超时接收时间,此值需设置为最低波特率的最少两个字节时间
|
||
#define SCAN_PORT_RERIOD (5 /portTICK_RATE_MS)//扫描串口超时的周期
|
||
|
||
#define MBUS_TIMEOUT (1200 /portTICK_RATE_MS)
|
||
#define CS485_TIMEOUT (2000 /portTICK_RATE_MS)
|
||
#define PLC_TIMEOUT (2500 /portTICK_RATE_MS)
|
||
#define XIMEI_TIMEOUT (10000 /portTICK_RATE_MS)
|
||
#define MUT_TIMEOUT (2000 /portTICK_RATE_MS)
|
||
|
||
#define OPEN_SWITCN_DELAY (2000 /portTICK_RATE_MS)
|
||
#define DELAY_HOUR_TIME (3600000 /portTICK_RATE_MS)
|
||
#define DELAY_MIN_TIME (60000 /portTICK_RATE_MS)
|
||
|
||
|
||
typedef struct
|
||
{
|
||
USART_TypeDef * com;
|
||
USART_InitTypeDef uart_param;
|
||
uint32_t com_clk;
|
||
uint16_t com_tx_pin;
|
||
GPIO_TypeDef * com_tx_port;
|
||
uint32_t com_tx_port_clk;
|
||
uint16_t com_rx_pin;
|
||
GPIO_TypeDef * com_rx_port;
|
||
uint32_t xom_rx_port_clk;
|
||
uint32_t com_DMA_CLK;
|
||
uint8_t com_IRQn;
|
||
uint8_t com_DMA_IRQn;
|
||
}st_uart_int;
|
||
|
||
|
||
typedef struct
|
||
{
|
||
USART_TypeDef * com;
|
||
DMA_Channel_TypeDef * com_TX_DMA_CHANNEL;
|
||
uint32_t com_DR_BASE;
|
||
u16 txbufLength;
|
||
}st_uart_channel_cfg;
|
||
|
||
#define COMM_BUF_SIZE 512
|
||
|
||
typedef struct
|
||
{
|
||
u8 *rxBuf;
|
||
u8 *txBuf;
|
||
u16 tx_index;
|
||
u16 rx_index;
|
||
u16 rx_len;
|
||
u16 tx_len;
|
||
u32 rx_timeout;
|
||
u32 tx_timeout;
|
||
}st_uart_buf_cfg;
|
||
|
||
|
||
struct st_uart_port
|
||
{
|
||
EventBits_t port_No;
|
||
SemaphoreHandle_t xSemaphore;
|
||
st_uart_int init;
|
||
st_uart_channel_cfg chl;
|
||
st_uart_buf_cfg data;
|
||
char * string;
|
||
};
|
||
|
||
|
||
|
||
|
||
#define DEFAULT_USART_CFG(baud, check) { baud,USART_WordLength_9b,USART_StopBits_1,\
|
||
check, (USART_Mode_Rx | USART_Mode_Tx),\
|
||
USART_HardwareFlowControl_None\
|
||
}
|
||
|
||
|
||
#define USART_INIT(name) { name##_NO,\
|
||
DEFAULT_USART_CFG(name##_BAUD, name##_CHECK),\
|
||
name##_CLK,name##_TX_PIN,\
|
||
name##_TX_PORT,name##_TX_PORT_CLK,\
|
||
name##_RX_PIN,\
|
||
name##_RX_PORT,\
|
||
name##_RX_PORT_CLK,\
|
||
name##_DMA_CLK,\
|
||
name##_IRQn,\
|
||
name##_DMA_IRQn\
|
||
}
|
||
|
||
#define USART_DMA_config(name) {name##_NO, name##_TX_DMA_CHANNEL, (uint32_t)name##_DR_BASE, name##_TX_BUFFER_SIZE}
|
||
|
||
#define USART_PORT_PARAMS(name, rxbuf, txbuf) {name##_PORT_NO, NULL, USART_INIT(name),USART_DMA_config(name),{rxbuf,txbuf,0,0,0,0,0,0}, name##_STR}
|
||
|
||
|
||
#define USART_RX_INT_HANDLE(name) void name##_RX_IRQHandler(void) \
|
||
{ \
|
||
if (USART_GetITStatus(name##_NO, USART_IT_RXNE) != RESET) \
|
||
{ \
|
||
uart_int_rx_frame(&(name##_port)); \
|
||
} \
|
||
} \
|
||
|
||
|
||
|
||
#define USART_TX_INT_HANDLE(name) void name##_TX_IRQHandler(void) \
|
||
{ \
|
||
if (DMA_GetITStatus(name##_TX_DMA_COMPLETE) != RESET) \
|
||
{ \
|
||
DMA_ClearITPendingBit(name##_TX_DMA_COMPLETE); \
|
||
uart_dma_tx_callback(&(name##_port)); \
|
||
} \
|
||
if (DMA_GetITStatus(name##_TX_DMA_ERROR) != RESET) \
|
||
{ \
|
||
DMA_ClearITPendingBit(name##_TX_DMA_ERROR); \
|
||
} \
|
||
}
|
||
|
||
|
||
#define create_uart_port(name, rxbuf, txbuf) struct st_uart_port name##_port = USART_PORT_PARAMS(name, rxbuf, txbuf);\
|
||
USART_TX_INT_HANDLE(name) \
|
||
USART_RX_INT_HANDLE(name) \
|
||
|
||
|
||
enum
|
||
{
|
||
UP_VER_OF_COMMON = 0,
|
||
UP_VER_OF_ON_KEY,
|
||
UP_VER_OF_OFF_KEY,
|
||
UP_VER_OF_WHSF,
|
||
UP_VER_OF_E5E50000,
|
||
UP_VER_OF_E5E50001,
|
||
UP_VER_OF_FJWGDATA,
|
||
UP_VER_OF_standard,
|
||
UP_VER_OF_MAX
|
||
};
|
||
|
||
|
||
enum
|
||
{
|
||
PORT_NONE = 0,
|
||
PORT_MBUS_MASTER,
|
||
PORT_RADIO,
|
||
PORT_PLC,
|
||
PORT_485,
|
||
PORT_MUT,
|
||
POET_DEBUG,
|
||
POET_4852,
|
||
PORT_MAX,
|
||
};
|
||
|
||
enum
|
||
{
|
||
COM_MBUS_MASTER_PORT_NO = (1UL << PORT_MBUS_MASTER),
|
||
COM_RADIO_PORT_NO = (1UL << PORT_RADIO),
|
||
COM_PLC_PORT_NO = (1UL << PORT_PLC),
|
||
COM_485_PORT_NO = (1UL << PORT_485),
|
||
COM_MUT_PORT_NO = (1UL << PORT_MUT),
|
||
COM_DEBUG_PORT_NO = (1UL << POET_DEBUG),
|
||
COM_4852_PORT_NO = (1UL << POET_4852),
|
||
PORT_AUTO = (COM_MBUS_MASTER_PORT_NO | COM_485_PORT_NO | COM_MUT_PORT_NO)
|
||
};
|
||
|
||
|
||
enum
|
||
{
|
||
PROTCL_AUTO = 0,
|
||
PROTCL_E5E50000,
|
||
|
||
MBUS_METER_START,
|
||
MBUS_901F_2400_E,
|
||
MBUS_1F90_2400_E,
|
||
MBUS_HHCQ_2400_N,
|
||
MBUS_YZSJ_1200_E,
|
||
MBUS_HZJD_1200_E,
|
||
MBUS_METER_MAX,
|
||
|
||
RS485_METER_START,
|
||
RS485_NJSM_1200_N,
|
||
RS485_CS485_2400_E,
|
||
RS485_XYDX_2400_8N2,
|
||
RS485_METER_MAX,
|
||
|
||
MUT_METER_START,
|
||
MUT_RS232_CD_115200_N,
|
||
//MUT_CQXM_LORA,
|
||
MUT_SPI_LORA,
|
||
MUT_METER_MAX,
|
||
};
|
||
|
||
/* Baud( bps): 0~7 依次表示:
|
||
自适应, 1200, 2400, 4800, 9600, 19200,
|
||
38400, 57600 */
|
||
enum
|
||
{
|
||
BAUD_auto = 0,
|
||
BAUD_1200,
|
||
BAUD_2400,
|
||
BAUD_4800,
|
||
BAUD_9600,
|
||
BAUD_19200,
|
||
BAUD_38400,
|
||
BAUD_57600,
|
||
};
|
||
|
||
|
||
/* 0/1:
|
||
1/2 停止位 */
|
||
enum
|
||
{
|
||
STOP_1bits = 0,
|
||
STOP_2bits,
|
||
};
|
||
|
||
|
||
/* 0/1:
|
||
无/有校验 */
|
||
|
||
enum
|
||
{
|
||
PARITY_NONE = 0,
|
||
PARITY_TRUE,
|
||
|
||
};
|
||
|
||
|
||
/* 0/1:
|
||
偶/奇校验 */
|
||
enum
|
||
{
|
||
PARITY_EVEN = 0,
|
||
PARITY_ODD,
|
||
};
|
||
|
||
/* 0~3:
|
||
5-8 位数 */
|
||
enum
|
||
{
|
||
DATABITS_5 = 0,
|
||
DATABITS_6,
|
||
DATABITS_7,
|
||
DATABITS_8,
|
||
};
|
||
|
||
enum
|
||
{
|
||
UP_PORT_PLC,
|
||
UP_PORT_485,
|
||
UP_PORT_MAX,
|
||
};
|
||
|
||
enum
|
||
{
|
||
|
||
MBUS_MODE_MASTER = 0,
|
||
MBUS_MODE_SLAVE,
|
||
};
|
||
|
||
/********************define MBUS power contrl pin******************************/
|
||
//MBUS继电器控制
|
||
#define MBUS_POWER_CTRL_PIN GPIO_Pin_1
|
||
#define MBUS_POWER_CTRL_PIN_PORT GPIOB
|
||
#define MBUS_POWER_CTRL_PORT_CLK RCC_APB2Periph_GPIOB
|
||
#define open_mbus_switch() GPIO_ResetBits(MBUS_POWER_CTRL_PIN_PORT, MBUS_POWER_CTRL_PIN)
|
||
//#define close_mbus_switch() GPIO_SetBits(MBUS_POWER_CTRL_PIN_PORT, MBUS_POWER_CTRL_PIN)
|
||
#define mbus_switch_state() GPIO_ReadOutputDataBit(MBUS_POWER_CTRL_PIN_PORT, MBUS_POWER_CTRL_PIN)
|
||
|
||
/********************define MBUS in pin*******************************/
|
||
#define MBUS_EXTIN_PIN GPIO_Pin_4
|
||
#define MBUS_EXTIN_PORT GPIOC
|
||
#define MBUS_EXTIN_CLK RCC_APB2Periph_GPIOC
|
||
#define MBUS_in_state() GPIO_ReadInputDataBit(MBUS_EXTIN_PORT, MBUS_EXTIN_PIN)
|
||
|
||
#define MBUS_EXT_FLAG_PORT_SOURCE GPIO_PortSourceGPIOC
|
||
#define MBUS_EXT_FLAG_PIN_SOURCE GPIO_PinSource4
|
||
#define MBUS_EXT_FLAG_LINE EXTI_Line4
|
||
#define MBUS_EXT_IRQHandler EXTI4_IRQHandler
|
||
|
||
|
||
/********************define MBUS overload *******************************/
|
||
#define MBUS_OVERLOAD_PIN GPIO_Pin_12
|
||
#define MBUS_OVERLOAD_PORT GPIOB
|
||
#define MBUS_OVERLOAD_CLK RCC_APB2Periph_GPIOB
|
||
#define MBUS_OVERLOAD_in_state() GPIO_ReadInputDataBit(MBUS_OVERLOAD_PORT, MBUS_OVERLOAD_PIN)
|
||
|
||
#define MBUS_OVERLOAD_FLAG_PORT_SOURCE GPIO_PortSourceGPIOB
|
||
#define MBUS_OVERLOAD_FLAG_PIN_SOURCE GPIO_PinSource12
|
||
#define MBUS_OVERLOAD_FLAG_LINE EXTI_Line12
|
||
#define MBUS_OVERLOAD_FLAG_IRQHandler EXTI15_10_IRQHandler
|
||
|
||
|
||
/********************define power level pin*******************************/
|
||
#define POWER_LEVEL_PIN GPIO_Pin_13
|
||
#define POWER_LEVEL_PORT GPIOB
|
||
#define POWER_LEVEL_PORT_CLK RCC_APB2Periph_GPIOB
|
||
|
||
#define SET_POWER_LEVEL_HIGH() GPIO_SetBits(POWER_LEVEL_PORT, POWER_LEVEL_PIN);
|
||
#define SET_POWER_LEVEL_LOW() GPIO_ResetBits(POWER_LEVEL_PORT, POWER_LEVEL_PIN);
|
||
#define power_level_state() GPIO_ReadOutputDataBit(POWER_LEVEL_PORT, POWER_LEVEL_PIN)
|
||
|
||
|
||
|
||
/********************define 485 power contrl pin******************************/
|
||
#define RS485_CTRL_PIN GPIO_Pin_5
|
||
#define RS485_CTRL_PIN_PORT GPIOC
|
||
#define RS485_CTRL_PORT_CLK RCC_APB2Periph_GPIOC
|
||
#define open_RS485_switch() GPIO_ResetBits(RS485_CTRL_PIN_PORT, RS485_CTRL_PIN);hal_sRF_ITConfig(RS485_OVERLOAD_FLAG_LINE, ENABLE)
|
||
|
||
|
||
#define close_RS485_switch() GPIO_SetBits(RS485_CTRL_PIN_PORT, RS485_CTRL_PIN); hal_sRF_ITConfig(RS485_OVERLOAD_FLAG_LINE, DISABLE)
|
||
|
||
|
||
|
||
#define RS485_switch_state() GPIO_ReadOutputDataBit(RS485_CTRL_PIN_PORT, RS485_CTRL_PIN)
|
||
|
||
/********************define 485 in pin*******************************/
|
||
#define RS485_EXTIN_PIN GPIO_Pin_6
|
||
#define RS485_EXTIN_PORT GPIOA
|
||
#define RS485_EXTIN_CLK RCC_APB2Periph_GPIOA
|
||
#define RS485_in_state() GPIO_ReadInputDataBit(RS485_EXTIN_PORT, RS485_EXTIN_PIN)
|
||
|
||
/********************define MBUS overload *******************************/
|
||
#define RS485_OVERLOAD_PIN GPIO_Pin_7
|
||
#define RS485_OVERLOAD_PORT GPIOA
|
||
#define RS485_OVERLOAD_CLK RCC_APB2Periph_GPIOA
|
||
#define RS485_OVERLOAD_in_state() GPIO_ReadInputDataBit(RS485_OVERLOAD_PORT, RS485_OVERLOAD_PIN)
|
||
|
||
|
||
|
||
#define RS485_OVERLOAD_FLAG_PORT_SOURCE GPIO_PortSourceGPIOA
|
||
#define RS485_OVERLOAD_FLAG_PIN_SOURCE GPIO_PinSource7
|
||
#define RS485_OVERLOAD_FLAG_LINE EXTI_Line7
|
||
#define RS485_OVERLOAD_IRQn EXTI9_5_IRQn
|
||
|
||
#define RS485_OVERLOAD_FLAG_IRQHandler EXTI9_5_IRQHandler
|
||
|
||
|
||
/********************define PLC reset pin*******************************/
|
||
#define PLC_RESET_PIN GPIO_Pin_0
|
||
#define PLC_RESET_PIN_PORT GPIOB
|
||
#define PLC_RESET_PIN_CLK RCC_APB2Periph_GPIOB
|
||
|
||
#define PLC_RESET_HIGH() GPIO_SetBits(PLC_RESET_PIN_PORT, PLC_RESET_PIN)
|
||
#define PLC_RESET_LOW() GPIO_ResetBits(PLC_RESET_PIN_PORT, PLC_RESET_PIN)
|
||
|
||
/********************define overload current pin*******************************/
|
||
#define MUT_RESET_PIN GPIO_Pin_14
|
||
#define MUT_RESET_PIN_PORT GPIOB
|
||
#define MUT_RESET_PIN_CLK RCC_APB2Periph_GPIOB
|
||
|
||
#define MUT_RESET_HIGH() GPIO_SetBits(PLC_RESET_PIN_PORT, PLC_RESET_PIN)
|
||
#define MUT_RESET_LOW() GPIO_ResetBits(PLC_RESET_PIN_PORT, PLC_RESET_PIN)
|
||
|
||
|
||
//#define IRDA_TPIN_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_0, GPIO_Mode_AF_OD} //PA0
|
||
//#define IRDA_RPIN_CFG {GPIOC, RCC_APB2Periph_GPIOC, GPIO_Pin_1, GPIO_Mode_IPU} //PC1
|
||
//#define RF_DOWN_TPIN_CFG {GPIOC, RCC_APB2Periph_GPIOC, GPIO_Pin_12, GPIO_Mode_IN_FLOATING} //PC12
|
||
//#define RF_DOWN_RPIN_CFG {GPIOD, RCC_APB2Periph_GPIOD, GPIO_Pin_2, GPIO_Mode_IN_FLOATING} //PD2
|
||
//#define RS485_UP_TPIN_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_4, GPIO_Mode_IN_FLOATING} //PA4
|
||
//#define RS485_UP_RPIN_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_5, GPIO_Mode_IN_FLOATING} //PA5
|
||
|
||
|
||
#define PLC_RESET_CFG {GPIOB, RCC_APB2Periph_GPIOB, GPIO_Pin_0, GPIO_Mode_Out_OD} //PB0
|
||
|
||
#define MBUS_SWITCH_CFG {GPIOB, RCC_APB2Periph_GPIOB, GPIO_Pin_1, GPIO_Mode_IN_FLOATING} //PB1
|
||
#define MBUS_EXT_CFG {GPIOC, RCC_APB2Periph_GPIOC, GPIO_Pin_4, GPIO_Mode_IN_FLOATING} //PC4
|
||
#define MBUS_OVERLOAD_CFG {GPIOB, RCC_APB2Periph_GPIOB, GPIO_Pin_12, GPIO_Mode_IN_FLOATING} //PB12
|
||
|
||
#define RS485_CTRL_CFG {GPIOC, RCC_APB2Periph_GPIOC, GPIO_Pin_5, GPIO_Mode_IN_FLOATING} //PC5
|
||
#define RS485_OVERLOAD_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_7, GPIO_Mode_IN_FLOATING} //PA7
|
||
#define RS485_EXT_CFG {GPIOA, RCC_APB2Periph_GPIOA, GPIO_Pin_6, GPIO_Mode_IN_FLOATING} //PA6
|
||
|
||
#define MBUS_POW_LEVEL_CFG {GPIOB, RCC_APB2Periph_GPIOB, GPIO_Pin_13, GPIO_Mode_IN_FLOATING} //PB13
|
||
|
||
|
||
#define OFF_KEY 0xAA
|
||
#define ON_KEY 0x55
|
||
|
||
|
||
|
||
extern void add_one_list_node(st_params* params);
|
||
extern void COM_frozen_uplinkPacket_create(st_params * ptr, u8* outBuf);
|
||
extern void COM_uplinkPacket_create(st_params * ptr, u8* outBuf);
|
||
extern u16 create_queue_send_packet(u8 * buf, u16 length);
|
||
extern void DLT645_07_addr_ack(u8 *buf);
|
||
extern void DLT645_97_1F_addr_ack(u8 *buf);
|
||
extern void E5E5_uplinkPacket_create(st_params * ptr, u8* outBuf);
|
||
extern u8 get_protocl_inRAM(void);
|
||
extern bool get_readMeter_params(u8 *buf, st_params * ptr);
|
||
extern bool get_read_meter_packet(u16 meter_protcl, u8 type, u8 *meter_id, u8 *outBuf, u16 *outLen);
|
||
extern void hal_InitCOM(struct st_uart_port * port);
|
||
extern void hal_UartDMATx(struct st_uart_port* uart_port, u8 *pBuf, u16 length);
|
||
//extern void hal_UartIntTx(u8 *pBuf, u16 length);
|
||
extern void init_uart_port(struct st_uart_port * port);
|
||
extern void init_uart_tasks(void);
|
||
extern void led_process_task(void * ptr);
|
||
extern void mbus_gpio_init(void);
|
||
extern void MBUS_master_process_task(void * ptr);
|
||
extern void MBUS_mater_Tx(u8 *pBuf, u16 length);
|
||
extern void MBUS_OVERLOAD_FLAG_IRQHandler(void);
|
||
extern void MBUS_slave_process_task(void *ptr);
|
||
extern void mbus_switch_timeOut_callback_function(TimerHandle_t xTimer);
|
||
extern bool meter_ack_packet_process(u16 meter_protl, u8 *inbuf, u16 inLen, st_params * ptr, u8* outBuf);
|
||
extern void PLC_process_task(void *ptr);
|
||
extern void plc_uart_Tx(u8 *buf, u16 length);
|
||
extern void port_send(struct st_uart_port* port, u8 *buf, u16 length);
|
||
extern bool read_meter_process(u8 meter_protcl);
|
||
extern bool read_power_level(void);
|
||
extern void read_standard_elcMeter(u8 *buf, u8 length);
|
||
extern void saved_meter_process(bool success, struct st_meter_temp_value *saved_ptr, st_params * ptr);
|
||
extern void set_curent_protocl(u8 config,u8 MBUSpower);
|
||
extern void set_mbus_master_params(u32 baud, u16 check);
|
||
extern void set_PLC_UART_baud(u32 baud);
|
||
extern void set_port_prams(u16 meter_protcl);
|
||
extern void set_power_level(bool high);
|
||
extern void simulate_mbus_plc_rx(u8 *buf, u16 len);
|
||
extern void temp_saved_task(void *ptr);
|
||
extern void UART5_IRQHandler(void);
|
||
extern void uarts_process_task(void * ptr);
|
||
extern void uart_dma_tx_callback(struct st_uart_port* uartPort);
|
||
extern void uart_int_rx_frame(struct st_uart_port* uartPort);
|
||
extern void uplinkPacket_create(st_params * ptr, u8* outBuf);
|
||
extern void uplink_ack_send(u8 uplink, u8 *buf, u16 length);
|
||
extern void WHSF_uplinkPacket_create(st_params * ptr, u8* outBuf);
|
||
extern void auto_sync_list_meters(void);
|
||
extern void RS485_gpio_init(void);
|
||
void RS4852_SendDataPacket(u8 *buf, u16 length);
|
||
void up_485_Tx(u8 *buf, u16 length);
|
||
void AnalogUartInit(struct st_uart_port * port);
|
||
void RS485DataRequenstReady( void );
|
||
bool ReadRS232ConcentratorDate(u8* year,u8* month);
|
||
#endif
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|