]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F3/stm32f3xx_hal_uart_ex.h
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / 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****/