]> git.gir.st - tmk_keyboard.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F3/stm32f3xx_hal_uart_ex.h
Merge commit '1fe4406f374291ab2e86e95a97341fd9c475fcb8'
[tmk_keyboard.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_STM / TARGET_STM32F3 / stm32f3xx_hal_uart_ex.h
1 /**
2 ******************************************************************************
3 * @file stm32f3xx_hal_uart_ex.h
4 * @author MCD Application Team
5 * @version V1.1.0
6 * @date 12-Sept-2014
7 * @brief Header file of UART HAL Extended module.
8 ******************************************************************************
9 * @attention
10 *
11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
12 *
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.
23 *
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.
34 *
35 ******************************************************************************
36 */
37
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F3xx_HAL_UART_EX_H
40 #define __STM32F3xx_HAL_UART_EX_H
41
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32f3xx_hal_def.h"
48
49 /** @addtogroup STM32F3xx_HAL_Driver
50 * @{
51 */
52
53 /** @addtogroup UARTEx
54 * @{
55 */
56
57 /* Exported types ------------------------------------------------------------*/
58 /* Exported constants --------------------------------------------------------*/
59 /** @defgroup UARTEx_Exported_Constants UART Extented Exported Constants
60 * @{
61 */
62
63 /** @defgroup UARTEx_Word_Length UART Extended Word Length
64 * @{
65 */
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))
75 #else
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 */
83 /**
84 * @}
85 */
86
87
88 /** @defgroup UART_WakeUp_Address_Length UART WakeUp Address Length
89 * @{
90 */
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))
95 /**
96 * @}
97 */
98
99
100 /**
101 * @}
102 */
103
104 /* Exported macro ------------------------------------------------------------*/
105
106 /** @defgroup UARTEx_Exported_Macros UART Extended Exported Macros
107 * @{
108 */
109
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__.
114 */
115 #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) || \
116 defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)
117 #define __HAL_UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
118 do { \
119 if((__HANDLE__)->Instance == USART1) \
120 { \
121 switch(__HAL_RCC_GET_USART1_SOURCE()) \
122 { \
123 case RCC_USART1CLKSOURCE_PCLK2: \
124 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
125 break; \
126 case RCC_USART1CLKSOURCE_HSI: \
127 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
128 break; \
129 case RCC_USART1CLKSOURCE_SYSCLK: \
130 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
131 break; \
132 case RCC_USART1CLKSOURCE_LSE: \
133 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
134 break; \
135 } \
136 } \
137 else if((__HANDLE__)->Instance == USART2) \
138 { \
139 switch(__HAL_RCC_GET_USART2_SOURCE()) \
140 { \
141 case RCC_USART2CLKSOURCE_PCLK1: \
142 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
143 break; \
144 case RCC_USART2CLKSOURCE_HSI: \
145 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
146 break; \
147 case RCC_USART2CLKSOURCE_SYSCLK: \
148 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
149 break; \
150 case RCC_USART2CLKSOURCE_LSE: \
151 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
152 break; \
153 } \
154 } \
155 else if((__HANDLE__)->Instance == USART3) \
156 { \
157 switch(__HAL_RCC_GET_USART3_SOURCE()) \
158 { \
159 case RCC_USART3CLKSOURCE_PCLK1: \
160 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
161 break; \
162 case RCC_USART3CLKSOURCE_HSI: \
163 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
164 break; \
165 case RCC_USART3CLKSOURCE_SYSCLK: \
166 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
167 break; \
168 case RCC_USART3CLKSOURCE_LSE: \
169 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
170 break; \
171 } \
172 } \
173 else if((__HANDLE__)->Instance == UART4) \
174 { \
175 switch(__HAL_RCC_GET_UART4_SOURCE()) \
176 { \
177 case RCC_UART4CLKSOURCE_PCLK1: \
178 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
179 break; \
180 case RCC_UART4CLKSOURCE_HSI: \
181 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
182 break; \
183 case RCC_UART4CLKSOURCE_SYSCLK: \
184 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
185 break; \
186 case RCC_UART4CLKSOURCE_LSE: \
187 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
188 break; \
189 } \
190 } \
191 else if ((__HANDLE__)->Instance == UART5) \
192 { \
193 switch(__HAL_RCC_GET_UART5_SOURCE()) \
194 { \
195 case RCC_UART5CLKSOURCE_PCLK1: \
196 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
197 break; \
198 case RCC_UART5CLKSOURCE_HSI: \
199 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
200 break; \
201 case RCC_UART5CLKSOURCE_SYSCLK: \
202 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
203 break; \
204 case RCC_UART5CLKSOURCE_LSE: \
205 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
206 break; \
207 } \
208 } \
209 } while(0)
210 #elif defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)
211 #define __HAL_UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
212 do { \
213 if((__HANDLE__)->Instance == USART1) \
214 { \
215 switch(__HAL_RCC_GET_USART1_SOURCE()) \
216 { \
217 case RCC_USART1CLKSOURCE_PCLK1: \
218 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
219 break; \
220 case RCC_USART1CLKSOURCE_HSI: \
221 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
222 break; \
223 case RCC_USART1CLKSOURCE_SYSCLK: \
224 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
225 break; \
226 case RCC_USART1CLKSOURCE_LSE: \
227 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
228 break; \
229 } \
230 } \
231 else if((__HANDLE__)->Instance == USART2) \
232 { \
233 switch(__HAL_RCC_GET_USART2_SOURCE()) \
234 { \
235 case RCC_USART2CLKSOURCE_PCLK1: \
236 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
237 break; \
238 case RCC_USART2CLKSOURCE_HSI: \
239 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
240 break; \
241 case RCC_USART2CLKSOURCE_SYSCLK: \
242 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
243 break; \
244 case RCC_USART2CLKSOURCE_LSE: \
245 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
246 break; \
247 } \
248 } \
249 else if((__HANDLE__)->Instance == USART3) \
250 { \
251 switch(__HAL_RCC_GET_USART3_SOURCE()) \
252 { \
253 case RCC_USART3CLKSOURCE_PCLK1: \
254 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
255 break; \
256 case RCC_USART3CLKSOURCE_HSI: \
257 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
258 break; \
259 case RCC_USART3CLKSOURCE_SYSCLK: \
260 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
261 break; \
262 case RCC_USART3CLKSOURCE_LSE: \
263 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
264 break; \
265 } \
266 } \
267 } while(0)
268 #else
269 #define __HAL_UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
270 do { \
271 if((__HANDLE__)->Instance == USART1) \
272 { \
273 switch(__HAL_RCC_GET_USART1_SOURCE()) \
274 { \
275 case RCC_USART1CLKSOURCE_PCLK2: \
276 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
277 break; \
278 case RCC_USART1CLKSOURCE_HSI: \
279 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
280 break; \
281 case RCC_USART1CLKSOURCE_SYSCLK: \
282 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
283 break; \
284 case RCC_USART1CLKSOURCE_LSE: \
285 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
286 break; \
287 } \
288 } \
289 else if((__HANDLE__)->Instance == USART2) \
290 { \
291 switch(__HAL_RCC_GET_USART2_SOURCE()) \
292 { \
293 case RCC_USART2CLKSOURCE_PCLK1: \
294 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
295 break; \
296 case RCC_USART2CLKSOURCE_HSI: \
297 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
298 break; \
299 case RCC_USART2CLKSOURCE_SYSCLK: \
300 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
301 break; \
302 case RCC_USART2CLKSOURCE_LSE: \
303 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
304 break; \
305 } \
306 } \
307 else if((__HANDLE__)->Instance == USART3) \
308 { \
309 switch(__HAL_RCC_GET_USART3_SOURCE()) \
310 { \
311 case RCC_USART3CLKSOURCE_PCLK1: \
312 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
313 break; \
314 case RCC_USART3CLKSOURCE_HSI: \
315 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
316 break; \
317 case RCC_USART3CLKSOURCE_SYSCLK: \
318 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
319 break; \
320 case RCC_USART3CLKSOURCE_LSE: \
321 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
322 break; \
323 } \
324 } \
325 } while(0)
326 #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
327 /* STM32F302xC || STM32F303xC || STM32F358xx */
328
329
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
335 * DMA transfers.
336 * @param __HANDLE__: specifies the UART Handle
337 * @retval none
338 */
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__) \
343 do { \
344 if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
345 { \
346 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
347 { \
348 (__HANDLE__)->Mask = 0x01FF ; \
349 } \
350 else \
351 { \
352 (__HANDLE__)->Mask = 0x00FF ; \
353 } \
354 } \
355 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
356 { \
357 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
358 { \
359 (__HANDLE__)->Mask = 0x00FF ; \
360 } \
361 else \
362 { \
363 (__HANDLE__)->Mask = 0x007F ; \
364 } \
365 } \
366 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
367 { \
368 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
369 { \
370 (__HANDLE__)->Mask = 0x007F ; \
371 } \
372 else \
373 { \
374 (__HANDLE__)->Mask = 0x003F ; \
375 } \
376 } \
377 } while(0)
378 #else
379 #define __HAL_UART_MASK_COMPUTATION(__HANDLE__) \
380 do { \
381 if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
382 { \
383 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
384 { \
385 (__HANDLE__)->Mask = 0x01FF ; \
386 } \
387 else \
388 { \
389 (__HANDLE__)->Mask = 0x00FF ; \
390 } \
391 } \
392 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
393 { \
394 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
395 { \
396 (__HANDLE__)->Mask = 0x00FF ; \
397 } \
398 else \
399 { \
400 (__HANDLE__)->Mask = 0x007F ; \
401 } \
402 } \
403 } while(0)
404 #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
405 /* STM32F303x8 || STM32F334x8 || STM32F328xx || */
406 /* STM32F301x8 || STM32F302x8 || STM32F318xx */
407 /**
408 * @}
409 */
410
411 /* Exported functions --------------------------------------------------------*/
412 /** @defgroup UARTEx_Exported_Functions UART Extended Exported Functions
413 * @{
414 */
415
416 /** @defgroup UARTEx_Exported_Functions_Group1 Extended Initialization and de-initialization functions
417 * @brief Extended Initialization and Configuration Functions
418 * @{
419 */
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);
422 /**
423 * @}
424 */
425
426 /** @defgroup UARTEx_Exported_Functions_Group2 Extended Peripheral Control functions
427 * @brief Extended Peripheral Control functions
428 * @{
429 */
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);
435 /**
436 * @}
437 */
438
439 /**
440 * @}
441 */
442
443
444 /**
445 * @}
446 */
447
448 /**
449 * @}
450 */
451
452 #ifdef __cplusplus
453 }
454 #endif
455
456 #endif /* __STM32F3xx_HAL_UART_EX_H */
457
458 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Imprint / Impressum