STM32H735xx HAL User Manual
|
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