/** ****************************************************************************** * @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