STM32H735xx HAL User Manual
stm32h7xx_hal_uart_ex.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32h7xx_hal_uart_ex.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of UART HAL Extended module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2017 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * This software is licensed under terms that can be found in the LICENSE file
00013   * in the root directory of this software component.
00014   * If no LICENSE file comes with this software, it is provided AS-IS.
00015   *
00016   ******************************************************************************
00017   */
00018 
00019 /* Define to prevent recursive inclusion -------------------------------------*/
00020 #ifndef STM32H7xx_HAL_UART_EX_H
00021 #define STM32H7xx_HAL_UART_EX_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 /* Includes ------------------------------------------------------------------*/
00028 #include "stm32h7xx_hal_def.h"
00029 
00030 /** @addtogroup STM32H7xx_HAL_Driver
00031   * @{
00032   */
00033 
00034 /** @addtogroup UARTEx
00035   * @{
00036   */
00037 
00038 /* Exported types ------------------------------------------------------------*/
00039 /** @defgroup UARTEx_Exported_Types UARTEx Exported Types
00040   * @{
00041   */
00042 
00043 /**
00044   * @brief  UART wake up from stop mode parameters
00045   */
00046 typedef struct
00047 {
00048   uint32_t WakeUpEvent;        /*!< Specifies which event will activate the Wakeup from Stop mode flag (WUF).
00049                                     This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection.
00050                                     If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must
00051                                     be filled up. */
00052 
00053   uint16_t AddressLength;      /*!< Specifies whether the address is 4 or 7-bit long.
00054                                     This parameter can be a value of @ref UARTEx_WakeUp_Address_Length.  */
00055 
00056   uint8_t Address;             /*!< UART/USART node address (7-bit long max). */
00057 } UART_WakeUpTypeDef;
00058 
00059 /**
00060   * @}
00061   */
00062 
00063 /* Exported constants --------------------------------------------------------*/
00064 /** @defgroup UARTEx_Exported_Constants UARTEx Exported Constants
00065   * @{
00066   */
00067 
00068 /** @defgroup UARTEx_Word_Length UARTEx Word Length
00069   * @{
00070   */
00071 #define UART_WORDLENGTH_7B          USART_CR1_M1   /*!< 7-bit long UART frame */
00072 #define UART_WORDLENGTH_8B          0x00000000U    /*!< 8-bit long UART frame */
00073 #define UART_WORDLENGTH_9B          USART_CR1_M0   /*!< 9-bit long UART frame */
00074 /**
00075   * @}
00076   */
00077 
00078 /** @defgroup UARTEx_WakeUp_Address_Length UARTEx WakeUp Address Length
00079   * @{
00080   */
00081 #define UART_ADDRESS_DETECT_4B      0x00000000U      /*!< 4-bit long wake-up address */
00082 #define UART_ADDRESS_DETECT_7B      USART_CR2_ADDM7  /*!< 7-bit long wake-up address */
00083 /**
00084   * @}
00085   */
00086 
00087 /** @defgroup UARTEx_FIFO_mode UARTEx FIFO mode
00088   * @brief    UART FIFO mode
00089   * @{
00090   */
00091 #define UART_FIFOMODE_DISABLE       0x00000000U       /*!< FIFO mode disable */
00092 #define UART_FIFOMODE_ENABLE        USART_CR1_FIFOEN  /*!< FIFO mode enable  */
00093 /**
00094   * @}
00095   */
00096 
00097 /** @defgroup UARTEx_TXFIFO_threshold_level UARTEx TXFIFO threshold level
00098   * @brief    UART TXFIFO threshold level
00099   * @{
00100   */
00101 #define UART_TXFIFO_THRESHOLD_1_8   0x00000000U                               /*!< TX FIFO reaches 1/8 of its depth */
00102 #define UART_TXFIFO_THRESHOLD_1_4   USART_CR3_TXFTCFG_0                       /*!< TX FIFO reaches 1/4 of its depth */
00103 #define UART_TXFIFO_THRESHOLD_1_2   USART_CR3_TXFTCFG_1                       /*!< TX FIFO reaches 1/2 of its depth */
00104 #define UART_TXFIFO_THRESHOLD_3_4   (USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1) /*!< TX FIFO reaches 3/4 of its depth */
00105 #define UART_TXFIFO_THRESHOLD_7_8   USART_CR3_TXFTCFG_2                       /*!< TX FIFO reaches 7/8 of its depth */
00106 #define UART_TXFIFO_THRESHOLD_8_8   (USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0) /*!< TX FIFO becomes empty            */
00107 /**
00108   * @}
00109   */
00110 
00111 /** @defgroup UARTEx_RXFIFO_threshold_level UARTEx RXFIFO threshold level
00112   * @brief    UART RXFIFO threshold level
00113   * @{
00114   */
00115 #define UART_RXFIFO_THRESHOLD_1_8   0x00000000U                               /*!< RX FIFO reaches 1/8 of its depth */
00116 #define UART_RXFIFO_THRESHOLD_1_4   USART_CR3_RXFTCFG_0                       /*!< RX FIFO reaches 1/4 of its depth */
00117 #define UART_RXFIFO_THRESHOLD_1_2   USART_CR3_RXFTCFG_1                       /*!< RX FIFO reaches 1/2 of its depth */
00118 #define UART_RXFIFO_THRESHOLD_3_4   (USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1) /*!< RX FIFO reaches 3/4 of its depth */
00119 #define UART_RXFIFO_THRESHOLD_7_8   USART_CR3_RXFTCFG_2                       /*!< RX FIFO reaches 7/8 of its depth */
00120 #define UART_RXFIFO_THRESHOLD_8_8   (USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0) /*!< RX FIFO becomes full             */
00121 /**
00122   * @}
00123   */
00124 
00125 /**
00126   * @}
00127   */
00128 
00129 /* Exported macros -----------------------------------------------------------*/
00130 /* Exported functions --------------------------------------------------------*/
00131 /** @addtogroup UARTEx_Exported_Functions
00132   * @{
00133   */
00134 
00135 /** @addtogroup UARTEx_Exported_Functions_Group1
00136   * @{
00137   */
00138 
00139 /* Initialization and de-initialization functions  ****************************/
00140 HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,
00141                                    uint32_t DeassertionTime);
00142 
00143 /**
00144   * @}
00145   */
00146 
00147 /** @addtogroup UARTEx_Exported_Functions_Group2
00148   * @{
00149   */
00150 
00151 void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart);
00152 
00153 void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart);
00154 void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart);
00155 
00156 /**
00157   * @}
00158   */
00159 
00160 /** @addtogroup UARTEx_Exported_Functions_Group3
00161   * @{
00162   */
00163 
00164 /* Peripheral Control functions  **********************************************/
00165 HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
00166 HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart);
00167 HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart);
00168 
00169 HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);
00170 
00171 HAL_StatusTypeDef HAL_UARTEx_EnableFifoMode(UART_HandleTypeDef *huart);
00172 HAL_StatusTypeDef HAL_UARTEx_DisableFifoMode(UART_HandleTypeDef *huart);
00173 HAL_StatusTypeDef HAL_UARTEx_SetTxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold);
00174 HAL_StatusTypeDef HAL_UARTEx_SetRxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold);
00175 
00176 HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen,
00177                                            uint32_t Timeout);
00178 HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
00179 HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
00180 
00181 
00182 /**
00183   * @}
00184   */
00185 
00186 /**
00187   * @}
00188   */
00189 
00190 /* Private macros ------------------------------------------------------------*/
00191 /** @defgroup UARTEx_Private_Macros UARTEx Private Macros
00192   * @{
00193   */
00194 
00195 /** @brief  Report the UART clock source.
00196   * @param  __HANDLE__ specifies the UART Handle.
00197   * @param  __CLOCKSOURCE__ output variable.
00198   * @retval UART clocking source, written in __CLOCKSOURCE__.
00199   */
00200 #if defined(UART9) && defined(USART10)
00201 #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \
00202   do {                                                        \
00203     if((__HANDLE__)->Instance == USART1)                      \
00204     {                                                         \
00205       switch(__HAL_RCC_GET_USART1_SOURCE())                   \
00206       {                                                       \
00207         case RCC_USART1CLKSOURCE_D2PCLK2:                     \
00208           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK2;       \
00209           break;                                              \
00210         case RCC_USART1CLKSOURCE_PLL2:                        \
00211           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00212           break;                                              \
00213         case RCC_USART1CLKSOURCE_PLL3:                        \
00214           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00215           break;                                              \
00216         case RCC_USART1CLKSOURCE_HSI:                         \
00217           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00218           break;                                              \
00219         case RCC_USART1CLKSOURCE_CSI:                         \
00220           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00221           break;                                              \
00222         case RCC_USART1CLKSOURCE_LSE:                         \
00223           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00224           break;                                              \
00225         default:                                              \
00226           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00227           break;                                              \
00228       }                                                       \
00229     }                                                         \
00230     else if((__HANDLE__)->Instance == USART2)                 \
00231     {                                                         \
00232       switch(__HAL_RCC_GET_USART2_SOURCE())                   \
00233       {                                                       \
00234         case RCC_USART2CLKSOURCE_D2PCLK1:                     \
00235           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00236           break;                                              \
00237         case RCC_USART2CLKSOURCE_PLL2:                        \
00238           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00239           break;                                              \
00240         case RCC_USART2CLKSOURCE_PLL3:                        \
00241           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00242           break;                                              \
00243         case RCC_USART2CLKSOURCE_HSI:                         \
00244           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00245           break;                                              \
00246         case RCC_USART2CLKSOURCE_CSI:                         \
00247           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00248           break;                                              \
00249         case RCC_USART2CLKSOURCE_LSE:                         \
00250           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00251           break;                                              \
00252         default:                                              \
00253           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00254           break;                                              \
00255       }                                                       \
00256     }                                                         \
00257     else if((__HANDLE__)->Instance == USART3)                 \
00258     {                                                         \
00259       switch(__HAL_RCC_GET_USART3_SOURCE())                   \
00260       {                                                       \
00261         case RCC_USART3CLKSOURCE_D2PCLK1:                     \
00262           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00263           break;                                              \
00264         case RCC_USART3CLKSOURCE_PLL2:                        \
00265           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00266           break;                                              \
00267         case RCC_USART3CLKSOURCE_PLL3:                        \
00268           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00269           break;                                              \
00270         case RCC_USART3CLKSOURCE_HSI:                         \
00271           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00272           break;                                              \
00273         case RCC_USART3CLKSOURCE_CSI:                         \
00274           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00275           break;                                              \
00276         case RCC_USART3CLKSOURCE_LSE:                         \
00277           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00278           break;                                              \
00279         default:                                              \
00280           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00281           break;                                              \
00282       }                                                       \
00283     }                                                         \
00284     else if((__HANDLE__)->Instance == UART4)                  \
00285     {                                                         \
00286       switch(__HAL_RCC_GET_UART4_SOURCE())                    \
00287       {                                                       \
00288         case RCC_UART4CLKSOURCE_D2PCLK1:                      \
00289           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00290           break;                                              \
00291         case RCC_UART4CLKSOURCE_PLL2:                         \
00292           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00293           break;                                              \
00294         case RCC_UART4CLKSOURCE_PLL3:                         \
00295           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00296           break;                                              \
00297         case RCC_UART4CLKSOURCE_HSI:                          \
00298           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00299           break;                                              \
00300         case RCC_UART4CLKSOURCE_CSI:                          \
00301           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00302           break;                                              \
00303         case RCC_UART4CLKSOURCE_LSE:                          \
00304           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00305           break;                                              \
00306         default:                                              \
00307           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00308           break;                                              \
00309       }                                                       \
00310     }                                                         \
00311     else if ((__HANDLE__)->Instance == UART5)                 \
00312     {                                                         \
00313       switch(__HAL_RCC_GET_UART5_SOURCE())                    \
00314       {                                                       \
00315         case RCC_UART5CLKSOURCE_D2PCLK1:                      \
00316           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00317           break;                                              \
00318         case RCC_UART5CLKSOURCE_PLL2:                         \
00319           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00320           break;                                              \
00321         case RCC_UART5CLKSOURCE_PLL3:                         \
00322           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00323           break;                                              \
00324         case RCC_UART5CLKSOURCE_HSI:                          \
00325           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00326           break;                                              \
00327         case RCC_UART5CLKSOURCE_CSI:                          \
00328           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00329           break;                                              \
00330         case RCC_UART5CLKSOURCE_LSE:                          \
00331           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00332           break;                                              \
00333         default:                                              \
00334           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00335           break;                                              \
00336       }                                                       \
00337     }                                                         \
00338     else if((__HANDLE__)->Instance == USART6)                 \
00339     {                                                         \
00340       switch(__HAL_RCC_GET_USART6_SOURCE())                   \
00341       {                                                       \
00342         case RCC_USART6CLKSOURCE_D2PCLK2:                     \
00343           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK2;       \
00344           break;                                              \
00345         case RCC_USART6CLKSOURCE_PLL2:                        \
00346           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00347           break;                                              \
00348         case RCC_USART6CLKSOURCE_PLL3:                        \
00349           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00350           break;                                              \
00351         case RCC_USART6CLKSOURCE_HSI:                         \
00352           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00353           break;                                              \
00354         case RCC_USART6CLKSOURCE_CSI:                         \
00355           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00356           break;                                              \
00357         case RCC_USART6CLKSOURCE_LSE:                         \
00358           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00359           break;                                              \
00360         default:                                              \
00361           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00362           break;                                              \
00363       }                                                       \
00364     }                                                         \
00365     else if((__HANDLE__)->Instance == UART7)                  \
00366     {                                                         \
00367       switch(__HAL_RCC_GET_UART7_SOURCE())                    \
00368       {                                                       \
00369         case RCC_UART7CLKSOURCE_D2PCLK1:                      \
00370           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00371           break;                                              \
00372         case RCC_UART7CLKSOURCE_PLL2:                         \
00373           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00374           break;                                              \
00375         case RCC_UART7CLKSOURCE_PLL3:                         \
00376           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00377           break;                                              \
00378         case RCC_UART7CLKSOURCE_HSI:                          \
00379           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00380           break;                                              \
00381         case RCC_UART7CLKSOURCE_CSI:                          \
00382           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00383           break;                                              \
00384         case RCC_UART7CLKSOURCE_LSE:                          \
00385           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00386           break;                                              \
00387         default:                                              \
00388           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00389           break;                                              \
00390       }                                                       \
00391     }                                                         \
00392     else if((__HANDLE__)->Instance == UART8)                  \
00393     {                                                         \
00394       switch(__HAL_RCC_GET_UART8_SOURCE())                    \
00395       {                                                       \
00396         case RCC_UART8CLKSOURCE_D2PCLK1:                      \
00397           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00398           break;                                              \
00399         case RCC_UART8CLKSOURCE_PLL2:                         \
00400           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00401           break;                                              \
00402         case RCC_UART8CLKSOURCE_PLL3:                         \
00403           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00404           break;                                              \
00405         case RCC_UART8CLKSOURCE_HSI:                          \
00406           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00407           break;                                              \
00408         case RCC_UART8CLKSOURCE_CSI:                          \
00409           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00410           break;                                              \
00411         case RCC_UART8CLKSOURCE_LSE:                          \
00412           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00413           break;                                              \
00414         default:                                              \
00415           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00416           break;                                              \
00417       }                                                       \
00418     }                                                         \
00419     else if((__HANDLE__)->Instance == UART9)                  \
00420     {                                                         \
00421       switch(__HAL_RCC_GET_UART9_SOURCE())                    \
00422       {                                                       \
00423         case RCC_UART9CLKSOURCE_D2PCLK2:                      \
00424           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK2;       \
00425           break;                                              \
00426         case RCC_UART9CLKSOURCE_PLL2:                         \
00427           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00428           break;                                              \
00429         case RCC_UART9CLKSOURCE_PLL3:                         \
00430           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00431           break;                                              \
00432         case RCC_UART9CLKSOURCE_HSI:                          \
00433           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00434           break;                                              \
00435         case RCC_UART9CLKSOURCE_CSI:                          \
00436           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00437           break;                                              \
00438         case RCC_UART9CLKSOURCE_LSE:                          \
00439           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00440           break;                                              \
00441         default:                                              \
00442           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00443           break;                                              \
00444       }                                                       \
00445     }                                                         \
00446     else if((__HANDLE__)->Instance == USART10)                \
00447     {                                                         \
00448       switch(__HAL_RCC_GET_USART10_SOURCE())                  \
00449       {                                                       \
00450         case RCC_USART10CLKSOURCE_D2PCLK2:                    \
00451           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK2;       \
00452           break;                                              \
00453         case RCC_USART10CLKSOURCE_PLL2:                       \
00454           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00455           break;                                              \
00456         case RCC_USART10CLKSOURCE_PLL3:                       \
00457           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00458           break;                                              \
00459         case RCC_USART10CLKSOURCE_HSI:                        \
00460           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00461           break;                                              \
00462         case RCC_USART10CLKSOURCE_CSI:                        \
00463           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00464           break;                                              \
00465         case RCC_USART10CLKSOURCE_LSE:                        \
00466           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00467           break;                                              \
00468         default:                                              \
00469           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00470           break;                                              \
00471       }                                                       \
00472     }                                                         \
00473     else if((__HANDLE__)->Instance == LPUART1)                \
00474     {                                                         \
00475       switch(__HAL_RCC_GET_LPUART1_SOURCE())                  \
00476       {                                                       \
00477         case RCC_LPUART1CLKSOURCE_D3PCLK1:                    \
00478           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D3PCLK1;       \
00479           break;                                              \
00480         case RCC_LPUART1CLKSOURCE_PLL2:                       \
00481           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00482           break;                                              \
00483         case RCC_LPUART1CLKSOURCE_PLL3:                       \
00484           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00485           break;                                              \
00486         case RCC_LPUART1CLKSOURCE_HSI:                        \
00487           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00488           break;                                              \
00489         case RCC_LPUART1CLKSOURCE_CSI:                        \
00490           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00491           break;                                              \
00492         case RCC_LPUART1CLKSOURCE_LSE:                        \
00493           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00494           break;                                              \
00495         default:                                              \
00496           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00497           break;                                              \
00498       }                                                       \
00499     }                                                         \
00500     else                                                      \
00501     {                                                         \
00502       (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;         \
00503     }                                                         \
00504   } while(0U)
00505 #else
00506 #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \
00507   do {                                                        \
00508     if((__HANDLE__)->Instance == USART1)                      \
00509     {                                                         \
00510       switch(__HAL_RCC_GET_USART1_SOURCE())                   \
00511       {                                                       \
00512         case RCC_USART1CLKSOURCE_D2PCLK2:                     \
00513           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK2;       \
00514           break;                                              \
00515         case RCC_USART1CLKSOURCE_PLL2:                        \
00516           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00517           break;                                              \
00518         case RCC_USART1CLKSOURCE_PLL3:                        \
00519           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00520           break;                                              \
00521         case RCC_USART1CLKSOURCE_HSI:                         \
00522           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00523           break;                                              \
00524         case RCC_USART1CLKSOURCE_CSI:                         \
00525           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00526           break;                                              \
00527         case RCC_USART1CLKSOURCE_LSE:                         \
00528           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00529           break;                                              \
00530         default:                                              \
00531           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00532           break;                                              \
00533       }                                                       \
00534     }                                                         \
00535     else if((__HANDLE__)->Instance == USART2)                 \
00536     {                                                         \
00537       switch(__HAL_RCC_GET_USART2_SOURCE())                   \
00538       {                                                       \
00539         case RCC_USART2CLKSOURCE_D2PCLK1:                     \
00540           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00541           break;                                              \
00542         case RCC_USART2CLKSOURCE_PLL2:                        \
00543           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00544           break;                                              \
00545         case RCC_USART2CLKSOURCE_PLL3:                        \
00546           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00547           break;                                              \
00548         case RCC_USART2CLKSOURCE_HSI:                         \
00549           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00550           break;                                              \
00551         case RCC_USART2CLKSOURCE_CSI:                         \
00552           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00553           break;                                              \
00554         case RCC_USART2CLKSOURCE_LSE:                         \
00555           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00556           break;                                              \
00557         default:                                              \
00558           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00559           break;                                              \
00560       }                                                       \
00561     }                                                         \
00562     else if((__HANDLE__)->Instance == USART3)                 \
00563     {                                                         \
00564       switch(__HAL_RCC_GET_USART3_SOURCE())                   \
00565       {                                                       \
00566         case RCC_USART3CLKSOURCE_D2PCLK1:                     \
00567           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00568           break;                                              \
00569         case RCC_USART3CLKSOURCE_PLL2:                        \
00570           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00571           break;                                              \
00572         case RCC_USART3CLKSOURCE_PLL3:                        \
00573           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00574           break;                                              \
00575         case RCC_USART3CLKSOURCE_HSI:                         \
00576           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00577           break;                                              \
00578         case RCC_USART3CLKSOURCE_CSI:                         \
00579           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00580           break;                                              \
00581         case RCC_USART3CLKSOURCE_LSE:                         \
00582           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00583           break;                                              \
00584         default:                                              \
00585           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00586           break;                                              \
00587       }                                                       \
00588     }                                                         \
00589     else if((__HANDLE__)->Instance == UART4)                  \
00590     {                                                         \
00591       switch(__HAL_RCC_GET_UART4_SOURCE())                    \
00592       {                                                       \
00593         case RCC_UART4CLKSOURCE_D2PCLK1:                      \
00594           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00595           break;                                              \
00596         case RCC_UART4CLKSOURCE_PLL2:                         \
00597           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00598           break;                                              \
00599         case RCC_UART4CLKSOURCE_PLL3:                         \
00600           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00601           break;                                              \
00602         case RCC_UART4CLKSOURCE_HSI:                          \
00603           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00604           break;                                              \
00605         case RCC_UART4CLKSOURCE_CSI:                          \
00606           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00607           break;                                              \
00608         case RCC_UART4CLKSOURCE_LSE:                          \
00609           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00610           break;                                              \
00611         default:                                              \
00612           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00613           break;                                              \
00614       }                                                       \
00615     }                                                         \
00616     else if ((__HANDLE__)->Instance == UART5)                 \
00617     {                                                         \
00618       switch(__HAL_RCC_GET_UART5_SOURCE())                    \
00619       {                                                       \
00620         case RCC_UART5CLKSOURCE_D2PCLK1:                      \
00621           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00622           break;                                              \
00623         case RCC_UART5CLKSOURCE_PLL2:                         \
00624           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00625           break;                                              \
00626         case RCC_UART5CLKSOURCE_PLL3:                         \
00627           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00628           break;                                              \
00629         case RCC_UART5CLKSOURCE_HSI:                          \
00630           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00631           break;                                              \
00632         case RCC_UART5CLKSOURCE_CSI:                          \
00633           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00634           break;                                              \
00635         case RCC_UART5CLKSOURCE_LSE:                          \
00636           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00637           break;                                              \
00638         default:                                              \
00639           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00640           break;                                              \
00641       }                                                       \
00642     }                                                         \
00643     else if((__HANDLE__)->Instance == USART6)                 \
00644     {                                                         \
00645       switch(__HAL_RCC_GET_USART6_SOURCE())                   \
00646       {                                                       \
00647         case RCC_USART6CLKSOURCE_D2PCLK2:                     \
00648           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK2;       \
00649           break;                                              \
00650         case RCC_USART6CLKSOURCE_PLL2:                        \
00651           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00652           break;                                              \
00653         case RCC_USART6CLKSOURCE_PLL3:                        \
00654           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00655           break;                                              \
00656         case RCC_USART6CLKSOURCE_HSI:                         \
00657           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00658           break;                                              \
00659         case RCC_USART6CLKSOURCE_CSI:                         \
00660           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00661           break;                                              \
00662         case RCC_USART6CLKSOURCE_LSE:                         \
00663           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00664           break;                                              \
00665         default:                                              \
00666           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00667           break;                                              \
00668       }                                                       \
00669     }                                                         \
00670     else if((__HANDLE__)->Instance == UART7)                  \
00671     {                                                         \
00672       switch(__HAL_RCC_GET_UART7_SOURCE())                    \
00673       {                                                       \
00674         case RCC_UART7CLKSOURCE_D2PCLK1:                      \
00675           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00676           break;                                              \
00677         case RCC_UART7CLKSOURCE_PLL2:                         \
00678           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00679           break;                                              \
00680         case RCC_UART7CLKSOURCE_PLL3:                         \
00681           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00682           break;                                              \
00683         case RCC_UART7CLKSOURCE_HSI:                          \
00684           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00685           break;                                              \
00686         case RCC_UART7CLKSOURCE_CSI:                          \
00687           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00688           break;                                              \
00689         case RCC_UART7CLKSOURCE_LSE:                          \
00690           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00691           break;                                              \
00692         default:                                              \
00693           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00694           break;                                              \
00695       }                                                       \
00696     }                                                         \
00697     else if((__HANDLE__)->Instance == UART8)                  \
00698     {                                                         \
00699       switch(__HAL_RCC_GET_UART8_SOURCE())                    \
00700       {                                                       \
00701         case RCC_UART8CLKSOURCE_D2PCLK1:                      \
00702           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D2PCLK1;       \
00703           break;                                              \
00704         case RCC_UART8CLKSOURCE_PLL2:                         \
00705           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00706           break;                                              \
00707         case RCC_UART8CLKSOURCE_PLL3:                         \
00708           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00709           break;                                              \
00710         case RCC_UART8CLKSOURCE_HSI:                          \
00711           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00712           break;                                              \
00713         case RCC_UART8CLKSOURCE_CSI:                          \
00714           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00715           break;                                              \
00716         case RCC_UART8CLKSOURCE_LSE:                          \
00717           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00718           break;                                              \
00719         default:                                              \
00720           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00721           break;                                              \
00722       }                                                       \
00723     }                                                         \
00724     else if((__HANDLE__)->Instance == LPUART1)                \
00725     {                                                         \
00726       switch(__HAL_RCC_GET_LPUART1_SOURCE())                  \
00727       {                                                       \
00728         case RCC_LPUART1CLKSOURCE_D3PCLK1:                    \
00729           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_D3PCLK1;       \
00730           break;                                              \
00731         case RCC_LPUART1CLKSOURCE_PLL2:                       \
00732           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL2;          \
00733           break;                                              \
00734         case RCC_LPUART1CLKSOURCE_PLL3:                       \
00735           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PLL3;          \
00736           break;                                              \
00737         case RCC_LPUART1CLKSOURCE_HSI:                        \
00738           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI;           \
00739           break;                                              \
00740         case RCC_LPUART1CLKSOURCE_CSI:                        \
00741           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_CSI;           \
00742           break;                                              \
00743         case RCC_LPUART1CLKSOURCE_LSE:                        \
00744           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE;           \
00745           break;                                              \
00746         default:                                              \
00747           (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;     \
00748           break;                                              \
00749       }                                                       \
00750     }                                                         \
00751     else                                                      \
00752     {                                                         \
00753       (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED;         \
00754     }                                                         \
00755   } while(0U)
00756 #endif  /* UART9 && USART10 */
00757 
00758 /** @brief  Report the UART mask to apply to retrieve the received data
00759   *         according to the word length and to the parity bits activation.
00760   * @note   If PCE = 1, the parity bit is not included in the data extracted
00761   *         by the reception API().
00762   *         This masking operation is not carried out in the case of
00763   *         DMA transfers.
00764   * @param  __HANDLE__ specifies the UART Handle.
00765   * @retval None, the mask to apply to UART RDR register is stored in (__HANDLE__)->Mask field.
00766   */
00767 #define UART_MASK_COMPUTATION(__HANDLE__)                             \
00768   do {                                                                \
00769     if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B)          \
00770     {                                                                 \
00771       if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)              \
00772       {                                                               \
00773         (__HANDLE__)->Mask = 0x01FFU ;                                \
00774       }                                                               \
00775       else                                                            \
00776       {                                                               \
00777         (__HANDLE__)->Mask = 0x00FFU ;                                \
00778       }                                                               \
00779     }                                                                 \
00780     else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B)     \
00781     {                                                                 \
00782       if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)              \
00783       {                                                               \
00784         (__HANDLE__)->Mask = 0x00FFU ;                                \
00785       }                                                               \
00786       else                                                            \
00787       {                                                               \
00788         (__HANDLE__)->Mask = 0x007FU ;                                \
00789       }                                                               \
00790     }                                                                 \
00791     else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B)     \
00792     {                                                                 \
00793       if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE)              \
00794       {                                                               \
00795         (__HANDLE__)->Mask = 0x007FU ;                                \
00796       }                                                               \
00797       else                                                            \
00798       {                                                               \
00799         (__HANDLE__)->Mask = 0x003FU ;                                \
00800       }                                                               \
00801     }                                                                 \
00802     else                                                              \
00803     {                                                                 \
00804       (__HANDLE__)->Mask = 0x0000U;                                   \
00805     }                                                                 \
00806   } while(0U)
00807 
00808 /**
00809   * @brief Ensure that UART frame length is valid.
00810   * @param __LENGTH__ UART frame length.
00811   * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
00812   */
00813 #define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_7B) || \
00814                                          ((__LENGTH__) == UART_WORDLENGTH_8B) || \
00815                                          ((__LENGTH__) == UART_WORDLENGTH_9B))
00816 
00817 /**
00818   * @brief Ensure that UART wake-up address length is valid.
00819   * @param __ADDRESS__ UART wake-up address length.
00820   * @retval SET (__ADDRESS__ is valid) or RESET (__ADDRESS__ is invalid)
00821   */
00822 #define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \
00823                                                    ((__ADDRESS__) == UART_ADDRESS_DETECT_7B))
00824 
00825 /**
00826   * @brief Ensure that UART TXFIFO threshold level is valid.
00827   * @param __THRESHOLD__ UART TXFIFO threshold level.
00828   * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid)
00829   */
00830 #define IS_UART_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_1_8) || \
00831                                                  ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_1_4) || \
00832                                                  ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_1_2) || \
00833                                                  ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_3_4) || \
00834                                                  ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_7_8) || \
00835                                                  ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_8_8))
00836 
00837 /**
00838   * @brief Ensure that UART RXFIFO threshold level is valid.
00839   * @param __THRESHOLD__ UART RXFIFO threshold level.
00840   * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid)
00841   */
00842 #define IS_UART_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_1_8) || \
00843                                                  ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_1_4) || \
00844                                                  ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_1_2) || \
00845                                                  ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_3_4) || \
00846                                                  ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_7_8) || \
00847                                                  ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_8_8))
00848 
00849 /**
00850   * @}
00851   */
00852 
00853 /* Private functions ---------------------------------------------------------*/
00854 
00855 /**
00856   * @}
00857   */
00858 
00859 /**
00860   * @}
00861   */
00862 
00863 #ifdef __cplusplus
00864 }
00865 #endif
00866 
00867 #endif /* STM32H7xx_HAL_UART_EX_H */
00868