TUKS MCU Introductory course / TUKS-COURSE-2-LED
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers stm32l4xx_hal_uart_ex.h Source File

stm32l4xx_hal_uart_ex.h

Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32l4xx_hal_uart_ex.h
00004   * @author  MCD Application Team
00005   * @version V1.5.1
00006   * @date    31-May-2016
00007   * @brief   Header file of UART HAL Extended module.
00008   ******************************************************************************
00009   * @attention
00010   *
00011   * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
00012   *
00013   * Redistribution and use in source and binary forms, with or without modification,
00014   * are permitted provided that the following conditions are met:
00015   *   1. Redistributions of source code must retain the above copyright notice,
00016   *      this list of conditions and the following disclaimer.
00017   *   2. Redistributions in binary form must reproduce the above copyright notice,
00018   *      this list of conditions and the following disclaimer in the documentation
00019   *      and/or other materials provided with the distribution.
00020   *   3. Neither the name of STMicroelectronics nor the names of its contributors
00021   *      may be used to endorse or promote products derived from this software
00022   *      without specific prior written permission.
00023   *
00024   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00025   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00026   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00027   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
00028   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00029   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00030   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00032   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034   *
00035   ******************************************************************************
00036   */
00037 
00038 /* Define to prevent recursive inclusion -------------------------------------*/
00039 #ifndef __STM32L4xx_HAL_UART_EX_H
00040 #define __STM32L4xx_HAL_UART_EX_H
00041 
00042 #ifdef __cplusplus
00043  extern "C" {
00044 #endif
00045 
00046 /* Includes ------------------------------------------------------------------*/
00047 #include "stm32l4xx_hal_def.h"
00048 
00049 /** @addtogroup STM32L4xx_HAL_Driver
00050   * @{
00051   */
00052 
00053 /** @addtogroup UARTEx
00054   * @{
00055   */
00056 
00057 /* Exported types ------------------------------------------------------------*/
00058 /** @defgroup UARTEx_Exported_Types UARTEx Exported Types
00059   * @{
00060   */
00061 
00062 /**
00063   * @brief  UART wake up from stop mode parameters
00064   */
00065 typedef struct
00066 {
00067   uint32_t WakeUpEvent;        /*!< Specifies which event will activat the Wakeup from Stop mode flag (WUF).
00068                                     This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection.
00069                                     If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must
00070                                     be filled up. */
00071 
00072   uint16_t AddressLength;      /*!< Specifies whether the address is 4 or 7-bit long.
00073                                     This parameter can be a value of @ref UARTEx_WakeUp_Address_Length.  */
00074 
00075   uint8_t Address;             /*!< UART/USART node address (7-bit long max). */
00076 } UART_WakeUpTypeDef;
00077 
00078 /**
00079   * @}
00080   */
00081 
00082 /* Exported constants --------------------------------------------------------*/
00083 /** @defgroup UARTEx_Exported_Constants UARTEx Exported Constants
00084   * @{
00085   */
00086 
00087 /** @defgroup UARTEx_Word_Length UART Word Length
00088   * @{
00089   */
00090 #define UART_WORDLENGTH_7B                  ((uint32_t)USART_CR1_M1)   /*!< 7-bit long UART frame */
00091 #define UART_WORDLENGTH_8B                  ((uint32_t)0x00000000)     /*!< 8-bit long UART frame */
00092 #define UART_WORDLENGTH_9B                  ((uint32_t)USART_CR1_M0)   /*!< 9-bit long UART frame */
00093 /**
00094   * @}
00095   */
00096   
00097 /** @defgroup UARTEx_WakeUp_Address_Length UART Extended WakeUp Address Length
00098   * @{
00099   */
00100 #define UART_ADDRESS_DETECT_4B              ((uint32_t)0x00000000)       /*!< 4-bit long wake-up address */
00101 #define UART_ADDRESS_DETECT_7B              ((uint32_t)USART_CR2_ADDM7)  /*!< 7-bit long wake-up address */
00102 /**
00103   * @}
00104   */
00105 
00106 /**
00107   * @}
00108   */
00109 
00110 /* Exported macros -----------------------------------------------------------*/
00111 /* Exported functions --------------------------------------------------------*/
00112 /** @addtogroup UARTEx_Exported_Functions
00113   * @{
00114   */
00115 
00116 /** @addtogroup UARTEx_Exported_Functions_Group1
00117   * @{
00118   */
00119 
00120 /* Initialization and de-initialization functions  ****************************/
00121 HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime);
00122 
00123 /**
00124   * @}
00125   */
00126 
00127 /* IO operation functions *****************************************************/
00128 
00129 /** @addtogroup UARTEx_Exported_Functions_Group3
00130   * @{
00131   */
00132 
00133 /* Peripheral Control functions  **********************************************/
00134 HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
00135 HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart);
00136 HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart);
00137 HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);
00138 void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart);
00139 
00140 /**
00141   * @}
00142   */
00143 
00144 /**
00145   * @}
00146   */
00147 
00148 /* Private macros ------------------------------------------------------------*/
00149 /** @defgroup UARTEx_Private_Macros UARTEx Private Macros
00150   * @{
00151   */
00152 
00153 /** @brief  Report the UART clock source.
00154   * @param  __HANDLE__: specifies the UART Handle.
00155   * @param  __CLOCKSOURCE__: output variable.
00156   * @retval UART clocking source, written in __CLOCKSOURCE__.
00157   */
00158 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx)    
00159 #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \
00160   do {                                                        \
00161     if((__HANDLE__)->Instance == USART1)                      \
00162     {                                                         \
00163        switch(__HAL_RCC_GET_USART1_SOURCE())                  \
00164        {                                                      \
00165         case RCC_USART1CLKSOURCE_PCLK2:                       \
00166           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2;         \
00167           break;                                              \
00168         case RCC_USART1CLKSOURCE_HSI:                         \
00169           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00170           break;                                              \
00171         case RCC_USART1CLKSOURCE_SYSCLK:                      \
00172           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00173           break;                                              \
00174         case RCC_USART1CLKSOURCE_LSE:                         \
00175           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00176           break;                                              \
00177         default:                                              \
00178           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00179           break;                                              \
00180        }                                                      \
00181     }                                                         \
00182     else if((__HANDLE__)->Instance == USART2)                 \
00183     {                                                         \
00184        switch(__HAL_RCC_GET_USART2_SOURCE())                  \
00185        {                                                      \
00186         case RCC_USART2CLKSOURCE_PCLK1:                       \
00187           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00188           break;                                              \
00189         case RCC_USART2CLKSOURCE_HSI:                         \
00190           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00191           break;                                              \
00192         case RCC_USART2CLKSOURCE_SYSCLK:                      \
00193           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00194           break;                                              \
00195         case RCC_USART2CLKSOURCE_LSE:                         \
00196           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00197           break;                                              \
00198         default:                                              \
00199           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00200           break;                                              \
00201        }                                                      \
00202     }                                                         \
00203     else if((__HANDLE__)->Instance == USART3)                 \
00204     {                                                         \
00205        switch(__HAL_RCC_GET_USART3_SOURCE())                  \
00206        {                                                      \
00207         case RCC_USART3CLKSOURCE_PCLK1:                       \
00208           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00209           break;                                              \
00210         case RCC_USART3CLKSOURCE_HSI:                         \
00211           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00212           break;                                              \
00213         case RCC_USART3CLKSOURCE_SYSCLK:                      \
00214           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00215           break;                                              \
00216         case RCC_USART3CLKSOURCE_LSE:                         \
00217           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00218           break;                                              \
00219         default:                                              \
00220           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00221           break;                                              \
00222        }                                                      \
00223     }                                                         \
00224     else if((__HANDLE__)->Instance == UART4)                  \
00225     {                                                         \
00226        switch(__HAL_RCC_GET_UART4_SOURCE())                   \
00227        {                                                      \
00228         case RCC_UART4CLKSOURCE_PCLK1:                        \
00229           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00230           break;                                              \
00231         case RCC_UART4CLKSOURCE_HSI:                          \
00232           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00233           break;                                              \
00234         case RCC_UART4CLKSOURCE_SYSCLK:                       \
00235           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00236           break;                                              \
00237         case RCC_UART4CLKSOURCE_LSE:                          \
00238           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00239           break;                                              \
00240         default:                                              \
00241           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00242           break;                                              \
00243        }                                                      \
00244     }                                                         \
00245     else if ((__HANDLE__)->Instance == UART5)                 \
00246     {                                                         \
00247        switch(__HAL_RCC_GET_UART5_SOURCE())                   \
00248        {                                                      \
00249         case RCC_UART5CLKSOURCE_PCLK1:                        \
00250           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00251           break;                                              \
00252         case RCC_UART5CLKSOURCE_HSI:                          \
00253           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00254           break;                                              \
00255         case RCC_UART5CLKSOURCE_SYSCLK:                       \
00256           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00257           break;                                              \
00258         case RCC_UART5CLKSOURCE_LSE:                          \
00259           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00260           break;                                              \
00261         default:                                              \
00262           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00263           break;                                              \
00264        }                                                      \
00265     }                                                         \
00266     else if((__HANDLE__)->Instance == LPUART1)                \
00267     {                                                         \
00268        switch(__HAL_RCC_GET_LPUART1_SOURCE())                 \
00269        {                                                      \
00270         case RCC_LPUART1CLKSOURCE_PCLK1:                      \
00271           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00272           break;                                              \
00273         case RCC_LPUART1CLKSOURCE_HSI:                        \
00274           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00275           break;                                              \
00276         case RCC_LPUART1CLKSOURCE_SYSCLK:                     \
00277           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00278           break;                                              \
00279         case RCC_LPUART1CLKSOURCE_LSE:                        \
00280           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00281           break;                                              \
00282         default:                                              \
00283           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00284           break;                                              \
00285        }                                                      \
00286     }                                                         \
00287   } while(0)
00288 #elif defined (STM32L431xx) || defined (STM32L433xx) || defined (STM32L443xx)
00289 #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \
00290   do {                                                        \
00291     if((__HANDLE__)->Instance == USART1)                      \
00292     {                                                         \
00293        switch(__HAL_RCC_GET_USART1_SOURCE())                  \
00294        {                                                      \
00295         case RCC_USART1CLKSOURCE_PCLK2:                       \
00296           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2;         \
00297           break;                                              \
00298         case RCC_USART1CLKSOURCE_HSI:                         \
00299           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00300           break;                                              \
00301         case RCC_USART1CLKSOURCE_SYSCLK:                      \
00302           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00303           break;                                              \
00304         case RCC_USART1CLKSOURCE_LSE:                         \
00305           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00306           break;                                              \
00307         default:                                              \
00308           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00309           break;                                              \
00310        }                                                      \
00311     }                                                         \
00312     else if((__HANDLE__)->Instance == USART2)                 \
00313     {                                                         \
00314        switch(__HAL_RCC_GET_USART2_SOURCE())                  \
00315        {                                                      \
00316         case RCC_USART2CLKSOURCE_PCLK1:                       \
00317           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00318           break;                                              \
00319         case RCC_USART2CLKSOURCE_HSI:                         \
00320           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00321           break;                                              \
00322         case RCC_USART2CLKSOURCE_SYSCLK:                      \
00323           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00324           break;                                              \
00325         case RCC_USART2CLKSOURCE_LSE:                         \
00326           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00327           break;                                              \
00328         default:                                              \
00329           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00330           break;                                              \
00331        }                                                      \
00332     }                                                         \
00333     else if((__HANDLE__)->Instance == USART3)                 \
00334     {                                                         \
00335        switch(__HAL_RCC_GET_USART3_SOURCE())                  \
00336        {                                                      \
00337         case RCC_USART3CLKSOURCE_PCLK1:                       \
00338           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00339           break;                                              \
00340         case RCC_USART3CLKSOURCE_HSI:                         \
00341           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00342           break;                                              \
00343         case RCC_USART3CLKSOURCE_SYSCLK:                      \
00344           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00345           break;                                              \
00346         case RCC_USART3CLKSOURCE_LSE:                         \
00347           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00348           break;                                              \
00349         default:                                              \
00350           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00351           break;                                              \
00352        }                                                      \
00353     }                                                         \
00354     else if((__HANDLE__)->Instance == LPUART1)                \
00355     {                                                         \
00356        switch(__HAL_RCC_GET_LPUART1_SOURCE())                 \
00357        {                                                      \
00358         case RCC_LPUART1CLKSOURCE_PCLK1:                      \
00359           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00360           break;                                              \
00361         case RCC_LPUART1CLKSOURCE_HSI:                        \
00362           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00363           break;                                              \
00364         case RCC_LPUART1CLKSOURCE_SYSCLK:                     \
00365           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00366           break;                                              \
00367         case RCC_LPUART1CLKSOURCE_LSE:                        \
00368           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00369           break;                                              \
00370         default:                                              \
00371           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00372           break;                                              \
00373        }                                                      \
00374     }                                                         \
00375   } while(0)
00376 #elif defined (STM32L432xx) || defined (STM32L442xx)
00377 #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \
00378   do {                                                        \
00379     if((__HANDLE__)->Instance == USART1)                      \
00380     {                                                         \
00381        switch(__HAL_RCC_GET_USART1_SOURCE())                  \
00382        {                                                      \
00383         case RCC_USART1CLKSOURCE_PCLK2:                       \
00384           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2;         \
00385           break;                                              \
00386         case RCC_USART1CLKSOURCE_HSI:                         \
00387           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00388           break;                                              \
00389         case RCC_USART1CLKSOURCE_SYSCLK:                      \
00390           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00391           break;                                              \
00392         case RCC_USART1CLKSOURCE_LSE:                         \
00393           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00394           break;                                              \
00395         default:                                              \
00396           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00397           break;                                              \
00398        }                                                      \
00399     }                                                         \
00400     else if((__HANDLE__)->Instance == USART2)                 \
00401     {                                                         \
00402        switch(__HAL_RCC_GET_USART2_SOURCE())                  \
00403        {                                                      \
00404         case RCC_USART2CLKSOURCE_PCLK1:                       \
00405           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00406           break;                                              \
00407         case RCC_USART2CLKSOURCE_HSI:                         \
00408           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00409           break;                                              \
00410         case RCC_USART2CLKSOURCE_SYSCLK:                      \
00411           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00412           break;                                              \
00413         case RCC_USART2CLKSOURCE_LSE:                         \
00414           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00415           break;                                              \
00416         default:                                              \
00417           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00418           break;                                              \
00419        }                                                      \
00420     }                                                         \
00421     else if((__HANDLE__)->Instance == LPUART1)                \
00422     {                                                         \
00423        switch(__HAL_RCC_GET_LPUART1_SOURCE())                 \
00424        {                                                      \
00425         case RCC_LPUART1CLKSOURCE_PCLK1:                      \
00426           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \
00427           break;                                              \
00428         case RCC_LPUART1CLKSOURCE_HSI:                        \
00429           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00430           break;                                              \
00431         case RCC_LPUART1CLKSOURCE_SYSCLK:                     \
00432           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \
00433           break;                                              \
00434         case RCC_LPUART1CLKSOURCE_LSE:                        \
00435           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00436           break;                                              \
00437         default:                                              \
00438           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00439           break;                                              \
00440        }                                                      \
00441     }                                                         \
00442   } while(0)
00443 #endif
00444 
00445 /** @brief  Report the UART mask to apply to retrieve the received data
00446   *         according to the word length and to the parity bits activation.
00447   * @note   If PCE = 1, the parity bit is not included in the data extracted
00448   *         by the reception API().
00449   *         This masking operation is not carried out in the case of
00450   *         DMA transfers.
00451   * @param  __HANDLE__: specifies the UART Handle.
00452   * @retval None, the mask to apply to UART RDR register is stored in (__HANDLE__)->Mask field.
00453   */
00454 #define UART_MASK_COMPUTATION(__HANDLE__)                             \
00455   do {                                                                \
00456   if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B)            \
00457   {                                                                   \
00458      if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)               \
00459      {                                                                \
00460         (__HANDLE__)->Mask = 0x01FF ;                                 \
00461      }                                                                \
00462      else                                                             \
00463      {                                                                \
00464         (__HANDLE__)->Mask = 0x00FF ;                                 \
00465      }                                                                \
00466   }                                                                   \
00467   else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B)       \
00468   {                                                                   \
00469      if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)               \
00470      {                                                                \
00471         (__HANDLE__)->Mask = 0x00FF ;                                 \
00472      }                                                                \
00473      else                                                             \
00474      {                                                                \
00475         (__HANDLE__)->Mask = 0x007F ;                                 \
00476      }                                                                \
00477   }                                                                   \
00478   else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B)       \
00479   {                                                                   \
00480      if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)               \
00481      {                                                                \
00482         (__HANDLE__)->Mask = 0x007F ;                                 \
00483      }                                                                \
00484      else                                                             \
00485      {                                                                \
00486         (__HANDLE__)->Mask = 0x003F ;                                 \
00487      }                                                                \
00488   }                                                                   \
00489 } while(0)
00490 
00491 
00492 /**
00493   * @brief Ensure that UART frame length is valid.
00494   * @param __LENGTH__: UART frame length. 
00495   * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
00496   */
00497 #define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_7B) || \
00498                                          ((__LENGTH__) == UART_WORDLENGTH_8B) || \
00499                                          ((__LENGTH__) == UART_WORDLENGTH_9B))
00500 
00501 /**
00502   * @brief Ensure that UART wake-up address length is valid.
00503   * @param __ADDRESS__: UART wake-up address length. 
00504   * @retval SET (__ADDRESS__ is valid) or RESET (__ADDRESS__ is invalid)
00505   */
00506 #define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \
00507                                                    ((__ADDRESS__) == UART_ADDRESS_DETECT_7B))
00508 
00509 /**
00510   * @}
00511   */
00512 
00513 /* Private functions ---------------------------------------------------------*/
00514 
00515 /**
00516   * @}
00517   */
00518 
00519 /**
00520   * @}
00521   */
00522 
00523 #ifdef __cplusplus
00524 }
00525 #endif
00526 
00527 #endif /* __STM32L4xx_HAL_UART_EX_H */
00528 
00529 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/