text: /**
    ******************************************************************************
    * @file    stm32f7xx_hal_usart_ex.h
    * @author  MCD Application Team
    * @brief   Header file of USART HAL Extended module.
    ******************************************************************************
    * @attention
    *
    * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
    * All rights reserved.</center></h2>
    *
    * This software component is licensed by ST under BSD 3-Clause license,
    * the "License"; You may not use this file except in compliance with the
    * License. You may obtain a copy of the License at:
    *                        opensource.org/licenses/BSD-3-Clause
    *
    ******************************************************************************
    */
  
  /* Define to prevent recursive inclusion -------------------------------------*/
  #ifndef STM32F7xx_HAL_USART_EX_H
  #define STM32F7xx_HAL_USART_EX_H
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /* Includes ------------------------------------------------------------------*/
  #include "stm32f7xx_hal_def.h"
  
  /** @addtogroup STM32F7xx_HAL_Driver
    * @{
    */
  
  /** @addtogroup USARTEx
    * @{
    */
  
  /* Exported types ------------------------------------------------------------*/
  /* Exported constants --------------------------------------------------------*/
  /** @defgroup USARTEx_Exported_Constants USARTEx Exported Constants
    * @{
    */
  
  /** @defgroup USARTEx_Word_Length USARTEx Word Length
    * @{
    */
  #define USART_WORDLENGTH_7B                  (USART_CR1_M1)   /*!< 7-bit long USART frame */
  #define USART_WORDLENGTH_8B                  (0x00000000U)              /*!< 8-bit long USART frame */
  #define USART_WORDLENGTH_9B                  (USART_CR1_M0)   /*!< 9-bit long USART frame */
  /**
    * @}
    */
  
  
  /**
    * @}
    */
  
  /* Private macros ------------------------------------------------------------*/
  /** @defgroup USARTEx_Private_Macros USARTEx Private Macros
    * @{
    */
  
  /** @brief  Compute the USART mask to apply to retrieve the received data
    *         according to the word length and to the parity bits activation.
    * @note   If PCE = 1, the parity bit is not included in the data extracted
    *         by the reception API().
    *         This masking operation is not carried out in the case of
    *         DMA transfers.
    * @param  __HANDLE__ specifies the USART Handle.
    * @retval None, the mask to apply to USART RDR register is stored in (__HANDLE__)->Mask field.
    */
  #define USART_MASK_COMPUTATION(__HANDLE__)                            \
    do {                                                                \
      if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_9B)         \
      {                                                                 \
        if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \
        {                                                               \
          (__HANDLE__)->Mask = 0x01FFU;                                 \
        }                                                               \
        else                                                            \
        {                                                               \
          (__HANDLE__)->Mask = 0x00FFU;                                 \
        }                                                               \
      }                                                                 \
      else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_8B)    \
      {                                                                 \
        if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \
        {                                                               \
          (__HANDLE__)->Mask = 0x00FFU;                                 \
        }                                                               \
        else                                                            \
        {                                                               \
          (__HANDLE__)->Mask = 0x007FU;                                 \
        }                                                               \
      }                                                                 \
      else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_7B)    \
      {                                                                 \
        if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \
        {                                                               \
          (__HANDLE__)->Mask = 0x007FU;                                 \
        }                                                               \
        else                                                            \
        {                                                               \
          (__HANDLE__)->Mask = 0x003FU;                                 \
        }                                                               \
      }                                                                 \
      else                                                              \
      {                                                                 \
        (__HANDLE__)->Mask = 0x0000U;                                   \
      }                                                                 \
    } while(0U)
  
  /**
    * @brief Ensure that USART frame length is valid.
    * @param __LENGTH__ USART frame length.
    * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
    */
  #define IS_USART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == USART_WORDLENGTH_7B) || \
                                            ((__LENGTH__) == USART_WORDLENGTH_8B) || \
                                            ((__LENGTH__) == USART_WORDLENGTH_9B))
  
  
  /**
    * @}
    */
  
  /* Exported functions --------------------------------------------------------*/
  /** @addtogroup USARTEx_Exported_Functions
    * @{
    */
  
  /** @addtogroup USARTEx_Exported_Functions_Group1
    * @{
    */
  
  /* IO operation functions *****************************************************/
  
  /**
    * @}
    */
  
  /** @addtogroup USARTEx_Exported_Functions_Group2
    * @{
    */
  
  /* Peripheral Control functions ***********************************************/
  
  /**
    * @}
    */
  
  /**
    * @}
    */
  
  /**
    * @}
    */
  
  /**
    * @}
    */
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* STM32F7xx_HAL_USART_EX_H */
  
  /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  