| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593 | /**  ******************************************************************************  * @file    stm32f0xx_hal_uart_ex.h  * @author  MCD Application Team  * @brief   Header file of UART HAL Extended module.  ******************************************************************************  * @attention  *  * Copyright (c) 2016 STMicroelectronics.  * All rights reserved.  *  * This software is licensed under terms that can be found in the LICENSE file  * in the root directory of this software component.  * If no LICENSE file comes with this software, it is provided AS-IS.  *  ******************************************************************************  *//* Define to prevent recursive inclusion -------------------------------------*/#ifndef STM32F0xx_HAL_UART_EX_H#define STM32F0xx_HAL_UART_EX_H#ifdef __cplusplusextern "C" {#endif/* Includes ------------------------------------------------------------------*/#include "stm32f0xx_hal_def.h"/** @addtogroup STM32F0xx_HAL_Driver  * @{  *//** @addtogroup UARTEx  * @{  *//* Exported types ------------------------------------------------------------*//** @defgroup UARTEx_Exported_Types UARTEx Exported Types  * @{  */#if defined(USART_CR1_UESM)/**  * @brief  UART wake up from stop mode parameters  */typedef struct{  uint32_t WakeUpEvent;        /*!< Specifies which event will activate the Wakeup from Stop mode flag (WUF).                                    This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection.                                    If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must                                    be filled up. */  uint16_t AddressLength;      /*!< Specifies whether the address is 4 or 7-bit long.                                    This parameter can be a value of @ref UARTEx_WakeUp_Address_Length.  */  uint8_t Address;             /*!< UART/USART node address (7-bit long max). */} UART_WakeUpTypeDef;#endif /* USART_CR1_UESM *//**  * @}  *//* Exported constants --------------------------------------------------------*//** @defgroup UARTEx_Exported_Constants UARTEx Exported Constants  * @{  *//** @defgroup UARTEx_Word_Length UARTEx Word Length  * @{  */#if defined(USART_CR1_M1)#define UART_WORDLENGTH_7B          USART_CR1_M1   /*!< 7-bit long UART frame */#endif /* USART_CR1_M1 */#define UART_WORDLENGTH_8B          0x00000000U    /*!< 8-bit long UART frame */#if defined (USART_CR1_M0)#define UART_WORDLENGTH_9B          USART_CR1_M0   /*!< 9-bit long UART frame */#else#define UART_WORDLENGTH_9B          USART_CR1_M   /*!< 9-bit long UART frame */#endif /* USART_CR1_M0 *//**  * @}  *//** @defgroup UARTEx_WakeUp_Address_Length UARTEx WakeUp Address Length  * @{  */#define UART_ADDRESS_DETECT_4B      0x00000000U      /*!< 4-bit long wake-up address */#define UART_ADDRESS_DETECT_7B      USART_CR2_ADDM7  /*!< 7-bit long wake-up address *//**  * @}  *//**  * @}  *//* Exported macros -----------------------------------------------------------*//* Exported functions --------------------------------------------------------*//** @addtogroup UARTEx_Exported_Functions  * @{  *//** @addtogroup UARTEx_Exported_Functions_Group1  * @{  *//* Initialization and de-initialization functions  ****************************/HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,                                   uint32_t DeassertionTime);/**  * @}  *//** @addtogroup UARTEx_Exported_Functions_Group2  * @{  */#if defined(USART_CR1_UESM)void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart);#endif /* USART_CR1_UESM *//**  * @}  *//** @addtogroup UARTEx_Exported_Functions_Group3  * @{  *//* Peripheral Control functions  **********************************************/#if defined(USART_CR1_UESM)HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart);HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart);#endif /* USART_CR1_UESM */HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen,                                           uint32_t Timeout);HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);HAL_UART_RxEventTypeTypeDef HAL_UARTEx_GetRxEventType(UART_HandleTypeDef *huart);/**  * @}  *//**  * @}  *//* Private macros ------------------------------------------------------------*//** @defgroup UARTEx_Private_Macros UARTEx Private Macros  * @{  *//** @brief  Report the UART clock source.  * @param  __HANDLE__ specifies the UART Handle.  * @param  __CLOCKSOURCE__ output variable.  * @retval UART clocking source, written in __CLOCKSOURCE__.  */#if defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx)#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    switch(__HAL_RCC_GET_USART1_SOURCE())                     \    {                                                         \      case RCC_USART1CLKSOURCE_PCLK1:                         \        (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;           \        break;                                                \      case RCC_USART1CLKSOURCE_HSI:                           \        (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;             \        break;                                                \      case RCC_USART1CLKSOURCE_SYSCLK:                        \        (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;          \        break;                                                \      case RCC_USART1CLKSOURCE_LSE:                           \        (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;             \        break;                                                \      default:                                                \        (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;       \        break;                                                \    }                                                         \  } while(0)#elif defined (STM32F030x8) || defined (STM32F070x6) || defined (STM32F042x6) || defined (STM32F048xx) \   || defined (STM32F051x8) || defined (STM32F058xx)#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    if((__HANDLE__)->Instance == USART1)                      \    {                                                         \      switch(__HAL_RCC_GET_USART1_SOURCE())                   \      {                                                       \        case RCC_USART1CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART1CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART1CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART1CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART2)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else                                                      \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;         \    }                                                         \  } while(0)#elif defined(STM32F070xB)#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    if((__HANDLE__)->Instance == USART1)                      \    {                                                         \      switch(__HAL_RCC_GET_USART1_SOURCE())                   \      {                                                       \        case RCC_USART1CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART1CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART1CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART1CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART2)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART3)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART4)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else                                                      \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;         \    }                                                         \  } while(0)#elif defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    if((__HANDLE__)->Instance == USART1)                      \    {                                                         \      switch(__HAL_RCC_GET_USART1_SOURCE())                   \      {                                                       \        case RCC_USART1CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART1CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART1CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART1CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART2)                 \    {                                                         \      switch(__HAL_RCC_GET_USART2_SOURCE())                   \      {                                                       \        case RCC_USART2CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART2CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART2CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART2CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART3)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART4)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else                                                      \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;         \    }                                                         \  } while(0)#elif defined(STM32F091xC) || defined (STM32F098xx)#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    if((__HANDLE__)->Instance == USART1)                      \    {                                                         \      switch(__HAL_RCC_GET_USART1_SOURCE())                   \      {                                                       \        case RCC_USART1CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART1CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART1CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART1CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART2)                 \    {                                                         \      switch(__HAL_RCC_GET_USART2_SOURCE())                   \      {                                                       \        case RCC_USART2CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART2CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART2CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART2CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART3)                 \    {                                                         \      switch(__HAL_RCC_GET_USART3_SOURCE())                   \      {                                                       \        case RCC_USART3CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART3CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART3CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART3CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART4)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART5)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART6)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART7)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART8)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else                                                      \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;         \    }                                                         \  } while(0)#elif defined(STM32F030xC)#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    if((__HANDLE__)->Instance == USART1)                      \    {                                                         \      switch(__HAL_RCC_GET_USART1_SOURCE())                   \      {                                                       \        case RCC_USART1CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART1CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART1CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART1CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART2)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART3)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART4)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART5)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART6)                 \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1;             \    }                                                         \    else                                                      \    {                                                         \      (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;         \    }                                                         \  } while(0)#endif /* defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx) *//** @brief  Report the UART 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 UART Handle.  * @retval None, the mask to apply to UART RDR register is stored in (__HANDLE__)->Mask field.  */#if defined (USART_CR1_M1)#define UART_MASK_COMPUTATION(__HANDLE__)                             \  do {                                                                \    if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B)          \    {                                                                 \      if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x01FFU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU ;                                \      }                                                               \    }                                                                 \    else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B)     \    {                                                                 \      if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x007FU ;                                \      }                                                               \    }                                                                 \    else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B)     \    {                                                                 \      if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x007FU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x003FU ;                                \      }                                                               \    }                                                                 \    else                                                              \    {                                                                 \      (__HANDLE__)->Mask = 0x0000U;                                   \    }                                                                 \  } while(0U)#else#define UART_MASK_COMPUTATION(__HANDLE__)                             \  do {                                                                \    if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B)          \    {                                                                 \      if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x01FFU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU ;                                \      }                                                               \    }                                                                 \    else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B)     \    {                                                                 \      if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x007FU ;                                \      }                                                               \    }                                                                 \    else                                                              \    {                                                                 \      (__HANDLE__)->Mask = 0x0000U;                                   \    }                                                                 \  } while(0U)#endif /* USART_CR1_M1 *//**  * @brief Ensure that UART frame length is valid.  * @param __LENGTH__ UART frame length.  * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)  */#if defined (USART_CR1_M1)#define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_7B) || \                                         ((__LENGTH__) == UART_WORDLENGTH_8B) || \                                         ((__LENGTH__) == UART_WORDLENGTH_9B))#else#define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_8B) || \                                         ((__LENGTH__) == UART_WORDLENGTH_9B))#endif /* USART_CR1_M1 *//**  * @brief Ensure that UART wake-up address length is valid.  * @param __ADDRESS__ UART wake-up address length.  * @retval SET (__ADDRESS__ is valid) or RESET (__ADDRESS__ is invalid)  */#define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \                                                   ((__ADDRESS__) == UART_ADDRESS_DETECT_7B))/**  * @}  *//* Private functions ---------------------------------------------------------*//**  * @}  *//**  * @}  */#ifdef __cplusplus}#endif#endif /* STM32F0xx_HAL_UART_EX_H */
 |