]> git.friedersdorff.com Git - max/tmk_keyboard.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F1/stm32f1xx_hal_usart.h
Merge pull request #24 from marknsikora/master
[max/tmk_keyboard.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_STM / TARGET_STM32F1 / stm32f1xx_hal_usart.h
1 /**
2   ******************************************************************************
3   * @file    stm32f1xx_hal_usart.h
4   * @author  MCD Application Team
5   * @version V1.0.0
6   * @date    15-December-2014
7   * @brief   Header file of USART HAL 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 __STM32F1xx_HAL_USART_H
40 #define __STM32F1xx_HAL_USART_H
41
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32f1xx_hal_def.h"
48
49 /** @addtogroup STM32F1xx_HAL_Driver
50   * @{
51   */
52
53 /** @addtogroup USART
54   * @{
55   */ 
56
57 /* Exported types ------------------------------------------------------------*/ 
58 /** @defgroup USART_Exported_Types USART Exported Types
59   * @{
60   */ 
61
62
63 /** 
64   * @brief USART Init Structure definition
65   */ 
66 typedef struct
67 {
68   uint32_t BaudRate;                  /*!< This member configures the Usart communication baud rate.
69                                            The baud rate is computed using the following formula:
70                                            - IntegerDivider = ((PCLKx) / (16 * (husart->Init.BaudRate)))
71                                            - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
72
73   uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.
74                                            This parameter can be a value of @ref USART_Word_Length */
75
76   uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.
77                                            This parameter can be a value of @ref USART_Stop_Bits */
78
79   uint32_t Parity;                   /*!< Specifies the parity mode.
80                                            This parameter can be a value of @ref USART_Parity
81                                            @note When parity is enabled, the computed parity is inserted
82                                                  at the MSB position of the transmitted data (9th bit when
83                                                  the word length is set to 9 data bits; 8th bit when the
84                                                  word length is set to 8 data bits). */
85  
86   uint32_t Mode;                      /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.
87                                            This parameter can be a value of @ref USART_Mode */
88
89   uint32_t CLKPolarity;               /*!< Specifies the steady state of the serial clock.
90                                            This parameter can be a value of @ref USART_Clock_Polarity */
91
92   uint32_t CLKPhase;                  /*!< Specifies the clock transition on which the bit capture is made.
93                                            This parameter can be a value of @ref USART_Clock_Phase */
94
95   uint32_t CLKLastBit;                /*!< Specifies whether the clock pulse corresponding to the last transmitted
96                                            data bit (MSB) has to be output on the SCLK pin in synchronous mode.
97                                            This parameter can be a value of @ref USART_Last_Bit */
98 }USART_InitTypeDef;
99
100 /** 
101   * @brief HAL State structures definition
102   */ 
103 typedef enum
104 {
105   HAL_USART_STATE_RESET             = 0x00,    /*!< Peripheral is not initialized   */
106   HAL_USART_STATE_READY             = 0x01,    /*!< Peripheral Initialized and ready for use */
107   HAL_USART_STATE_BUSY              = 0x02,    /*!< an internal process is ongoing */   
108   HAL_USART_STATE_BUSY_TX           = 0x12,    /*!< Data Transmission process is ongoing */ 
109   HAL_USART_STATE_BUSY_RX           = 0x22,    /*!< Data Reception process is ongoing */
110   HAL_USART_STATE_BUSY_TX_RX        = 0x32,    /*!< Data Transmission Reception process is ongoing */
111   HAL_USART_STATE_TIMEOUT           = 0x03,    /*!< Timeout state */
112   HAL_USART_STATE_ERROR             = 0x04     /*!< Error */
113 }HAL_USART_StateTypeDef;
114
115
116 /** 
117   * @brief  USART handle Structure definition  
118   */  
119 typedef struct
120 {
121   USART_TypeDef                 *Instance;        /*!< USART registers base address        */
122   
123   USART_InitTypeDef              Init;            /*!< Usart communication parameters      */
124   
125   uint8_t                       *pTxBuffPtr;      /*!< Pointer to Usart Tx transfer Buffer */
126   
127   uint16_t                       TxXferSize;      /*!< Usart Tx Transfer size              */
128   
129   __IO uint16_t                  TxXferCount;     /*!< Usart Tx Transfer Counter           */
130   
131   uint8_t                       *pRxBuffPtr;      /*!< Pointer to Usart Rx transfer Buffer */
132   
133   uint16_t                       RxXferSize;      /*!< Usart Rx Transfer size              */
134  
135   __IO uint16_t                  RxXferCount;     /*!< Usart Rx Transfer Counter           */  
136   
137   DMA_HandleTypeDef             *hdmatx;          /*!< Usart Tx DMA Handle parameters      */
138     
139   DMA_HandleTypeDef             *hdmarx;          /*!< Usart Rx DMA Handle parameters      */
140   
141   HAL_LockTypeDef                Lock;            /*!< Locking object                      */
142   
143   __IO HAL_USART_StateTypeDef    State;           /*!< Usart communication state           */
144   
145   __IO uint32_t                  ErrorCode;       /*!< USART Error code                    */
146   
147 }USART_HandleTypeDef;
148
149 /**
150   * @}
151   */
152
153 /* Exported constants --------------------------------------------------------*/
154 /** @defgroup USART_Exported_Constants USART Exported constants
155   * @{
156   */
157
158 /** @defgroup USART_Error_Codes USART Error Codes
159   * @{
160   */
161 #define HAL_USART_ERROR_NONE      ((uint32_t)0x00)    /*!< No error            */
162 #define HAL_USART_ERROR_PE        ((uint32_t)0x01)    /*!< Parity error        */
163 #define HAL_USART_ERROR_NE        ((uint32_t)0x02)    /*!< Noise error         */
164 #define HAL_USART_ERROR_FE        ((uint32_t)0x04)    /*!< frame error         */
165 #define HAL_USART_ERROR_ORE       ((uint32_t)0x08)    /*!< Overrun error       */
166 #define HAL_USART_ERROR_DMA       ((uint32_t)0x10)     /*!< DMA transfer error  */
167 /**
168   * @}
169   */
170
171 /** @defgroup USART_Word_Length USART Word Length
172   * @{
173   */
174 #define USART_WORDLENGTH_8B             ((uint32_t)0x00000000)
175 #define USART_WORDLENGTH_9B             ((uint32_t)USART_CR1_M)
176 /**
177   * @}
178   */
179
180 /** @defgroup USART_Stop_Bits USART Number of Stop Bits
181   * @{
182   */
183 #define USART_STOPBITS_1                ((uint32_t)0x00000000)
184 #define USART_STOPBITS_0_5              ((uint32_t)USART_CR2_STOP_0)
185 #define USART_STOPBITS_2                ((uint32_t)USART_CR2_STOP_1)
186 #define USART_STOPBITS_1_5              ((uint32_t)(USART_CR2_STOP_0 | USART_CR2_STOP_1))
187 /**
188   * @}
189   */ 
190
191 /** @defgroup USART_Parity USART Parity
192   * @{
193   */ 
194 #define USART_PARITY_NONE               ((uint32_t)0x00000000)
195 #define USART_PARITY_EVEN               ((uint32_t)USART_CR1_PCE)
196 #define USART_PARITY_ODD                ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) 
197 /**
198   * @}
199   */ 
200
201 /** @defgroup USART_Mode USART Mode
202   * @{
203   */ 
204 #define USART_MODE_RX                   ((uint32_t)USART_CR1_RE)
205 #define USART_MODE_TX                   ((uint32_t)USART_CR1_TE)
206 #define USART_MODE_TX_RX                ((uint32_t)(USART_CR1_TE |USART_CR1_RE))
207
208 /**
209   * @}
210   */
211     
212 /** @defgroup USART_Clock USART Clock
213   * @{
214   */ 
215 #define USART_CLOCK_DISABLE             ((uint32_t)0x00000000)
216 #define USART_CLOCK_ENABLE              ((uint32_t)USART_CR2_CLKEN)
217 /**
218   * @}
219   */ 
220
221 /** @defgroup USART_Clock_Polarity USART Clock Polarity
222   * @{
223   */
224 #define USART_POLARITY_LOW              ((uint32_t)0x00000000)
225 #define USART_POLARITY_HIGH             ((uint32_t)USART_CR2_CPOL)
226 /**
227   * @}
228   */ 
229
230 /** @defgroup USART_Clock_Phase USART Clock Phase
231   * @{
232   */
233 #define USART_PHASE_1EDGE               ((uint32_t)0x00000000)
234 #define USART_PHASE_2EDGE               ((uint32_t)USART_CR2_CPHA)
235 /**
236   * @}
237   */
238
239 /** @defgroup USART_Last_Bit USART Last Bit
240   * @{
241   */
242 #define USART_LASTBIT_DISABLE           ((uint32_t)0x00000000)
243 #define USART_LASTBIT_ENABLE            ((uint32_t)USART_CR2_LBCL)
244 /**
245   * @}
246   */
247
248 /** @defgroup USART_NACK_State USART NACK State
249   * @{
250   */
251 #define USART_NACK_ENABLE               ((uint32_t)USART_CR3_NACK)
252 #define USART_NACK_DISABLE              ((uint32_t)0x00000000)
253 /**
254   * @}
255   */
256
257 /** @defgroup USART_Flags USART Flags
258   *        Elements values convention: 0xXXXX
259   *           - 0xXXXX  : Flag mask in the SR register
260   * @{
261   */
262
263 #define USART_FLAG_CTS                  ((uint32_t)USART_SR_CTS)
264 #define USART_FLAG_LBD                  ((uint32_t)USART_SR_LBD)
265 #define USART_FLAG_TXE                  ((uint32_t)USART_SR_TXE)
266 #define USART_FLAG_TC                   ((uint32_t)USART_SR_TC)
267 #define USART_FLAG_RXNE                 ((uint32_t)USART_SR_RXNE)
268 #define USART_FLAG_IDLE                 ((uint32_t)USART_SR_IDLE)
269 #define USART_FLAG_ORE                  ((uint32_t)USART_SR_ORE)
270 #define USART_FLAG_NE                   ((uint32_t)USART_SR_NE)
271 #define USART_FLAG_FE                   ((uint32_t)USART_SR_FE)
272 #define USART_FLAG_PE                   ((uint32_t)USART_SR_PE)
273 /**
274   * @}
275   */
276
277 /** @defgroup USART_Interrupt_definition USART Interrupts Definition
278   *        Elements values convention: 0xY000XXXX
279   *           - XXXX  : Interrupt mask (16 bits) in the Y register
280   *           - Y  : Interrupt source register (4bits)
281   *                 - 0001: CR1 register
282   *                 - 0010: CR2 register
283   *                 - 0011: CR3 register
284   *
285   * @{
286   */
287
288 #define USART_IT_PE                     ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_PEIE))
289 #define USART_IT_TXE                    ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_TXEIE))
290 #define USART_IT_TC                     ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_TCIE))
291 #define USART_IT_RXNE                   ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_RXNEIE))
292 #define USART_IT_IDLE                   ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_IDLEIE))
293
294 #define USART_IT_LBD                    ((uint32_t)(USART_CR2_REG_INDEX << 28 | USART_CR2_LBDIE))
295
296 #define USART_IT_CTS                    ((uint32_t)(USART_CR3_REG_INDEX << 28 | USART_CR3_CTSIE))
297 #define USART_IT_ERR                    ((uint32_t)(USART_CR3_REG_INDEX << 28 | USART_CR3_EIE))
298
299
300 /**
301   * @}
302   */
303
304 /**
305   * @}
306   */
307
308     
309 /* Exported macro ------------------------------------------------------------*/
310 /** @defgroup USART_Exported_Macros USART Exported Macros
311   * @{
312   */
313
314
315 /** @brief Reset USART handle state
316   * @param  __HANDLE__: specifies the USART Handle.
317   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
318   * @retval None
319   */
320 #define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_USART_STATE_RESET)
321
322 /** @brief  Check whether the specified USART flag is set or not.
323   * @param  __HANDLE__: specifies the USART Handle.
324   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
325   * @param  __FLAG__: specifies the flag to check.
326   *        This parameter can be one of the following values:
327   *            @arg USART_FLAG_TXE:  Transmit data register empty flag
328   *            @arg USART_FLAG_TC:   Transmission Complete flag
329   *            @arg USART_FLAG_RXNE: Receive data register not empty flag
330   *            @arg USART_FLAG_IDLE: Idle Line detection flag
331   *            @arg USART_FLAG_ORE:  OverRun Error flag
332   *            @arg USART_FLAG_NE:   Noise Error flag
333   *            @arg USART_FLAG_FE:   Framing Error flag
334   *            @arg USART_FLAG_PE:   Parity Error flag
335   * @retval The new state of __FLAG__ (TRUE or FALSE).
336   */
337
338 #define __HAL_USART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
339
340 /** @brief  Clear the specified USART pending flags.
341   * @param  __HANDLE__: specifies the USART Handle.
342   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
343   * @param  __FLAG__: specifies the flag to check.
344   *          This parameter can be any combination of the following values:
345   *            @arg USART_FLAG_TC:   Transmission Complete flag.
346   *            @arg USART_FLAG_RXNE: Receive data register not empty flag.
347   *   
348   * @note   PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun 
349   *          error) and IDLE (Idle line detected) flags are cleared by software 
350   *          sequence: a read operation to USART_SR register followed by a read
351   *          operation to USART_DR register.
352   * @note   RXNE flag can be also cleared by a read to the USART_DR register.
353   * @note   TC flag can be also cleared by software sequence: a read operation to 
354   *          USART_SR register followed by a write operation to USART_DR register.
355   * @note   TXE flag is cleared only by a write to the USART_DR register.
356   *   
357   * @retval None
358   */
359 #define __HAL_USART_CLEAR_FLAG(__HANDLE__, __FLAG__)  ((__HANDLE__)->Instance->SR = ~(__FLAG__))
360
361 /** @brief  Clear the USART PE pending flag.
362   * @param  __HANDLE__: specifies the USART Handle.
363   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
364   * @retval None
365   */
366 #define __HAL_USART_CLEAR_PEFLAG(__HANDLE__) \
367 do{                                          \
368   __IO uint32_t tmpreg;                      \
369   tmpreg = (__HANDLE__)->Instance->SR;       \
370   tmpreg = (__HANDLE__)->Instance->DR;       \
371   UNUSED(tmpreg);                            \
372 }while(0)
373
374
375 /** @brief  Clear the USART FE pending flag.
376   * @param  __HANDLE__: specifies the USART Handle.
377   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
378   * @retval None
379   */
380 #define __HAL_USART_CLEAR_FEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
381
382 /** @brief  Clear the USART NE pending flag.
383   * @param  __HANDLE__: specifies the USART Handle.
384   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
385   * @retval None
386   */
387 #define __HAL_USART_CLEAR_NEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
388
389 /** @brief  Clear the USART ORE pending flag.
390   * @param  __HANDLE__: specifies the USART Handle.
391   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
392   * @retval None
393   */
394 #define __HAL_USART_CLEAR_OREFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
395
396 /** @brief  Clear the USART IDLE pending flag.
397   * @param  __HANDLE__: specifies the USART Handle.
398   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
399   * @retval None
400   */
401 #define __HAL_USART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
402
403 /** @brief  Enable the specified Usart interrupts.
404   * @param  __HANDLE__: specifies the USART Handle.
405   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
406   * @param  __INTERRUPT__: specifies the USART interrupt source to enable.
407   *          This parameter can be one of the following values:
408   *            @arg USART_IT_TXE:  Transmit Data Register empty interrupt
409   *            @arg USART_IT_TC:   Transmission complete interrupt
410   *            @arg USART_IT_RXNE: Receive Data register not empty interrupt
411   *            @arg USART_IT_IDLE: Idle line detection interrupt
412   *            @arg USART_IT_PE:   Parity Error interrupt
413   *            @arg USART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
414   * @retval None
415   */
416 #define __HAL_USART_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((((__INTERRUPT__) >> 28) == USART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & USART_IT_MASK)): \
417                                                             (((__INTERRUPT__) >> 28) == USART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |=  ((__INTERRUPT__) & USART_IT_MASK)): \
418                                                             ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & USART_IT_MASK)))
419
420
421 /** @brief  Disable the specified Usart interrupts.
422   * @param  __HANDLE__: specifies the USART Handle.
423   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
424   * @param  __INTERRUPT__: specifies the USART interrupt source to disable.
425   *          This parameter can be one of the following values:
426   *            @arg USART_IT_TXE:  Transmit Data Register empty interrupt
427   *            @arg USART_IT_TC:   Transmission complete interrupt
428   *            @arg USART_IT_RXNE: Receive Data register not empty interrupt
429   *            @arg USART_IT_IDLE: Idle line detection interrupt
430   *            @arg USART_IT_PE:   Parity Error interrupt
431   *            @arg USART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
432   * @retval None
433   */
434 #define __HAL_USART_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((((__INTERRUPT__) >> 28) == USART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & USART_IT_MASK)): \
435                                                             (((__INTERRUPT__) >> 28) == USART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & USART_IT_MASK)): \
436                                                             ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & USART_IT_MASK)))
437
438
439     
440 /** @brief  Check whether the specified Usart interrupt has occurred or not.
441   * @param  __HANDLE__: specifies the USART Handle.
442   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
443   * @param  __IT__: specifies the USART interrupt source to check.
444   *          This parameter can be one of the following values:
445   *            @arg USART_IT_TXE: Transmit Data Register empty interrupt
446   *            @arg USART_IT_TC:  Transmission complete interrupt
447   *            @arg USART_IT_RXNE: Receive Data register not empty interrupt
448   *            @arg USART_IT_IDLE: Idle line detection interrupt
449   *            @arg USART_IT_ERR: Error interrupt
450   *            @arg USART_IT_PE: Parity Error interrupt
451   * @retval The new state of __IT__ (TRUE or FALSE).
452   */
453 #define __HAL_USART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28) == USART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28) == USART_CR2_REG_INDEX)? \
454                                                       (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & USART_IT_MASK))
455
456 /** @brief  Enable USART
457   * @param  __HANDLE__: specifies the USART Handle.
458   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
459   * @retval None
460   */ 
461 #define __HAL_USART_ENABLE(__HANDLE__)               SET_BIT((__HANDLE__)->Instance->CR1,(USART_CR1_UE)) 
462
463 /** @brief  Disable USART
464   * @param  __HANDLE__: specifies the USART Handle.
465   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
466   * @retval None
467   */ 
468 #define __HAL_USART_DISABLE(__HANDLE__)              CLEAR_BIT((__HANDLE__)->Instance->CR1,(USART_CR1_UE)) 
469  
470
471 /**
472   * @}
473   */
474
475
476 /* Private macros --------------------------------------------------------*/
477 /** @defgroup USART_Private_Macros   USART Private Macros
478   * @{
479   */
480
481 #define USART_CR1_REG_INDEX             1    
482 #define USART_CR2_REG_INDEX             2    
483 #define USART_CR3_REG_INDEX             3    
484
485 #define USART_DIV(__PCLK__, __BAUD__)                (((__PCLK__)*25)/(4*(__BAUD__)))
486 #define USART_DIVMANT(__PCLK__, __BAUD__)            (USART_DIV((__PCLK__), (__BAUD__))/100)
487 #define USART_DIVFRAQ(__PCLK__, __BAUD__)            (((USART_DIV((__PCLK__), (__BAUD__)) - (USART_DIVMANT((__PCLK__), (__BAUD__)) * 100)) * 16 + 50) / 100)
488 #define USART_BRR(__PCLK__, __BAUD__)                ((USART_DIVMANT((__PCLK__), (__BAUD__)) << 4)|(USART_DIVFRAQ((__PCLK__), (__BAUD__)) & 0x0F))
489
490 /** Check USART Baud rate
491   *      __BAUDRATE__: Baudrate specified by the user
492   *                    The maximum Baud Rate is derived from the maximum clock on APB (i.e. 72 MHz) 
493   *                    divided by the smallest oversampling used on the USART (i.e. 16) 
494   * return : TRUE or FALSE
495   */ 
496 #define IS_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 4500001)
497
498 #define IS_USART_WORD_LENGTH(LENGTH)    (((LENGTH) == USART_WORDLENGTH_8B) || \
499                                          ((LENGTH) == USART_WORDLENGTH_9B))
500
501 #define IS_USART_STOPBITS(STOPBITS)     (((STOPBITS) == USART_STOPBITS_1) || \
502                                          ((STOPBITS) == USART_STOPBITS_0_5) || \
503                                          ((STOPBITS) == USART_STOPBITS_1_5) || \
504                                          ((STOPBITS) == USART_STOPBITS_2))
505
506 #define IS_USART_PARITY(PARITY)         (((PARITY) == USART_PARITY_NONE) || \
507                                          ((PARITY) == USART_PARITY_EVEN) || \
508                                          ((PARITY) == USART_PARITY_ODD))
509
510 #define IS_USART_MODE(MODE)             ((((MODE) & (~((uint32_t)USART_MODE_TX_RX))) == 0x00) && ((MODE) != (uint32_t)0x00000000))
511
512 #define IS_USART_CLOCK(CLOCK)           (((CLOCK) == USART_CLOCK_DISABLE) || \
513                                          ((CLOCK) == USART_CLOCK_ENABLE))
514
515 #define IS_USART_POLARITY(CPOL)         (((CPOL) == USART_POLARITY_LOW) || ((CPOL) == USART_POLARITY_HIGH))
516
517 #define IS_USART_PHASE(CPHA)            (((CPHA) == USART_PHASE_1EDGE) || ((CPHA) == USART_PHASE_2EDGE))
518
519 #define IS_USART_LASTBIT(LASTBIT)       (((LASTBIT) == USART_LASTBIT_DISABLE) || \
520                                          ((LASTBIT) == USART_LASTBIT_ENABLE))
521
522 #define IS_USART_NACK_STATE(NACK)       (((NACK) == USART_NACK_ENABLE) || \
523                                          ((NACK) == USART_NACK_DISABLE))
524
525 /** USART interruptions flag mask
526   * 
527   */ 
528 #define USART_IT_MASK  ((uint32_t) USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE | USART_CR1_RXNEIE | \
529                                    USART_CR1_IDLEIE | USART_CR2_LBDIE | USART_CR3_CTSIE | USART_CR3_EIE )
530
531 /**
532   * @}
533   */
534
535
536 /* Exported functions --------------------------------------------------------*/
537
538 /** @addtogroup USART_Exported_Functions USART Exported Functions
539   * @{
540   */
541   
542 /** @addtogroup USART_Exported_Functions_Group1 Initialization and de-initialization functions 
543   * @{
544   */
545
546 /* Initialization and de-initialization functions  ******************************/
547 HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart);
548 HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart);
549 void HAL_USART_MspInit(USART_HandleTypeDef *husart);
550 void HAL_USART_MspDeInit(USART_HandleTypeDef *husart);
551
552 /**
553   * @}
554   */
555
556 /** @addtogroup USART_Exported_Functions_Group2 IO operation functions 
557   * @{
558   */
559
560 /* IO operation functions *******************************************************/
561 HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size, uint32_t Timeout);
562 HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
563 HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
564 HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
565 HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
566 HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData,  uint16_t Size);
567 HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
568 HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
569 HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
570 HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart);
571 HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart);
572 HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart);
573 void HAL_USART_IRQHandler(USART_HandleTypeDef *husart);
574 void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart);
575 void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart);
576 void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart);
577 void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart);
578 void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart);
579 void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart);
580
581 /**
582   * @}
583   */
584
585 /* Peripheral Control functions ***********************************************/
586
587 /** @addtogroup USART_Exported_Functions_Group3 Peripheral State and Errors functions 
588   * @{
589   */
590
591 /* Peripheral State and Error functions ***************************************/
592 HAL_USART_StateTypeDef HAL_USART_GetState(USART_HandleTypeDef *husart);
593 uint32_t               HAL_USART_GetError(USART_HandleTypeDef *husart);
594
595 /**
596   * @}
597   */
598
599 /**
600   * @}
601   */
602
603 /**
604   * @}
605   */ 
606
607 /**
608   * @}
609   */
610
611 #ifdef __cplusplus
612 }
613 #endif
614
615 #endif /* __STM32F1xx_HAL_USART_H */
616
617 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/