Restructure libs source to support multi platform
[fw/stlink] / example / libstm32l_discovery / src / stm32l1xx_usart.c
diff --git a/example/libstm32l_discovery/src/stm32l1xx_usart.c b/example/libstm32l_discovery/src/stm32l1xx_usart.c
deleted file mode 100644 (file)
index 3da7fe8..0000000
+++ /dev/null
@@ -1,1432 +0,0 @@
-/**\r
-  ******************************************************************************\r
-  * @file    stm32l1xx_usart.c\r
-  * @author  MCD Application Team\r
-  * @version V1.0.0\r
-  * @date    31-December-2010\r
-  * @brief   This file provides firmware functions to manage the following \r
-  *          functionalities of the Universal synchronous asynchronous receiver\r
-  *          transmitter (USART):           \r
-  *           - Initialization and Configuration\r
-  *           - Data transfers\r
-  *           - Multi-Processor Communication\r
-  *           - LIN mode\r
-  *           - Half-duplex mode\r
-  *           - Smartcard mode\r
-  *           - IrDA mode\r
-  *           - DMA transfers management\r
-  *           - Interrupts and flags management \r
-  *           \r
-  *  @verbatim\r
-  *      \r
-  *          ===================================================================\r
-  *                                 How to use this driver\r
-  *          ===================================================================\r
-  *          1. Enable peripheral clock using RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE)\r
-  *             function for USART1 or using RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE)\r
-  *             function for USART2 and USART3.\r
-  *\r
-  *          2.  According to the USART mode, enable the GPIO clocks using \r
-  *              RCC_AHBPeriphClockCmd() function. (The I/O can be TX, RX, CTS, \r
-  *              or and SCLK). \r
-  *\r
-  *          3. Peripheral\92s alternate function: \r
-  *                 - Connect the pin to the desired peripherals' Alternate \r
-  *                   Function (AF) using GPIO_PinAFConfig() function\r
-  *                 - Configure the desired pin in alternate function by:\r
-  *                   GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF\r
-  *                 - Select the type, pull-up/pull-down and output speed via \r
-  *                   GPIO_PuPd, GPIO_OType and GPIO_Speed members\r
-  *                 - Call GPIO_Init() function\r
-  *        \r
-  *          4. Program the Baud Rate, Word Length , Stop Bit, Parity, Hardware \r
-  *             flow control and Mode(Receiver/Transmitter) using the SPI_Init()\r
-  *             function.\r
-  *\r
-  *          5. For synchronous mode, enable the clock and program the polarity,\r
-  *             phase and last bit using the USART_ClockInit() function.\r
-  *\r
-  *          5. Enable the NVIC and the corresponding interrupt using the function \r
-  *             USART_ITConfig() if you need to use interrupt mode. \r
-  *\r
-  *          6. When using the DMA mode \r
-  *                   - Configure the DMA using DMA_Init() function\r
-  *                   - Active the needed channel Request using USART_DMACmd() function\r
-  * \r
-  *          7. Enable the USART using the USART_Cmd() function.\r
-  * \r
-  *          8. Enable the DMA using the DMA_Cmd() function, when using DMA mode. \r
-  *\r
-  *          Refer to Multi-Processor, LIN, half-duplex, Smartcard, IrDA sub-sections\r
-  *          for more details\r
-  *          \r
-  *  @endverbatim\r
-  *        \r
-  ******************************************************************************\r
-  * @attention\r
-  *\r
-  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
-  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
-  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
-  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
-  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
-  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
-  *\r
-  * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
-  ******************************************************************************  \r
-  */ \r
-\r
-/* Includes ------------------------------------------------------------------*/\r
-#include "stm32l1xx_usart.h"\r
-#include "stm32l1xx_rcc.h"\r
-\r
-/** @addtogroup STM32L1xx_StdPeriph_Driver\r
-  * @{\r
-  */\r
-\r
-/** @defgroup USART \r
-  * @brief USART driver modules\r
-  * @{\r
-  */\r
-\r
-/* Private typedef -----------------------------------------------------------*/\r
-/* Private define ------------------------------------------------------------*/\r
-\r
-/*!< USART CR1 register clear Mask ((~(uint16_t)0xE9F3)) */\r
-#define CR1_CLEAR_MASK            ((uint16_t)(USART_CR1_M | USART_CR1_PCE | \\r
-                                              USART_CR1_PS | USART_CR1_TE | \\r
-                                              USART_CR1_RE))\r
-\r
-/*!< USART CR2 register clock bits clear Mask ((~(uint16_t)0xF0FF)) */\r
-#define CR2_CLOCK_CLEAR_MASK      ((uint16_t)(USART_CR2_CLKEN | USART_CR2_CPOL | \\r
-                                              USART_CR2_CPHA | USART_CR2_LBCL))\r
-\r
-/*!< USART CR3 register clear Mask ((~(uint16_t)0xFCFF)) */\r
-#define CR3_CLEAR_MASK            ((uint16_t)(USART_CR3_RTSE | USART_CR3_CTSE))\r
-\r
-/*!< USART Interrupts mask */\r
-#define IT_MASK                   ((uint16_t)0x001F)\r
-\r
-/* Private macro -------------------------------------------------------------*/\r
-/* Private variables ---------------------------------------------------------*/\r
-/* Private function prototypes -----------------------------------------------*/\r
-/* Private functions ---------------------------------------------------------*/\r
-\r
-/** @defgroup USART_Private_Functions\r
-  * @{\r
-  */\r
-\r
-/** @defgroup USART_Group1 Initialization and Configuration functions\r
- *  @brief   Initialization and Configuration functions \r
- *\r
-@verbatim   \r
- ===============================================================================\r
-                  Initialization and Configuration functions\r
- ===============================================================================  \r
-\r
-  This subsection provides a set of functions allowing to initialize the USART \r
-  in asynchronous and in synchronous modes.\r
-   - For the asynchronous mode only these parameters can be configured: \r
-        - Baud Rate\r
-        - Word Length \r
-        - Stop Bit\r
-        - Parity: If the parity is enabled, then the MSB bit of the data written\r
-          in the data register is transmitted but is changed by the parity bit.\r
-          Depending on the frame length defined by the M bit (8-bits or 9-bits),\r
-          the possible USART frame formats are as listed in the following table:\r
-   +-------------------------------------------------------------+     \r
-   |   M bit |  PCE bit  |            USART frame                |\r
-   |---------------------|---------------------------------------|             \r
-   |    0    |    0      |    | SB | 8 bit data | STB |          |\r
-   |---------|-----------|---------------------------------------|  \r
-   |    0    |    1      |    | SB | 7 bit data | PB | STB |     |\r
-   |---------|-----------|---------------------------------------|  \r
-   |    1    |    0      |    | SB | 9 bit data | STB |          |\r
-   |---------|-----------|---------------------------------------|  \r
-   |    1    |    1      |    | SB | 8 bit data | PB | STB |     |\r
-   +-------------------------------------------------------------+            \r
-        - Hardware flow control\r
-        - Receiver/transmitter modes\r
-\r
-  The USART_Init() function follows the USART  asynchronous configuration procedure\r
-  (details for the procedure are available in reference manual (RM0038)).\r
-\r
-  - For the synchronous mode in addition to the asynchronous mode parameters these \r
-    parameters should be also configured:\r
-        - USART Clock Enabled\r
-        - USART polarity\r
-        - USART phase\r
-        - USART LastBit\r
-  \r
-  These parameters can be configured using the USART_ClockInit() function.\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-  \r
-/**\r
-  * @brief  Deinitializes the USARTx peripheral registers to their default reset values.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values: USART1, USART2 or USART3.\r
-  * @retval None\r
-  */\r
-void USART_DeInit(USART_TypeDef* USARTx)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-\r
-  if (USARTx == USART1)\r
-  {\r
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);\r
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);\r
-  }\r
-  else if (USARTx == USART2)\r
-  {\r
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);\r
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);\r
-  }\r
-  else \r
-  {\r
-    if (USARTx == USART3)\r
-    {\r
-      RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);\r
-      RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);    \r
-    }\r
-  }    \r
-}\r
-\r
-/**\r
-  * @brief  Initializes the USARTx peripheral according to the specified\r
-  *   parameters in the USART_InitStruct .\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure\r
-  *   that contains the configuration information for the specified USART peripheral.\r
-  * @retval None\r
-  */\r
-void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)\r
-{\r
-  uint32_t tmpreg = 0x00, apbclock = 0x00;\r
-  uint32_t integerdivider = 0x00;\r
-  uint32_t fractionaldivider = 0x00;\r
-  RCC_ClocksTypeDef RCC_ClocksStatus;\r
-\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_BAUDRATE(USART_InitStruct->USART_BaudRate));  \r
-  assert_param(IS_USART_WORD_LENGTH(USART_InitStruct->USART_WordLength));\r
-  assert_param(IS_USART_STOPBITS(USART_InitStruct->USART_StopBits));\r
-  assert_param(IS_USART_PARITY(USART_InitStruct->USART_Parity));\r
-  assert_param(IS_USART_MODE(USART_InitStruct->USART_Mode));\r
-  assert_param(IS_USART_HARDWARE_FLOW_CONTROL(USART_InitStruct->USART_HardwareFlowControl));\r
-  \r
-/*---------------------------- USART CR2 Configuration -----------------------*/\r
-  tmpreg = USARTx->CR2;\r
-  /* Clear STOP[13:12] bits */\r
-  tmpreg &= (uint32_t)~((uint32_t)USART_CR2_STOP);\r
-\r
-  /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit ------------*/\r
-  /* Set STOP[13:12] bits according to USART_StopBits value */\r
-  tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;\r
-  \r
-  /* Write to USART CR2 */\r
-  USARTx->CR2 = (uint16_t)tmpreg;\r
-\r
-/*---------------------------- USART CR1 Configuration -----------------------*/\r
-  tmpreg = USARTx->CR1;\r
-  /* Clear M, PCE, PS, TE and RE bits */\r
-  tmpreg &= (uint32_t)~((uint32_t)CR1_CLEAR_MASK);\r
-\r
-  /* Configure the USART Word Length, Parity and mode ----------------------- */\r
-  /* Set the M bits according to USART_WordLength value */\r
-  /* Set PCE and PS bits according to USART_Parity value */\r
-  /* Set TE and RE bits according to USART_Mode value */\r
-  tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |\r
-            USART_InitStruct->USART_Mode;\r
-\r
-  /* Write to USART CR1 */\r
-  USARTx->CR1 = (uint16_t)tmpreg;\r
-\r
-/*---------------------------- USART CR3 Configuration -----------------------*/  \r
-  tmpreg = USARTx->CR3;\r
-  /* Clear CTSE and RTSE bits */\r
-  tmpreg &= (uint32_t)~((uint32_t)CR3_CLEAR_MASK);\r
-\r
-  /* Configure the USART HFC -------------------------------------------------*/\r
-  /* Set CTSE and RTSE bits according to USART_HardwareFlowControl value */\r
-  tmpreg |= USART_InitStruct->USART_HardwareFlowControl;\r
-\r
-  /* Write to USART CR3 */\r
-  USARTx->CR3 = (uint16_t)tmpreg;\r
-\r
-/*---------------------------- USART BRR Configuration -----------------------*/\r
-  /* Configure the USART Baud Rate -------------------------------------------*/\r
-  RCC_GetClocksFreq(&RCC_ClocksStatus);\r
-  if (USARTx == USART1) \r
-  {\r
-    apbclock = RCC_ClocksStatus.PCLK2_Frequency;\r
-  }\r
-  else\r
-  {\r
-    apbclock = RCC_ClocksStatus.PCLK1_Frequency;\r
-  }\r
-\r
-  /* Determine the integer part */\r
-  if ((USARTx->CR1 & USART_CR1_OVER8) != 0)\r
-  {\r
-    /* Integer part computing in case Oversampling mode is 8 Samples */\r
-    integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));    \r
-  }\r
-  else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */\r
-  {\r
-    /* Integer part computing in case Oversampling mode is 16 Samples */\r
-    integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));    \r
-  }\r
-  tmpreg = (integerdivider / 100) << 4;\r
-\r
-  /* Determine the fractional part */\r
-  fractionaldivider = integerdivider - (100 * (tmpreg >> 4));\r
-\r
-  /* Implement the fractional part in the register */\r
-  if ((USARTx->CR1 & USART_CR1_OVER8) != 0)\r
-  {\r
-    tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);\r
-  }\r
-  else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */\r
-  {\r
-    tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);\r
-  }\r
\r
-  /* Write to USART BRR */\r
-  USARTx->BRR = (uint16_t)tmpreg;\r
-}\r
-\r
-/**\r
-  * @brief  Fills each USART_InitStruct member with its default value.\r
-  * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure\r
-  *   which will be initialized.\r
-  * @retval None\r
-  */\r
-void USART_StructInit(USART_InitTypeDef* USART_InitStruct)\r
-{\r
-  /* USART_InitStruct members default value */\r
-  USART_InitStruct->USART_BaudRate = 9600;\r
-  USART_InitStruct->USART_WordLength = USART_WordLength_8b;\r
-  USART_InitStruct->USART_StopBits = USART_StopBits_1;\r
-  USART_InitStruct->USART_Parity = USART_Parity_No ;\r
-  USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx;\r
-  USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None;  \r
-}\r
-\r
-/**\r
-  * @brief  Initializes the USARTx peripheral Clock according to the \r
-  *   specified parameters in the USART_ClockInitStruct .\r
-  * @param  USARTx: where x can be 1, 2, 3 to select the USART peripheral.\r
-  * @param  USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef\r
-  *   structure that contains the configuration information for the specified \r
-  *   USART peripheral.  \r
-  * @retval None\r
-  */\r
-void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct)\r
-{\r
-  uint32_t tmpreg = 0x00;\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_CLOCK(USART_ClockInitStruct->USART_Clock));\r
-  assert_param(IS_USART_CPOL(USART_ClockInitStruct->USART_CPOL));\r
-  assert_param(IS_USART_CPHA(USART_ClockInitStruct->USART_CPHA));\r
-  assert_param(IS_USART_LASTBIT(USART_ClockInitStruct->USART_LastBit));\r
-  \r
-/*---------------------------- USART CR2 Configuration -----------------------*/\r
-  tmpreg = USARTx->CR2;\r
-  /* Clear CLKEN, CPOL, CPHA and LBCL bits */\r
-  tmpreg &= (uint32_t)~((uint32_t)CR2_CLOCK_CLEAR_MASK);\r
-  /* Configure the USART Clock, CPOL, CPHA and LastBit ------------*/\r
-  /* Set CLKEN bit according to USART_Clock value */\r
-  /* Set CPOL bit according to USART_CPOL value */\r
-  /* Set CPHA bit according to USART_CPHA value */\r
-  /* Set LBCL bit according to USART_LastBit value */\r
-  tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | \r
-                 USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit;\r
-  /* Write to USART CR2 */\r
-  USARTx->CR2 = (uint16_t)tmpreg;\r
-}\r
-\r
-/**\r
-  * @brief  Fills each USART_ClockInitStruct member with its default value.\r
-  * @param  USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef\r
-  *   structure which will be initialized.\r
-  * @retval None\r
-  */\r
-void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct)\r
-{\r
-  /* USART_ClockInitStruct members default value */\r
-  USART_ClockInitStruct->USART_Clock = USART_Clock_Disable;\r
-  USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low;\r
-  USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge;\r
-  USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable;\r
-}\r
-\r
-/**\r
-  * @brief  Enables or disables the specified USART peripheral.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  NewState: new state of the USARTx peripheral.\r
-  *   This parameter can be: ENABLE or DISABLE.\r
-  * @retval None\r
-  */\r
-void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
-  \r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the selected USART by setting the UE bit in the CR1 register */\r
-    USARTx->CR1 |= USART_CR1_UE;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the selected USART by clearing the UE bit in the CR1 register */\r
-    USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_UE);\r
-  }\r
-}\r
-\r
-/**\r
-  * @brief  Sets the system clock prescaler.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_Prescaler: specifies the prescaler clock.  \r
-  * @retval None\r
-  */\r
-void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler)\r
-{ \r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  \r
-  /* Clear the USART prescaler */\r
-  USARTx->GTPR &= USART_GTPR_GT;\r
-  /* Set the USART prescaler */\r
-  USARTx->GTPR |= USART_Prescaler;\r
-}\r
-\r
-/**\r
-  * @brief  Enables or disables the USART's 8x oversampling mode.\r
-  * @param USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *     USART1, USART2, USART3.\r
-  * @param NewState: new state of the USART 8x oversampling mode.\r
-  *   This parameter can be: ENABLE or DISABLE.\r
-  *\r
-  * @note\r
-  *   This function has to be called before calling USART_Init()\r
-  *   function in order to have correct baudrate Divider value.\r
-  * @retval : None\r
-  */\r
-void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
-  \r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the 8x Oversampling mode by setting the OVER8 bit in the CR1 register */\r
-    USARTx->CR1 |= USART_CR1_OVER8;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the 8x Oversampling mode by clearing the OVER8 bit in the CR1 register */\r
-    USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_OVER8);\r
-  }\r
-}  \r
-\r
-/**\r
-  * @brief  Enables or disables the USART's one bit sampling method.\r
-  * @param USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2, USART3.\r
-  * @param NewState: new state of the USART one bit sampling method.\r
-  *   This parameter can be: ENABLE or DISABLE.\r
-  * @retval : None\r
-  */\r
-void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
-  \r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the one bit method by setting the ONEBITE bit in the CR3 register */\r
-    USARTx->CR3 |= USART_CR3_ONEBIT;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the one bit method by clearing the ONEBITE bit in the CR3 register */\r
-    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT);\r
-  }\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup USART_Group2 Data transfers functions\r
- *  @brief   Data transfers functions \r
- *\r
-@verbatim   \r
- ===============================================================================\r
-                            Data transfers functions\r
- ===============================================================================  \r
-\r
-  This subsection provides a set of functions allowing to manage the USART data \r
-  transfers.\r
-  \r
-  During an USART reception, data shifts in least significant bit first through \r
-  the RX pin. In this mode, the USART_DR register consists of a buffer (RDR) \r
-  between the internal bus and the received shift register.\r
-\r
-  When a transmission is taking place, a write instruction to the USART_DR register \r
-  stores the data in the TDR register and which is copied in the shift register \r
-  at the end of the current transmission.\r
-\r
-  The read access of the USART_DR register can be done using the USART_ReceiveData()\r
-  function and returns the RDR buffered value. Whereas a write access to the USART_DR \r
-  can be done using USART_SendData() function and stores the written data into \r
-  TDR buffer.\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Transmits single data through the USARTx peripheral.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  Data: the data to transmit.\r
-  * @retval None\r
-  */\r
-void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_DATA(Data)); \r
-    \r
-  /* Transmit Data */\r
-  USARTx->DR = (Data & (uint16_t)0x01FF);\r
-}\r
-\r
-/**\r
-  * @brief  Returns the most recent received data by the USARTx peripheral.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @retval The received data.\r
-  */\r
-uint16_t USART_ReceiveData(USART_TypeDef* USARTx)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  \r
-  /* Receive Data */\r
-  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup USART_Group3 MultiProcessor Communication functions\r
- *  @brief   Multi-Processor Communication functions \r
- *\r
-@verbatim   \r
- ===============================================================================\r
-                    Multi-Processor Communication functions\r
- ===============================================================================  \r
-\r
-  This subsection provides a set of functions allowing to manage the USART \r
-  multiprocessor communication.\r
-  \r
-  For instance one of the USARTs can be the master, its TX output is connected to \r
-  the RX input of the other USART. The others are slaves, their respective TX outputs \r
-  are logically ANDed together and connected to the RX input of the master.\r
-\r
-  USART multiprocessor communication is possible through the following procedure:\r
-     1. Program the Baud rate, Word length = 9 bits, Stop bits, Parity, Mode transmitter \r
-        or Mode receiver and hardware flow control values using the USART_Init()\r
-        function.\r
-     2. Configures the USART address using the USART_SetAddress() function.\r
-     3. Configures the wake up methode (USART_WakeUp_IdleLine or USART_WakeUp_AddressMark)\r
-        using USART_WakeUpConfig() function only for the slaves.\r
-     4. Enable the USART using the USART_Cmd() function.\r
-     5. Enter the USART slaves in mute mode using USART_ReceiverWakeUpCmd() function.\r
-\r
-  The USART Slave exit from mute mode when receive the wake up condition.\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Sets the address of the USART node.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_Address: Indicates the address of the USART node.\r
-  * @retval None\r
-  */\r
-void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_ADDRESS(USART_Address)); \r
-    \r
-  /* Clear the USART address */\r
-  USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_ADD);\r
-  /* Set the USART address node */\r
-  USARTx->CR2 |= USART_Address;\r
-}\r
-\r
-/**\r
-  * @brief  Determines if the USART is in mute mode or not.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  NewState: new state of the USART mute mode.\r
-  *   This parameter can be: ENABLE or DISABLE.\r
-  * @retval None\r
-  */\r
-void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_FUNCTIONAL_STATE(NewState)); \r
-  \r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the USART mute mode  by setting the RWU bit in the CR1 register */\r
-    USARTx->CR1 |= USART_CR1_RWU;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */\r
-    USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_RWU);\r
-  }\r
-}\r
-/**\r
-  * @brief  Selects the USART WakeUp method.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_WakeUp: specifies the USART wakeup method.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg USART_WakeUp_IdleLine: WakeUp by an idle line detection\r
-  *     @arg USART_WakeUp_AddressMark: WakeUp by an address mark\r
-  * @retval None\r
-  */\r
-void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_WAKEUP(USART_WakeUp));\r
-  \r
-  USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_WAKE);\r
-  USARTx->CR1 |= USART_WakeUp;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup USART_Group4 LIN mode functions\r
- *  @brief   LIN mode functions \r
- *\r
-@verbatim   \r
- ===============================================================================\r
-                                LIN mode functions\r
- ===============================================================================  \r
-\r
-  This subsection provides a set of functions allowing to manage the USART LIN \r
-  Mode communication.\r
-  \r
-  In LIN mode, 8-bit data format with 1 stop bit is required in accordance with \r
-  the LIN standard.\r
-\r
-  Only this LIN Feature is supported by the USART IP:\r
-    - LIN Master Synchronous Break send capability and LIN slave break detection\r
-      capability :  13-bit break generation and 10/11 bit break detection\r
-\r
-\r
-  USART LIN Master transmitter communication is possible through the following procedure:\r
-     1. Program the Baud rate, Word length = 8bits, Stop bits = 1bit, Parity, \r
-        Mode transmitter or Mode receiver and hardware flow control values using \r
-        the USART_Init() function.\r
-     2. Enable the USART using the USART_Cmd() function.\r
-     3. Enable the LIN mode using the USART_LINCmd() function.\r
-     4. Send the break character using USART_SendBreak() function.\r
-\r
-  USART LIN Master receiver communication is possible through the following procedure:\r
-     1. Program the Baud rate, Word length = 8bits, Stop bits = 1bit, Parity, \r
-        Mode transmitter or Mode receiver and hardware flow control values using \r
-        the USART_Init() function.\r
-     2. Enable the USART using the USART_Cmd() function.\r
-     3. Configures the break detection length using the USART_LINBreakDetectLengthConfig()\r
-        function.\r
-     4. Enable the LIN mode using the USART_LINCmd() function.\r
-\r
-Note:\r
-----\r
-  1. In LIN mode, the following bits must be kept cleared:\r
-     - CLKEN in the USART_CR2 register,\r
-     - STOP[1:0], SCEN, HDSEL and IREN in the USART_CR3 register.\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Sets the USART LIN Break detection length.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_LINBreakDetectLength: specifies the LIN break detection length.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg USART_LINBreakDetectLength_10b: 10-bit break detection\r
-  *     @arg USART_LINBreakDetectLength_11b: 11-bit break detection\r
-  * @retval None\r
-  */\r
-void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength));\r
-  \r
-  USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_LBDL);\r
-  USARTx->CR2 |= USART_LINBreakDetectLength;  \r
-}\r
-\r
-/**\r
-  * @brief  Enables or disables the USART\92s LIN mode.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  NewState: new state of the USART LIN mode.\r
-  *   This parameter can be: ENABLE or DISABLE.\r
-  * @retval None\r
-  */\r
-void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
-  \r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the LIN mode by setting the LINEN bit in the CR2 register */\r
-    USARTx->CR2 |= USART_CR2_LINEN;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the LIN mode by clearing the LINEN bit in the CR2 register */\r
-    USARTx->CR2 &= (uint16_t)~((uint16_t)USART_CR2_LINEN);\r
-  }\r
-}\r
-\r
-/**\r
-  * @brief  Transmits break characters.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @retval None\r
-  */\r
-void USART_SendBreak(USART_TypeDef* USARTx)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  \r
-  /* Send break characters */\r
-  USARTx->CR1 |= USART_CR1_SBK;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup USART_Group5 Halfduplex mode function\r
- *  @brief   Half-duplex mode function \r
- *\r
-@verbatim   \r
- ===============================================================================\r
-                         Half-duplex mode function\r
- ===============================================================================  \r
-\r
-  This subsection provides a set of functions allowing to manage the USART \r
-  Half-duplex communication.\r
-  \r
-  The USART can be configured to follow a single-wire half-duplex protocol where \r
-  the TX and RX lines are internally connected.\r
-\r
-  USART Half duplex communication is possible through the following procedure:\r
-     1. Program the Baud rate, Word length, Stop bits, Parity, Mode transmitter \r
-        or Mode receiver and hardware flow control values using the USART_Init()\r
-        function.\r
-     2. Configures the USART address using the USART_SetAddress() function.\r
-     3. Enable the USART using the USART_Cmd() function.\r
-     4. Enable the half duplex mode using USART_HalfDuplexCmd() function.\r
-\r
-Note:\r
-----\r
-  1. The RX pin is no longer used\r
-  2. In Half-duplex mode the following bits must be kept cleared:\r
-       - LINEN and CLKEN bits in the USART_CR2 register.\r
-       - SCEN and IREN bits in the USART_CR3 register.\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Enables or disables the USART\92s Half Duplex communication.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  NewState: new state of the USART Communication.\r
-  *   This parameter can be: ENABLE or DISABLE.\r
-  * @retval None\r
-  */\r
-void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
-  \r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */\r
-    USARTx->CR3 |= USART_CR3_HDSEL;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */\r
-    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_HDSEL);\r
-  }\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-\r
-/** @defgroup USART_Group6 Smartcard mode functions\r
- *  @brief   Smartcard mode functions \r
- *\r
-@verbatim   \r
- ===============================================================================\r
-                               Smartcard mode functions\r
- ===============================================================================  \r
-\r
-  This subsection provides a set of functions allowing to manage the USART \r
-  Smartcard communication.\r
-  \r
-  The Smartcard interface is designed to support asynchronous protocol Smartcards as\r
-  defined in the ISO 7816-3 standard.\r
-\r
-  The USART can provide a clock to the smartcard through the SCLK output.\r
-  In smartcard mode, SCLK is not associated to the communication but is simply derived \r
-  from the internal peripheral input clock through a 5-bit prescaler.\r
-\r
-  Smartcard communication is possible through the following procedure:\r
-     1. Configures the Smartcard Prsecaler using the USART_SetPrescaler() function.\r
-     2. Configures the Smartcard Guard Time using the USART_SetGuardTime() function.\r
-     3. Program the USART clock using the USART_ClockInit() function as following:\r
-        - USART Clock enabled\r
-        - USART CPOL Low\r
-        - USART CPHA on first edge\r
-        - USART Last Bit Clock Enabled\r
-     4. Program the Smartcard interface using the USART_Init() function as following:\r
-        - Word Length = 9 Bits\r
-        - 1.5 Stop Bit\r
-        - Even parity\r
-        - BaudRate = 12096 baud\r
-        - Hardware flow control disabled (RTS and CTS signals)\r
-        - Tx and Rx enabled\r
-     5. Optionally you can enable the parity error interrupt using the USART_ITConfig()\r
-        function\r
-     6. Enable the USART using the USART_Cmd() function.\r
-     7. Enable the Smartcard NACK using the USART_SmartCardNACKCmd() function.\r
-     8. Enable the Smartcard interface using the USART_SmartCardCmd() function.\r
-\r
-  Please refer to the ISO 7816-3 specification for more details.\r
-\r
-Note: \r
------\r
-  1.  It is also possible to choose 0.5 stop bit for receiving but it is recommended \r
-      to use 1.5 stop bits for both transmitting and receiving to avoid switching \r
-      between the two configurations.\r
-  2. In smartcard mode, the following bits must be kept cleared:\r
-     - LINEN bit in the USART_CR2 register.\r
-     - HDSEL and IREN bits in the USART_CR3 register.\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Sets the specified USART guard time.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_GuardTime: specifies the guard time.   \r
-  * @retval None\r
-  */\r
-void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime)\r
-{    \r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  \r
-  /* Clear the USART Guard time */\r
-  USARTx->GTPR &= USART_GTPR_PSC;\r
-  /* Set the USART guard time */\r
-  USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08);\r
-}\r
-\r
-/**\r
-  * @brief  Enables or disables the USART\92s Smart Card mode.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  NewState: new state of the Smart Card mode.\r
-  *   This parameter can be: ENABLE or DISABLE.      \r
-  * @retval None\r
-  */\r
-void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the SC mode by setting the SCEN bit in the CR3 register */\r
-    USARTx->CR3 |= USART_CR3_SCEN;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the SC mode by clearing the SCEN bit in the CR3 register */\r
-    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_SCEN);\r
-  }\r
-}\r
-\r
-/**\r
-  * @brief  Enables or disables NACK transmission.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  NewState: new state of the NACK transmission.\r
-  *   This parameter can be: ENABLE or DISABLE.  \r
-  * @retval None\r
-  */\r
-void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx)); \r
-  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the NACK transmission by setting the NACK bit in the CR3 register */\r
-    USARTx->CR3 |= USART_CR3_NACK;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the NACK transmission by clearing the NACK bit in the CR3 register */\r
-    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_NACK);\r
-  }\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup USART_Group7 IrDA mode functions\r
- *  @brief   IrDA mode functions \r
- *\r
-@verbatim   \r
- ===============================================================================\r
-                                IrDA mode functions\r
- ===============================================================================  \r
-\r
-  This subsection provides a set of functions allowing to manage the USART \r
-  IrDA communication.\r
-  \r
-  IrDA is a half duplex communication protocol. If the Transmitter is busy, any data\r
-  on the IrDA receive line will be ignored by the IrDA decoder and if the Receiver \r
-  is busy, data on the TX from the USART to IrDA will not be encoded by IrDA.\r
-  While receiving data, transmission should be avoided as the data to be transmitted\r
-  could be corrupted.\r
-\r
-  IrDA communication is possible through the following procedure:\r
-     1. Program the Baud rate, Word length = 8 bits, Stop bits, Parity, Transmitter/Receiver \r
-        modes and hardware flow control values using the USART_Init() function.\r
-     2. Enable the USART using the USART_Cmd() function.\r
-     3. Configures the IrDA pulse width by configuring the prescaler using  \r
-        the USART_SetPrescaler() function.\r
-     4. Configures the IrDA  USART_IrDAMode_LowPower or USART_IrDAMode_Normal mode\r
-        using the USART_IrDAConfig() function.\r
-     5. Enable the IrDA using the USART_IrDACmd() function.\r
-\r
-Note: \r
------\r
-  1. A pulse of width less than two and greater than one PSC period(s) may or may\r
-     not be rejected.\r
-  2. The receiver set up time should be managed by software. The IrDA physical layer\r
-     specification specifies a minimum of 10 ms delay between transmission and \r
-     reception (IrDA is a half duplex protocol).\r
-  3. In IrDA mode, the following bits must be kept cleared:\r
-    - LINEN, STOP and CLKEN bits in the USART_CR2 register.\r
-    - SCEN and HDSEL bits in the USART_CR3 register.\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Configures the USART\92s IrDA interface.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_IrDAMode: specifies the IrDA mode.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg USART_IrDAMode_LowPower\r
-  *     @arg USART_IrDAMode_Normal\r
-  * @retval None\r
-  */\r
-void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_IRDA_MODE(USART_IrDAMode));\r
-    \r
-  USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_IRLP);\r
-  USARTx->CR3 |= USART_IrDAMode;\r
-}\r
-\r
-/**\r
-  * @brief  Enables or disables the USART\92s IrDA interface.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  NewState: new state of the IrDA mode.\r
-  *   This parameter can be: ENABLE or DISABLE.\r
-  * @retval None\r
-  */\r
-void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
-    \r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the IrDA mode by setting the IREN bit in the CR3 register */\r
-    USARTx->CR3 |= USART_CR3_IREN;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the IrDA mode by clearing the IREN bit in the CR3 register */\r
-    USARTx->CR3 &= (uint16_t)~((uint16_t)USART_CR3_IREN);\r
-  }\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup USART_Group8 DMA transfers management functions\r
- *  @brief   DMA transfers management functions\r
- *\r
-@verbatim   \r
- ===============================================================================\r
-                      DMA transfers management functions\r
- ===============================================================================  \r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-  \r
-/**\r
-  * @brief  Enables or disables the USART\92s DMA interface.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_DMAReq: specifies the DMA request.\r
-  *   This parameter can be any combination of the following values:\r
-  *     @arg USART_DMAReq_Tx: USART DMA transmit request\r
-  *     @arg USART_DMAReq_Rx: USART DMA receive request\r
-  * @param  NewState: new state of the DMA Request sources.\r
-  *   This parameter can be: ENABLE or DISABLE.  \r
-  * @retval None\r
-  */\r
-void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_DMAREQ(USART_DMAReq));  \r
-  assert_param(IS_FUNCTIONAL_STATE(NewState)); \r
-\r
-  if (NewState != DISABLE)\r
-  {\r
-    /* Enable the DMA transfer for selected requests by setting the DMAT and/or\r
-       DMAR bits in the USART CR3 register */\r
-    USARTx->CR3 |= USART_DMAReq;\r
-  }\r
-  else\r
-  {\r
-    /* Disable the DMA transfer for selected requests by clearing the DMAT and/or\r
-       DMAR bits in the USART CR3 register */\r
-    USARTx->CR3 &= (uint16_t)~USART_DMAReq;\r
-  }\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-  \r
-/** @defgroup USART_Group9 Interrupts and flags management functions\r
- *  @brief   Interrupts and flags management functions \r
- *\r
-@verbatim   \r
- ===============================================================================\r
-                   Interrupts and flags management functions\r
- ===============================================================================  \r
-\r
-  This subsection provides a set of functions allowing to configure the USART \r
-  Interrupts sources, DMA channels requests and check or clear the flags or \r
-  pending bits status.\r
-  The user should identify which mode will be used in his application to manage \r
-  the communication: Polling mode, Interrupt mode or DMA mode. \r
-    \r
-  Polling Mode\r
-  =============\r
-  In Polling Mode, the SPI communication can be managed by 10 flags:\r
-     1. USART_FLAG_TXE : to indicate the status of the transmit buffer register\r
-     2. USART_FLAG_RXNE : to indicate the status of the receive buffer register\r
-     3. USART_FLAG_TC : to indicate the status of the transmit operation\r
-     4. USART_FLAG_IDLE : to indicate the status of the Idle Line             \r
-     5. USART_FLAG_CTS : to indicate the status of the nCTS input\r
-     6. USART_FLAG_LBD : to indicate the status of the LIN break detection\r
-     7. USART_FLAG_NE : to indicate if a noise error occur\r
-     8. USART_FLAG_FE : to indicate if a frame error occur\r
-     9. USART_FLAG_PE : to indicate if a parity error occur\r
-     10. USART_FLAG_ORE : to indicate if an Overrun error occur\r
-\r
-  In this Mode it is advised to use the following functions:\r
-      - FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);\r
-      - void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);\r
-\r
-  Interrupt Mode\r
-  ===============\r
-  In Interrupt Mode, the USART communication can be managed by 8 interrupt sources\r
-  and 10 pending bits: \r
-\r
-  Pending Bits:\r
-  ------------- \r
-     1. USART_IT_TXE : to indicate the status of the transmit buffer register\r
-     2. USART_IT_RXNE : to indicate the status of the receive buffer register\r
-     3. USART_IT_TC : to indicate the status of the transmit operation\r
-     4. USART_IT_IDLE : to indicate the status of the Idle Line             \r
-     5. USART_IT_CTS : to indicate the status of the nCTS input\r
-     6. USART_IT_LBD : to indicate the status of the LIN break detection\r
-     7. USART_IT_NE : to indicate if a noise error occur\r
-     8. USART_IT_FE : to indicate if a frame error occur\r
-     9. USART_IT_PE : to indicate if a parity error occur\r
-     10. USART_IT_ORE : to indicate if an Overrun error occur\r
-\r
-  Interrupt Source:\r
-  -----------------\r
-     1. USART_IT_TXE : specifies the interrupt source for the Tx buffer empty \r
-                       interrupt. \r
-     2. USART_IT_RXNE : specifies the interrupt source for the Rx buffer not \r
-                        empty interrupt.\r
-     3. USART_IT_TC : specifies the interrupt source for the Transmit complete \r
-                       interrupt. \r
-     4. USART_IT_IDLE : specifies the interrupt source for the Idle Line interrupt.             \r
-     5. USART_IT_CTS : specifies the interrupt source for the CTS interrupt. \r
-     6. USART_IT_LBD : specifies the interrupt source for the LIN break detection\r
-                       interrupt. \r
-     7. USART_IT_PE : specifies the interrupt source for theparity error interrupt. \r
-     8. USART_IT_ERR :  specifies the interrupt source for the errors interrupt.\r
-\r
-    Note: Some parameters are coded in order to use them as interrupt source or \r
-    ----  as pending bits.\r
-\r
-  In this Mode it is advised to use the following functions:\r
-     - void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);\r
-     - ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);\r
-     - void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);\r
-\r
-  DMA Mode\r
-  ========\r
-  In DMA Mode, the USART communication can be managed by 2 DMA Channel requests:\r
-     1. USART_DMAReq_Tx: specifies the Tx buffer DMA transfer request\r
-     2. USART_DMAReq_Rx: specifies the Rx buffer DMA transfer request\r
-\r
-  In this Mode it is advised to use the following function:\r
-     - void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Enables or disables the specified USART interrupts.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_IT: specifies the USART interrupt sources to be enabled or disabled.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg USART_IT_CTS:  CTS change interrupt\r
-  *     @arg USART_IT_LBD:  LIN Break detection interrupt\r
-  *     @arg USART_IT_TXE:  Tansmit Data Register empty interrupt\r
-  *     @arg USART_IT_TC:   Transmission complete interrupt\r
-  *     @arg USART_IT_RXNE: Receive Data register not empty interrupt\r
-  *     @arg USART_IT_IDLE: Idle line detection interrupt\r
-  *     @arg USART_IT_PE:   Parity Error interrupt\r
-  *     @arg USART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)\r
-  * @param  NewState: new state of the specified USARTx interrupts.\r
-  *   This parameter can be: ENABLE or DISABLE.\r
-  * @retval None\r
-  */\r
-void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)\r
-{\r
-  uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00;\r
-  uint32_t usartxbase = 0x00;\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_CONFIG_IT(USART_IT));\r
-  assert_param(IS_FUNCTIONAL_STATE(NewState));\r
-  \r
-  usartxbase = (uint32_t)USARTx;\r
-\r
-  /* Get the USART register index */\r
-  usartreg = (((uint8_t)USART_IT) >> 0x05);\r
-\r
-  /* Get the interrupt position */\r
-  itpos = USART_IT & IT_MASK;\r
-  itmask = (((uint32_t)0x01) << itpos);\r
-    \r
-  if (usartreg == 0x01) /* The IT is in CR1 register */\r
-  {\r
-    usartxbase += 0x0C;\r
-  }\r
-  else if (usartreg == 0x02) /* The IT is in CR2 register */\r
-  {\r
-    usartxbase += 0x10;\r
-  }\r
-  else /* The IT is in CR3 register */\r
-  {\r
-    usartxbase += 0x14; \r
-  }\r
-  if (NewState != DISABLE)\r
-  {\r
-    *(__IO uint32_t*)usartxbase  |= itmask;\r
-  }\r
-  else\r
-  {\r
-    *(__IO uint32_t*)usartxbase &= ~itmask;\r
-  }\r
-}\r
-\r
-/**\r
-  * @brief  Checks whether the specified USART flag is set or not.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_FLAG: specifies the flag to check.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg USART_FLAG_CTS:  CTS Change flag\r
-  *     @arg USART_FLAG_LBD:  LIN Break detection flag\r
-  *     @arg USART_FLAG_TXE:  Transmit data register empty flag\r
-  *     @arg USART_FLAG_TC:   Transmission Complete flag\r
-  *     @arg USART_FLAG_RXNE: Receive data register not empty flag\r
-  *     @arg USART_FLAG_IDLE: Idle Line detection flag\r
-  *     @arg USART_FLAG_ORE:  OverRun Error flag\r
-  *     @arg USART_FLAG_NE:   Noise Error flag\r
-  *     @arg USART_FLAG_FE:   Framing Error flag\r
-  *     @arg USART_FLAG_PE:   Parity Error flag\r
-  * @retval The new state of USART_FLAG (SET or RESET).\r
-  */\r
-FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)\r
-{\r
-  FlagStatus bitstatus = RESET;\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_FLAG(USART_FLAG));\r
-  \r
-  if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)\r
-  {\r
-    bitstatus = SET;\r
-  }\r
-  else\r
-  {\r
-    bitstatus = RESET;\r
-  }\r
-  return bitstatus;\r
-}\r
-\r
-/**\r
-  * @brief  Clears the USARTx's pending flags.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_FLAG: specifies the flag to clear.\r
-  *   This parameter can be any combination of the following values:\r
-  *     @arg USART_FLAG_CTS:  CTS Change flag.\r
-  *     @arg USART_FLAG_LBD:  LIN Break detection flag.\r
-  *     @arg USART_FLAG_TC:   Transmission Complete flag.\r
-  *     @arg USART_FLAG_RXNE: Receive data register not empty flag.\r
-  *   \r
-  * @note\r
-  *   - PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun \r
-  *     error) and IDLE (Idle line detected) flags are cleared by software \r
-  *     sequence: a read operation to USART_SR register (USART_GetFlagStatus()) \r
-  *     followed by a read operation to USART_DR register (USART_ReceiveData()).\r
-  *   - RXNE flag can be also cleared by a read to the USART_DR register \r
-  *     (USART_ReceiveData()).\r
-  *   - TC flag can be also cleared by software sequence: a read operation to \r
-  *     USART_SR register (USART_GetFlagStatus()) followed by a write operation\r
-  *     to USART_DR register (USART_SendData()).\r
-  *   - TXE flag is cleared only by a write to the USART_DR register \r
-  *     (USART_SendData()).\r
-  * @retval None\r
-  */\r
-void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)\r
-{\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));\r
-     \r
-  USARTx->SR = (uint16_t)~USART_FLAG;\r
-}\r
-\r
-/**\r
-  * @brief  Checks whether the specified USART interrupt has occurred or not.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_IT: specifies the USART interrupt source to check.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg USART_IT_CTS:  CTS change interrupt\r
-  *     @arg USART_IT_LBD:  LIN Break detection interrupt\r
-  *     @arg USART_IT_TXE:  Tansmit Data Register empty interrupt\r
-  *     @arg USART_IT_TC:   Transmission complete interrupt\r
-  *     @arg USART_IT_RXNE: Receive Data register not empty interrupt\r
-  *     @arg USART_IT_IDLE: Idle line detection interrupt\r
-  *     @arg USART_IT_ORE:  OverRun Error interrupt\r
-  *     @arg USART_IT_NE:   Noise Error interrupt\r
-  *     @arg USART_IT_FE:   Framing Error interrupt\r
-  *     @arg USART_IT_PE:   Parity Error interrupt\r
-  * @retval The new state of USART_IT (SET or RESET).\r
-  */\r
-ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)\r
-{\r
-  uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;\r
-  ITStatus bitstatus = RESET;\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_GET_IT(USART_IT)); \r
-  \r
-  /* Get the USART register index */\r
-  usartreg = (((uint8_t)USART_IT) >> 0x05);\r
-  /* Get the interrupt position */\r
-  itmask = USART_IT & IT_MASK;\r
-  itmask = (uint32_t)0x01 << itmask;\r
-  \r
-  if (usartreg == 0x01) /* The IT  is in CR1 register */\r
-  {\r
-    itmask &= USARTx->CR1;\r
-  }\r
-  else if (usartreg == 0x02) /* The IT  is in CR2 register */\r
-  {\r
-    itmask &= USARTx->CR2;\r
-  }\r
-  else /* The IT  is in CR3 register */\r
-  {\r
-    itmask &= USARTx->CR3;\r
-  }\r
-  \r
-  bitpos = USART_IT >> 0x08;\r
-  bitpos = (uint32_t)0x01 << bitpos;\r
-  bitpos &= USARTx->SR;\r
-  if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))\r
-  {\r
-    bitstatus = SET;\r
-  }\r
-  else\r
-  {\r
-    bitstatus = RESET;\r
-  }\r
-  \r
-  return bitstatus;  \r
-}\r
-\r
-/**\r
-  * @brief  Clears the USARTx\92s interrupt pending bits.\r
-  * @param  USARTx: Select the USART peripheral. \r
-  *   This parameter can be one of the following values:\r
-  *   USART1, USART2 or USART3.\r
-  * @param  USART_IT: specifies the interrupt pending bit to clear.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg USART_IT_CTS:  CTS change interrupt\r
-  *     @arg USART_IT_LBD:  LIN Break detection interrupt\r
-  *     @arg USART_IT_TC:   Transmission complete interrupt. \r
-  *     @arg USART_IT_RXNE: Receive Data register not empty interrupt.\r
-  *   \r
-  * @note\r
-  *   - PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun \r
-  *     error) and IDLE (Idle line detected) pending bits are cleared by \r
-  *     software sequence: a read operation to USART_SR register \r
-  *     (USART_GetITStatus()) followed by a read operation to USART_DR register \r
-  *     (USART_ReceiveData()).\r
-  *   - RXNE pending bit can be also cleared by a read to the USART_DR register \r
-  *     (USART_ReceiveData()).\r
-  *   - TC pending bit can be also cleared by software sequence: a read \r
-  *     operation to USART_SR register (USART_GetITStatus()) followed by a write \r
-  *     operation to USART_DR register (USART_SendData()).\r
-  *   - TXE pending bit is cleared only by a write to the USART_DR register \r
-  *     (USART_SendData()).\r
-  * @retval None\r
-  */\r
-void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)\r
-{\r
-  uint16_t bitpos = 0x00, itmask = 0x00;\r
-  /* Check the parameters */\r
-  assert_param(IS_USART_ALL_PERIPH(USARTx));\r
-  assert_param(IS_USART_CLEAR_IT(USART_IT)); \r
-  \r
-  bitpos = USART_IT >> 0x08;\r
-  itmask = ((uint16_t)0x01 << (uint16_t)bitpos);\r
-  USARTx->SR = (uint16_t)~itmask;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r