#ifndef __DEBUG_USART_H
#define	__DEBUG_USART_H

#include "stm32f2xx.h"
#include <stdio.h>


//通讯网口引脚定义
/*******************************************************/
#define DEBUG_USART                             USART6
#define DEBUG_USART_CLK                         RCC_APB2Periph_USART6
#define DEBUG_USART_BAUDRATE                    115200  //串口波特率

#define DEBUG_USART_RX_GPIO_PORT                GPIOC
#define DEBUG_USART_RX_GPIO_CLK                 RCC_AHB1Periph_GPIOC
#define DEBUG_USART_RX_PIN                      GPIO_Pin_7
#define DEBUG_USART_RX_AF                       GPIO_AF_USART6
#define DEBUG_USART_RX_SOURCE                   GPIO_PinSource7

#define DEBUG_USART_TX_GPIO_PORT                GPIOC
#define DEBUG_USART_TX_GPIO_CLK                 RCC_AHB1Periph_GPIOC
#define DEBUG_USART_TX_PIN                      GPIO_Pin_6
#define DEBUG_USART_TX_AF                       GPIO_AF_USART6
#define DEBUG_USART_TX_SOURCE                   GPIO_PinSource6

#define DEBUG_USART_IRQHandler                  USART6_IRQHandler
#define DEBUG_USART_IRQ                 				USART6_IRQn

//通讯网口DMA
#define DEBUG_USART_DR_BASE               (USART6_BASE+0x04)		//DR寄存器
#define DEBUG_USART_DMA_CLK               RCC_AHB1Periph_DMA2	
#define DEBUG_USART_DMA_CHANNEL           DMA_Channel_5
#define DEBUG_USART_DMA_STREAM            DMA2_Stream1

#define BUFF_SIZE                     5000				//dma空间大小

/************************************************************/
//232引脚定义
#define USART_232                             USART1
#define USART_232_CLK                         RCC_APB2Periph_USART1
#define USART_232_BAUDRATE                    115200  //串口波特率

#define USART_232_RX_GPIO_PORT                GPIOA
#define USART_232_RX_GPIO_CLK                 RCC_AHB1Periph_GPIOA
#define USART_232_RX_PIN                      GPIO_Pin_10
#define USART_232_RX_AF                       GPIO_AF_USART1
#define USART_232_RX_SOURCE                   GPIO_PinSource10

#define USART_232_TX_GPIO_PORT                GPIOA
#define USART_232_TX_GPIO_CLK                 RCC_AHB1Periph_GPIOA
#define USART_232_TX_PIN                      GPIO_Pin_9
#define USART_232_TX_AF                       GPIO_AF_USART1
#define USART_232_TX_SOURCE                   GPIO_PinSource9

#define USART_232_IRQHandler                  USART1_IRQHandler
#define USART_232_IRQ                 				USART1_IRQn
//485引脚定义
#define USART_485                             USART3
#define USART_485_CLK                         RCC_APB1Periph_USART3 
#define USART_485_BAUDRATE                    9600 //串口波特率

#define USART_485_RX_GPIO_PORT                GPIOC
#define USART_485_RX_GPIO_CLK                 RCC_AHB1Periph_GPIOC
#define USART_485_RX_PIN                      GPIO_Pin_11
#define USART_485_RX_AF                       GPIO_AF_USART3
#define USART_485_RX_SOURCE                   GPIO_PinSource11

#define USART_485_TX_GPIO_PORT                GPIOC
#define USART_485_TX_GPIO_CLK                 RCC_AHB1Periph_GPIOC
#define USART_485_TX_PIN                      GPIO_Pin_10
#define USART_485_TX_AF                       GPIO_AF_USART3
#define USART_485_TX_SOURCE                   GPIO_PinSource10

#define USART_485_IRQHandler                  USART3_IRQHandler
#define USART_485_IRQ                 				USART3_IRQn
//485控制引脚
#define USART_485_DE_GPIO_PORT 								GPIOC
#define USART_485_DE_GPIO_CLK									RCC_AHB1Periph_GPIOC
#define USART_485_DE_PIN											GPIO_Pin_12

void Debug_USART_Config(void);
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);
void Usart_SendString( USART_TypeDef * pUSARTx, char *str);

void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch);
void USART_DMA_Config(void);
void DEBUG_USART_Config(void);
void USART_232_config(void);
void Usart_SendHex( USART_TypeDef * pUSARTx, uint8_t *str,uint16_t hexLength);
void USART_485_config(void);
void USART_485_DE_TX(void);
void USART_485_DE_RX(void);
void Config_485_Port(uint32_t baudrate, uint8_t databits, uint8_t stopbits, uint8_t parity, uint8_t flowcontrol);

extern uint8_t UART6_RX_BUF[BUFF_SIZE];
extern uint8_t UART6_RX_STAT;
extern uint32_t UART6_RX_NUM;
#endif /* __USART1_H */
