#ifndef __EC_USART_H
#define __EC_USART_H
#include <stdio.h>
#include "stm32f411xe.h"
#include "ecGPIO.h"
#include "ecRCC.h"
#define POL 0
#define INT 1
// You can modify this
#define BAUD_9600 9600
#define BAUD_19200 19200
#define BAUD_38400 38400
#define BAUD_57600 57600
#define BAUD_115200 115200
#define BAUD_921600 921600
// ********************** USART 2 (USB) ***************************
// PA_2 = USART2_TX
// PA_3 = USART2_RX
// Alternate function(AF7), High Speed, Push pull, Pull up
// APB1
// **********************************************************
// ********************** USART 1 ***************************
// PA_9 = USART1_TX (default) // PB_6 (option)
// PA_10 = USART1_RX (default) // PB_3 (option)
// APB2
// **********************************************************
// ********************** USART 6 ***************************
// PA_11 = USART6_TX (default) // PC_6 (option)
// PA_12 = USART6_RX (default) // PC_7 (option)
// APB2
// **********************************************************
// Configuration UART 1, 2 using default pins
void UART1_init(void);
void UART2_init(void);
void UART1_baud(uint32_t baud);
void UART2_baud(uint32_t baud);
// Configuration USART write & read
void USART1_write(uint8_t* buffer, uint32_t nBytes);
void USART2_write(uint8_t* buffer, uint32_t nBytes);
uint8_t USART1_read(void);
uint8_t USART2_read(void);
// Inturrupt USART1,2
uint32_t is_USART1_RXNE(void);
uint32_t is_USART2_RXNE(void);
// private functions
void USART_write(USART_TypeDef* USARTx, uint8_t* buffer, uint32_t nBytes);
void USART_init(USART_TypeDef* USARTx, uint32_t baud);
void UART_baud(USART_TypeDef* USARTx, uint32_t baud);
uint32_t is_USART_RXNE(USART_TypeDef * USARTx);
uint8_t USART_read(USART_TypeDef * USARTx);
void USART_setting(USART_TypeDef* USARTx, GPIO_TypeDef* GPIO_TX, int pinTX, GPIO_TypeDef* GPIO_RX, int pinRX, uint32_t baud);
void USART_delay(uint32_t us);
#endif