2 ******************************************************************************
3 * @file stm32f3xx_hal_uart_ex.h
4 * @author MCD Application Team
7 * @brief Header file of UART HAL Extended module.
8 ******************************************************************************
11 * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
13 * Redistribution and use in source and binary forms, with or without modification,
14 * are permitted provided that the following conditions are met:
15 * 1. Redistributions of source code must retain the above copyright notice,
16 * this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright notice,
18 * this list of conditions and the following disclaimer in the documentation
19 * and/or other materials provided with the distribution.
20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 ******************************************************************************
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F3xx_HAL_UART_EX_H
40 #define __STM32F3xx_HAL_UART_EX_H
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32f3xx_hal_def.h"
49 /** @addtogroup STM32F3xx_HAL_Driver
53 /** @addtogroup UARTEx
57 /* Exported types ------------------------------------------------------------*/
58 /* Exported constants --------------------------------------------------------*/
59 /** @defgroup UARTEx_Exported_Constants UART Extented Exported Constants
63 /** @defgroup UARTEx_Word_Length UART Extended Word Length
66 #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) || \
67 defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) || \
68 defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
69 #define UART_WORDLENGTH_7B ((uint32_t)USART_CR1_M1)
70 #define UART_WORDLENGTH_8B ((uint32_t)0x00000000)
71 #define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M0)
72 #define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_7B) || \
73 ((LENGTH) == UART_WORDLENGTH_8B) || \
74 ((LENGTH) == UART_WORDLENGTH_9B))
76 #define UART_WORDLENGTH_8B ((uint32_t)0x00000000)
77 #define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M)
78 #define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \
79 ((LENGTH) == UART_WORDLENGTH_9B))
80 #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
81 /* STM32F303x8 || STM32F334x8 || STM32F328xx || */
82 /* STM32F301x8 || STM32F302x8 || STM32F318xx */
88 /** @defgroup UART_WakeUp_Address_Length UART WakeUp Address Length
91 #define UART_ADDRESS_DETECT_4B ((uint32_t)0x00000000)
92 #define UART_ADDRESS_DETECT_7B ((uint32_t)USART_CR2_ADDM7)
93 #define IS_UART_ADDRESSLENGTH_DETECT(ADDRESS) (((ADDRESS) == UART_ADDRESS_DETECT_4B) || \
94 ((ADDRESS) == UART_ADDRESS_DETECT_7B))
104 /* Exported macro ------------------------------------------------------------*/
106 /** @defgroup UARTEx_Exported_Macros UART Extended Exported Macros
110 /** @brief Reports the UART clock source.
111 * @param __HANDLE__: specifies the UART Handle
112 * @param __CLOCKSOURCE__ : output variable
113 * @retval UART clocking source, written in __CLOCKSOURCE__.
115 #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) || \
116 defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)
117 #define __HAL_UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
119 if((__HANDLE__)->Instance == USART1) \
121 switch(__HAL_RCC_GET_USART1_SOURCE()) \
123 case RCC_USART1CLKSOURCE_PCLK2: \
124 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
126 case RCC_USART1CLKSOURCE_HSI: \
127 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
129 case RCC_USART1CLKSOURCE_SYSCLK: \
130 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
132 case RCC_USART1CLKSOURCE_LSE: \
133 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
137 else if((__HANDLE__)->Instance == USART2) \
139 switch(__HAL_RCC_GET_USART2_SOURCE()) \
141 case RCC_USART2CLKSOURCE_PCLK1: \
142 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
144 case RCC_USART2CLKSOURCE_HSI: \
145 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
147 case RCC_USART2CLKSOURCE_SYSCLK: \
148 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
150 case RCC_USART2CLKSOURCE_LSE: \
151 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
155 else if((__HANDLE__)->Instance == USART3) \
157 switch(__HAL_RCC_GET_USART3_SOURCE()) \
159 case RCC_USART3CLKSOURCE_PCLK1: \
160 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
162 case RCC_USART3CLKSOURCE_HSI: \
163 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
165 case RCC_USART3CLKSOURCE_SYSCLK: \
166 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
168 case RCC_USART3CLKSOURCE_LSE: \
169 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
173 else if((__HANDLE__)->Instance == UART4) \
175 switch(__HAL_RCC_GET_UART4_SOURCE()) \
177 case RCC_UART4CLKSOURCE_PCLK1: \
178 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
180 case RCC_UART4CLKSOURCE_HSI: \
181 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
183 case RCC_UART4CLKSOURCE_SYSCLK: \
184 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
186 case RCC_UART4CLKSOURCE_LSE: \
187 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
191 else if ((__HANDLE__)->Instance == UART5) \
193 switch(__HAL_RCC_GET_UART5_SOURCE()) \
195 case RCC_UART5CLKSOURCE_PCLK1: \
196 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
198 case RCC_UART5CLKSOURCE_HSI: \
199 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
201 case RCC_UART5CLKSOURCE_SYSCLK: \
202 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
204 case RCC_UART5CLKSOURCE_LSE: \
205 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
210 #elif defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)
211 #define __HAL_UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
213 if((__HANDLE__)->Instance == USART1) \
215 switch(__HAL_RCC_GET_USART1_SOURCE()) \
217 case RCC_USART1CLKSOURCE_PCLK1: \
218 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
220 case RCC_USART1CLKSOURCE_HSI: \
221 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
223 case RCC_USART1CLKSOURCE_SYSCLK: \
224 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
226 case RCC_USART1CLKSOURCE_LSE: \
227 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
231 else if((__HANDLE__)->Instance == USART2) \
233 switch(__HAL_RCC_GET_USART2_SOURCE()) \
235 case RCC_USART2CLKSOURCE_PCLK1: \
236 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
238 case RCC_USART2CLKSOURCE_HSI: \
239 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
241 case RCC_USART2CLKSOURCE_SYSCLK: \
242 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
244 case RCC_USART2CLKSOURCE_LSE: \
245 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
249 else if((__HANDLE__)->Instance == USART3) \
251 switch(__HAL_RCC_GET_USART3_SOURCE()) \
253 case RCC_USART3CLKSOURCE_PCLK1: \
254 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
256 case RCC_USART3CLKSOURCE_HSI: \
257 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
259 case RCC_USART3CLKSOURCE_SYSCLK: \
260 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
262 case RCC_USART3CLKSOURCE_LSE: \
263 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
269 #define __HAL_UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
271 if((__HANDLE__)->Instance == USART1) \
273 switch(__HAL_RCC_GET_USART1_SOURCE()) \
275 case RCC_USART1CLKSOURCE_PCLK2: \
276 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
278 case RCC_USART1CLKSOURCE_HSI: \
279 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
281 case RCC_USART1CLKSOURCE_SYSCLK: \
282 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
284 case RCC_USART1CLKSOURCE_LSE: \
285 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
289 else if((__HANDLE__)->Instance == USART2) \
291 switch(__HAL_RCC_GET_USART2_SOURCE()) \
293 case RCC_USART2CLKSOURCE_PCLK1: \
294 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
296 case RCC_USART2CLKSOURCE_HSI: \
297 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
299 case RCC_USART2CLKSOURCE_SYSCLK: \
300 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
302 case RCC_USART2CLKSOURCE_LSE: \
303 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
307 else if((__HANDLE__)->Instance == USART3) \
309 switch(__HAL_RCC_GET_USART3_SOURCE()) \
311 case RCC_USART3CLKSOURCE_PCLK1: \
312 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
314 case RCC_USART3CLKSOURCE_HSI: \
315 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
317 case RCC_USART3CLKSOURCE_SYSCLK: \
318 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
320 case RCC_USART3CLKSOURCE_LSE: \
321 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
326 #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
327 /* STM32F302xC || STM32F303xC || STM32F358xx */
330 /** @brief Computes the UART mask to apply to retrieve the received data
331 * according to the word length and to the parity bits activation.
332 * If PCE = 1, the parity bit is not included in the data extracted
333 * by the reception API().
334 * This masking operation is not carried out in the case of
336 * @param __HANDLE__: specifies the UART Handle
339 #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) || \
340 defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) || \
341 defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
342 #define __HAL_UART_MASK_COMPUTATION(__HANDLE__) \
344 if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
346 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
348 (__HANDLE__)->Mask = 0x01FF ; \
352 (__HANDLE__)->Mask = 0x00FF ; \
355 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
357 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
359 (__HANDLE__)->Mask = 0x00FF ; \
363 (__HANDLE__)->Mask = 0x007F ; \
366 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
368 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
370 (__HANDLE__)->Mask = 0x007F ; \
374 (__HANDLE__)->Mask = 0x003F ; \
379 #define __HAL_UART_MASK_COMPUTATION(__HANDLE__) \
381 if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
383 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
385 (__HANDLE__)->Mask = 0x01FF ; \
389 (__HANDLE__)->Mask = 0x00FF ; \
392 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
394 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
396 (__HANDLE__)->Mask = 0x00FF ; \
400 (__HANDLE__)->Mask = 0x007F ; \
404 #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
405 /* STM32F303x8 || STM32F334x8 || STM32F328xx || */
406 /* STM32F301x8 || STM32F302x8 || STM32F318xx */
411 /* Exported functions --------------------------------------------------------*/
412 /** @defgroup UARTEx_Exported_Functions UART Extended Exported Functions
416 /** @defgroup UARTEx_Exported_Functions_Group1 Extended Initialization and de-initialization functions
417 * @brief Extended Initialization and Configuration Functions
420 /* Initialization and de-initialization functions ****************************/
421 HAL_StatusTypeDef
HAL_RS485Ex_Init(UART_HandleTypeDef
*huart
, uint32_t UART_DEPolarity
, uint32_t UART_DEAssertionTime
, uint32_t UART_DEDeassertionTime
);
426 /** @defgroup UARTEx_Exported_Functions_Group2 Extended Peripheral Control functions
427 * @brief Extended Peripheral Control functions
430 /* Peripheral Control functions ***********************************************/
431 HAL_StatusTypeDef
HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef
*huart
, UART_WakeUpTypeDef WakeUpSelection
);
432 HAL_StatusTypeDef
HAL_UARTEx_EnableStopMode(UART_HandleTypeDef
*huart
);
433 HAL_StatusTypeDef
HAL_UARTEx_DisableStopMode(UART_HandleTypeDef
*huart
);
434 HAL_StatusTypeDef
HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef
*huart
, uint32_t AddressLength
);
456 #endif /* __STM32F3xx_HAL_UART_EX_H */
458 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/