2 ******************************************************************************
\r
3 * @file stm32f7xx_hal_uart_ex.h
\r
4 * @author MCD Application Team
\r
5 * @brief Header file of UART HAL Extended module.
\r
6 ******************************************************************************
\r
9 * <h2><center>© Copyright (c) 2017 STMicroelectronics.
\r
10 * All rights reserved.</center></h2>
\r
12 * This software component is licensed by ST under BSD 3-Clause license,
\r
13 * the "License"; You may not use this file except in compliance with the
\r
14 * License. You may obtain a copy of the License at:
\r
15 * opensource.org/licenses/BSD-3-Clause
\r
17 ******************************************************************************
\r
20 /* Define to prevent recursive inclusion -------------------------------------*/
\r
21 #ifndef STM32F7xx_HAL_UART_EX_H
\r
22 #define STM32F7xx_HAL_UART_EX_H
\r
28 /* Includes ------------------------------------------------------------------*/
\r
29 #include "stm32f7xx_hal_def.h"
\r
31 /** @addtogroup STM32F7xx_HAL_Driver
\r
35 /** @addtogroup UARTEx
\r
39 /* Exported types ------------------------------------------------------------*/
\r
40 /** @defgroup UARTEx_Exported_Types UARTEx Exported Types
\r
49 /* Exported constants --------------------------------------------------------*/
\r
50 /** @defgroup UARTEx_Exported_Constants UARTEx Exported Constants
\r
54 /** @defgroup UARTEx_Word_Length UARTEx Word Length
\r
57 #define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */
\r
58 #define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */
\r
59 #define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */
\r
64 /** @defgroup UARTEx_WakeUp_Address_Length UARTEx WakeUp Address Length
\r
67 #define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */
\r
68 #define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */
\r
78 /* Exported macros -----------------------------------------------------------*/
\r
79 /* Exported functions --------------------------------------------------------*/
\r
80 /** @addtogroup UARTEx_Exported_Functions
\r
84 /** @addtogroup UARTEx_Exported_Functions_Group1
\r
88 /* Initialization and de-initialization functions ****************************/
\r
89 HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime);
\r
95 /** @addtogroup UARTEx_Exported_Functions_Group2
\r
104 /** @addtogroup UARTEx_Exported_Functions_Group3
\r
108 /* Peripheral Control functions **********************************************/
\r
109 HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);
\r
119 /* Private macros ------------------------------------------------------------*/
\r
120 /** @defgroup UARTEx_Private_Macros UARTEx Private Macros
\r
124 /** @brief Report the UART clock source.
\r
125 * @param __HANDLE__ specifies the UART Handle.
\r
126 * @param __CLOCKSOURCE__ output variable.
\r
127 * @retval UART clocking source, written in __CLOCKSOURCE__.
\r
129 #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
\r
131 if((__HANDLE__)->Instance == USART1) \
\r
133 switch(__HAL_RCC_GET_USART1_SOURCE()) \
\r
135 case RCC_USART1CLKSOURCE_PCLK2: \
\r
136 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
\r
138 case RCC_USART1CLKSOURCE_HSI: \
\r
139 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
\r
141 case RCC_USART1CLKSOURCE_SYSCLK: \
\r
142 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
\r
144 case RCC_USART1CLKSOURCE_LSE: \
\r
145 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
\r
148 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
\r
152 else if((__HANDLE__)->Instance == USART2) \
\r
154 switch(__HAL_RCC_GET_USART2_SOURCE()) \
\r
156 case RCC_USART2CLKSOURCE_PCLK1: \
\r
157 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
\r
159 case RCC_USART2CLKSOURCE_HSI: \
\r
160 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
\r
162 case RCC_USART2CLKSOURCE_SYSCLK: \
\r
163 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
\r
165 case RCC_USART2CLKSOURCE_LSE: \
\r
166 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
\r
169 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
\r
173 else if((__HANDLE__)->Instance == USART3) \
\r
175 switch(__HAL_RCC_GET_USART3_SOURCE()) \
\r
177 case RCC_USART3CLKSOURCE_PCLK1: \
\r
178 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
\r
180 case RCC_USART3CLKSOURCE_HSI: \
\r
181 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
\r
183 case RCC_USART3CLKSOURCE_SYSCLK: \
\r
184 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
\r
186 case RCC_USART3CLKSOURCE_LSE: \
\r
187 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
\r
190 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
\r
194 else if((__HANDLE__)->Instance == UART4) \
\r
196 switch(__HAL_RCC_GET_UART4_SOURCE()) \
\r
198 case RCC_UART4CLKSOURCE_PCLK1: \
\r
199 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
\r
201 case RCC_UART4CLKSOURCE_HSI: \
\r
202 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
\r
204 case RCC_UART4CLKSOURCE_SYSCLK: \
\r
205 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
\r
207 case RCC_UART4CLKSOURCE_LSE: \
\r
208 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
\r
211 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
\r
215 else if ((__HANDLE__)->Instance == UART5) \
\r
217 switch(__HAL_RCC_GET_UART5_SOURCE()) \
\r
219 case RCC_UART5CLKSOURCE_PCLK1: \
\r
220 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
\r
222 case RCC_UART5CLKSOURCE_HSI: \
\r
223 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
\r
225 case RCC_UART5CLKSOURCE_SYSCLK: \
\r
226 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
\r
228 case RCC_UART5CLKSOURCE_LSE: \
\r
229 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
\r
232 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
\r
236 else if((__HANDLE__)->Instance == USART6) \
\r
238 switch(__HAL_RCC_GET_USART6_SOURCE()) \
\r
240 case RCC_USART6CLKSOURCE_PCLK2: \
\r
241 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
\r
243 case RCC_USART6CLKSOURCE_HSI: \
\r
244 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
\r
246 case RCC_USART6CLKSOURCE_SYSCLK: \
\r
247 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
\r
249 case RCC_USART6CLKSOURCE_LSE: \
\r
250 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
\r
253 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
\r
257 else if ((__HANDLE__)->Instance == UART7) \
\r
259 switch(__HAL_RCC_GET_UART7_SOURCE()) \
\r
261 case RCC_UART7CLKSOURCE_PCLK1: \
\r
262 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
\r
264 case RCC_UART7CLKSOURCE_HSI: \
\r
265 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
\r
267 case RCC_UART7CLKSOURCE_SYSCLK: \
\r
268 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
\r
270 case RCC_UART7CLKSOURCE_LSE: \
\r
271 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
\r
274 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
\r
278 else if ((__HANDLE__)->Instance == UART8) \
\r
280 switch(__HAL_RCC_GET_UART8_SOURCE()) \
\r
282 case RCC_UART8CLKSOURCE_PCLK1: \
\r
283 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
\r
285 case RCC_UART8CLKSOURCE_HSI: \
\r
286 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
\r
288 case RCC_UART8CLKSOURCE_SYSCLK: \
\r
289 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
\r
291 case RCC_UART8CLKSOURCE_LSE: \
\r
292 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
\r
295 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
\r
301 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
\r
305 /** @brief Report the UART mask to apply to retrieve the received data
\r
306 * according to the word length and to the parity bits activation.
\r
307 * @note If PCE = 1, the parity bit is not included in the data extracted
\r
308 * by the reception API().
\r
309 * This masking operation is not carried out in the case of
\r
311 * @param __HANDLE__ specifies the UART Handle.
\r
312 * @retval None, the mask to apply to UART RDR register is stored in (__HANDLE__)->Mask field.
\r
314 #define UART_MASK_COMPUTATION(__HANDLE__) \
\r
316 if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
\r
318 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
\r
320 (__HANDLE__)->Mask = 0x01FFU ; \
\r
324 (__HANDLE__)->Mask = 0x00FFU ; \
\r
327 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
\r
329 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
\r
331 (__HANDLE__)->Mask = 0x00FFU ; \
\r
335 (__HANDLE__)->Mask = 0x007FU ; \
\r
338 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
\r
340 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
\r
342 (__HANDLE__)->Mask = 0x007FU ; \
\r
346 (__HANDLE__)->Mask = 0x003FU ; \
\r
351 (__HANDLE__)->Mask = 0x0000U; \
\r
356 * @brief Ensure that UART frame length is valid.
\r
357 * @param __LENGTH__ UART frame length.
\r
358 * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
\r
360 #define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_7B) || \
\r
361 ((__LENGTH__) == UART_WORDLENGTH_8B) || \
\r
362 ((__LENGTH__) == UART_WORDLENGTH_9B))
\r
365 * @brief Ensure that UART wake-up address length is valid.
\r
366 * @param __ADDRESS__ UART wake-up address length.
\r
367 * @retval SET (__ADDRESS__ is valid) or RESET (__ADDRESS__ is invalid)
\r
369 #define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \
\r
370 ((__ADDRESS__) == UART_ADDRESS_DETECT_7B))
\r
377 /* Private functions ---------------------------------------------------------*/
\r
391 #endif /* STM32F7xx_HAL_UART_EX_H */
\r
393 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
\r