Merge pull request #93 from zyp/master
[fw/stlink] / example / libs_stm / inc / stm32l1xx / stm32l1xx_usart.h
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32l1xx_usart.h\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0\r
6   * @date    31-December-2010\r
7   * @brief   This file contains all the functions prototypes for the USART \r
8   *          firmware library.\r
9   ******************************************************************************\r
10   * @attention\r
11   *\r
12   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
13   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
14   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
15   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
16   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
17   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
18   *\r
19   * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
20   ******************************************************************************  \r
21   */ \r
22 \r
23 /* Define to prevent recursive inclusion -------------------------------------*/\r
24 #ifndef __STM32L1xx_USART_H\r
25 #define __STM32L1xx_USART_H\r
26 \r
27 #ifdef __cplusplus\r
28  extern "C" {\r
29 #endif\r
30 \r
31 /* Includes ------------------------------------------------------------------*/\r
32 #include "stm32l1xx.h"\r
33 \r
34 /** @addtogroup STM32L1xx_StdPeriph_Driver\r
35   * @{\r
36   */\r
37 \r
38 /** @addtogroup USART\r
39   * @{\r
40   */ \r
41 \r
42 /* Exported types ------------------------------------------------------------*/ \r
43 \r
44 /** \r
45   * @brief  USART Init Structure definition  \r
46   */ \r
47   \r
48 typedef struct\r
49 {\r
50   uint32_t USART_BaudRate;            /*!< This member configures the USART communication baud rate.\r
51                                            The baud rate is computed using the following formula:\r
52                                             - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate)))\r
53                                             - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */\r
54 \r
55   uint16_t USART_WordLength;          /*!< Specifies the number of data bits transmitted or received in a frame.\r
56                                            This parameter can be a value of @ref USART_Word_Length */\r
57 \r
58   uint16_t USART_StopBits;            /*!< Specifies the number of stop bits transmitted.\r
59                                            This parameter can be a value of @ref USART_Stop_Bits */\r
60 \r
61   uint16_t USART_Parity;              /*!< Specifies the parity mode.\r
62                                            This parameter can be a value of @ref USART_Parity\r
63                                            @note When parity is enabled, the computed parity is inserted\r
64                                                  at the MSB position of the transmitted data (9th bit when\r
65                                                  the word length is set to 9 data bits; 8th bit when the\r
66                                                  word length is set to 8 data bits). */\r
67  \r
68   uint16_t USART_Mode;                /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.\r
69                                            This parameter can be a value of @ref USART_Mode */\r
70 \r
71   uint16_t USART_HardwareFlowControl; /*!< Specifies wether the hardware flow control mode is enabled\r
72                                            or disabled.\r
73                                            This parameter can be a value of @ref USART_Hardware_Flow_Control */\r
74 } USART_InitTypeDef;\r
75 \r
76 /** \r
77   * @brief  USART Clock Init Structure definition  \r
78   */ \r
79   \r
80 typedef struct\r
81 {\r
82 \r
83   uint16_t USART_Clock;   /*!< Specifies whether the USART clock is enabled or disabled.\r
84                                This parameter can be a value of @ref USART_Clock */\r
85 \r
86   uint16_t USART_CPOL;    /*!< Specifies the steady state value of the serial clock.\r
87                                This parameter can be a value of @ref USART_Clock_Polarity */\r
88 \r
89   uint16_t USART_CPHA;    /*!< Specifies the clock transition on which the bit capture is made.\r
90                                This parameter can be a value of @ref USART_Clock_Phase */\r
91 \r
92   uint16_t USART_LastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted\r
93                                data bit (MSB) has to be output on the SCLK pin in synchronous mode.\r
94                                This parameter can be a value of @ref USART_Last_Bit */\r
95 } USART_ClockInitTypeDef;\r
96 \r
97 /* Exported constants --------------------------------------------------------*/\r
98 \r
99 /** @defgroup USART_Exported_Constants\r
100   * @{\r
101   */ \r
102   \r
103 #define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == USART1) || \\r
104                                      ((PERIPH) == USART2) || \\r
105                                      ((PERIPH) == USART3))\r
106 \r
107 /** @defgroup USART_Word_Length \r
108   * @{\r
109   */ \r
110   \r
111 #define USART_WordLength_8b                  ((uint16_t)0x0000)\r
112 #define USART_WordLength_9b                  ((uint16_t)0x1000)\r
113                                     \r
114 #define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WordLength_8b) || \\r
115                                       ((LENGTH) == USART_WordLength_9b))\r
116 /**\r
117   * @}\r
118   */ \r
119 \r
120 /** @defgroup USART_Stop_Bits \r
121   * @{\r
122   */ \r
123   \r
124 #define USART_StopBits_1                     ((uint16_t)0x0000)\r
125 #define USART_StopBits_0_5                   ((uint16_t)0x1000)\r
126 #define USART_StopBits_2                     ((uint16_t)0x2000)\r
127 #define USART_StopBits_1_5                   ((uint16_t)0x3000)\r
128 #define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \\r
129                                      ((STOPBITS) == USART_StopBits_0_5) || \\r
130                                      ((STOPBITS) == USART_StopBits_2) || \\r
131                                      ((STOPBITS) == USART_StopBits_1_5))\r
132 /**\r
133   * @}\r
134   */ \r
135 \r
136 /** @defgroup USART_Parity \r
137   * @{\r
138   */ \r
139   \r
140 #define USART_Parity_No                      ((uint16_t)0x0000)\r
141 #define USART_Parity_Even                    ((uint16_t)0x0400)\r
142 #define USART_Parity_Odd                     ((uint16_t)0x0600) \r
143 #define IS_USART_PARITY(PARITY) (((PARITY) == USART_Parity_No) || \\r
144                                  ((PARITY) == USART_Parity_Even) || \\r
145                                  ((PARITY) == USART_Parity_Odd))\r
146 /**\r
147   * @}\r
148   */ \r
149 \r
150 /** @defgroup USART_Mode \r
151   * @{\r
152   */ \r
153   \r
154 #define USART_Mode_Rx                        ((uint16_t)0x0004)\r
155 #define USART_Mode_Tx                        ((uint16_t)0x0008)\r
156 #define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFF3) == 0x00) && ((MODE) != (uint16_t)0x00))\r
157 /**\r
158   * @}\r
159   */ \r
160 \r
161 /** @defgroup USART_Hardware_Flow_Control \r
162   * @{\r
163   */ \r
164 #define USART_HardwareFlowControl_None       ((uint16_t)0x0000)\r
165 #define USART_HardwareFlowControl_RTS        ((uint16_t)0x0100)\r
166 #define USART_HardwareFlowControl_CTS        ((uint16_t)0x0200)\r
167 #define USART_HardwareFlowControl_RTS_CTS    ((uint16_t)0x0300)\r
168 #define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\\r
169                               (((CONTROL) == USART_HardwareFlowControl_None) || \\r
170                                ((CONTROL) == USART_HardwareFlowControl_RTS) || \\r
171                                ((CONTROL) == USART_HardwareFlowControl_CTS) || \\r
172                                ((CONTROL) == USART_HardwareFlowControl_RTS_CTS))\r
173 /**\r
174   * @}\r
175   */ \r
176 \r
177 /** @defgroup USART_Clock \r
178   * @{\r
179   */ \r
180 #define USART_Clock_Disable                  ((uint16_t)0x0000)\r
181 #define USART_Clock_Enable                   ((uint16_t)0x0800)\r
182 #define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_Clock_Disable) || \\r
183                                ((CLOCK) == USART_Clock_Enable))\r
184 /**\r
185   * @}\r
186   */ \r
187 \r
188 /** @defgroup USART_Clock_Polarity \r
189   * @{\r
190   */\r
191   \r
192 #define USART_CPOL_Low                       ((uint16_t)0x0000)\r
193 #define USART_CPOL_High                      ((uint16_t)0x0400)\r
194 #define IS_USART_CPOL(CPOL) (((CPOL) == USART_CPOL_Low) || ((CPOL) == USART_CPOL_High))\r
195 \r
196 /**\r
197   * @}\r
198   */ \r
199 \r
200 /** @defgroup USART_Clock_Phase\r
201   * @{\r
202   */\r
203 \r
204 #define USART_CPHA_1Edge                     ((uint16_t)0x0000)\r
205 #define USART_CPHA_2Edge                     ((uint16_t)0x0200)\r
206 #define IS_USART_CPHA(CPHA) (((CPHA) == USART_CPHA_1Edge) || ((CPHA) == USART_CPHA_2Edge))\r
207 \r
208 /**\r
209   * @}\r
210   */\r
211 \r
212 /** @defgroup USART_Last_Bit\r
213   * @{\r
214   */\r
215 \r
216 #define USART_LastBit_Disable                ((uint16_t)0x0000)\r
217 #define USART_LastBit_Enable                 ((uint16_t)0x0100)\r
218 #define IS_USART_LASTBIT(LASTBIT) (((LASTBIT) == USART_LastBit_Disable) || \\r
219                                    ((LASTBIT) == USART_LastBit_Enable))\r
220 /**\r
221   * @}\r
222   */ \r
223 \r
224 /** @defgroup USART_Interrupt_definition \r
225   * @{\r
226   */\r
227   \r
228 #define USART_IT_PE                          ((uint16_t)0x0028)\r
229 #define USART_IT_TXE                         ((uint16_t)0x0727)\r
230 #define USART_IT_TC                          ((uint16_t)0x0626)\r
231 #define USART_IT_RXNE                        ((uint16_t)0x0525)\r
232 #define USART_IT_IDLE                        ((uint16_t)0x0424)\r
233 #define USART_IT_LBD                         ((uint16_t)0x0846)\r
234 #define USART_IT_CTS                         ((uint16_t)0x096A)\r
235 #define USART_IT_ERR                         ((uint16_t)0x0060)\r
236 #define USART_IT_ORE                         ((uint16_t)0x0360)\r
237 #define USART_IT_NE                          ((uint16_t)0x0260)\r
238 #define USART_IT_FE                          ((uint16_t)0x0160)\r
239 #define IS_USART_CONFIG_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \\r
240                                 ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \\r
241                                 ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \\r
242                                 ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ERR))\r
243 #define IS_USART_GET_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \\r
244                              ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \\r
245                              ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \\r
246                              ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ORE) || \\r
247                              ((IT) == USART_IT_NE) || ((IT) == USART_IT_FE))\r
248 #define IS_USART_CLEAR_IT(IT) (((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \\r
249                                ((IT) == USART_IT_LBD) || ((IT) == USART_IT_CTS))\r
250 /**\r
251   * @}\r
252   */\r
253 \r
254 /** @defgroup USART_DMA_Requests \r
255   * @{\r
256   */\r
257 \r
258 #define USART_DMAReq_Tx                      ((uint16_t)0x0080)\r
259 #define USART_DMAReq_Rx                      ((uint16_t)0x0040)\r
260 #define IS_USART_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFF3F) == 0x00) && ((DMAREQ) != (uint16_t)0x00))\r
261 \r
262 /**\r
263   * @}\r
264   */ \r
265 \r
266 /** @defgroup USART_WakeUp_methods\r
267   * @{\r
268   */\r
269 \r
270 #define USART_WakeUp_IdleLine                ((uint16_t)0x0000)\r
271 #define USART_WakeUp_AddressMark             ((uint16_t)0x0800)\r
272 #define IS_USART_WAKEUP(WAKEUP) (((WAKEUP) == USART_WakeUp_IdleLine) || \\r
273                                  ((WAKEUP) == USART_WakeUp_AddressMark))\r
274 /**\r
275   * @}\r
276   */\r
277 \r
278 /** @defgroup USART_LIN_Break_Detection_Length \r
279   * @{\r
280   */\r
281   \r
282 #define USART_LINBreakDetectLength_10b      ((uint16_t)0x0000)\r
283 #define USART_LINBreakDetectLength_11b      ((uint16_t)0x0020)\r
284 #define IS_USART_LIN_BREAK_DETECT_LENGTH(LENGTH) \\r
285                                (((LENGTH) == USART_LINBreakDetectLength_10b) || \\r
286                                 ((LENGTH) == USART_LINBreakDetectLength_11b))\r
287 /**\r
288   * @}\r
289   */\r
290 \r
291 /** @defgroup USART_IrDA_Low_Power \r
292   * @{\r
293   */\r
294 \r
295 #define USART_IrDAMode_LowPower              ((uint16_t)0x0004)\r
296 #define USART_IrDAMode_Normal                ((uint16_t)0x0000)\r
297 #define IS_USART_IRDA_MODE(MODE) (((MODE) == USART_IrDAMode_LowPower) || \\r
298                                   ((MODE) == USART_IrDAMode_Normal))\r
299 /**\r
300   * @}\r
301   */ \r
302 \r
303 /** @defgroup USART_Flags \r
304   * @{\r
305   */\r
306 \r
307 #define USART_FLAG_CTS                       ((uint16_t)0x0200)\r
308 #define USART_FLAG_LBD                       ((uint16_t)0x0100)\r
309 #define USART_FLAG_TXE                       ((uint16_t)0x0080)\r
310 #define USART_FLAG_TC                        ((uint16_t)0x0040)\r
311 #define USART_FLAG_RXNE                      ((uint16_t)0x0020)\r
312 #define USART_FLAG_IDLE                      ((uint16_t)0x0010)\r
313 #define USART_FLAG_ORE                       ((uint16_t)0x0008)\r
314 #define USART_FLAG_NE                        ((uint16_t)0x0004)\r
315 #define USART_FLAG_FE                        ((uint16_t)0x0002)\r
316 #define USART_FLAG_PE                        ((uint16_t)0x0001)\r
317 #define IS_USART_FLAG(FLAG) (((FLAG) == USART_FLAG_PE) || ((FLAG) == USART_FLAG_TXE) || \\r
318                              ((FLAG) == USART_FLAG_TC) || ((FLAG) == USART_FLAG_RXNE) || \\r
319                              ((FLAG) == USART_FLAG_IDLE) || ((FLAG) == USART_FLAG_LBD) || \\r
320                              ((FLAG) == USART_FLAG_CTS) || ((FLAG) == USART_FLAG_ORE) || \\r
321                              ((FLAG) == USART_FLAG_NE) || ((FLAG) == USART_FLAG_FE))\r
322                               \r
323 #define IS_USART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFC9F) == 0x00) && ((FLAG) != (uint16_t)0x00))\r
324 \r
325 #define IS_USART_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) < 0x003D0901))\r
326 #define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF)\r
327 #define IS_USART_DATA(DATA) ((DATA) <= 0x1FF)\r
328 \r
329 /**\r
330   * @}\r
331   */ \r
332 \r
333 /**\r
334   * @}\r
335   */ \r
336 \r
337 /* Exported macro ------------------------------------------------------------*/\r
338 /* Exported functions ------------------------------------------------------- */ \r
339 \r
340 /*  Function used to set the USART configuration to the default reset state ***/ \r
341 void USART_DeInit(USART_TypeDef* USARTx);\r
342 \r
343 /* Initialization and Configuration functions *********************************/\r
344 void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);\r
345 void USART_StructInit(USART_InitTypeDef* USART_InitStruct);\r
346 void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);\r
347 void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);\r
348 void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
349 void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler);\r
350 void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
351 void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
352 \r
353 /* Data transfers functions ***************************************************/ \r
354 void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);\r
355 uint16_t USART_ReceiveData(USART_TypeDef* USARTx);\r
356 \r
357 /* Multi-Processor Communication functions ************************************/\r
358 void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address);\r
359 void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp);\r
360 void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
361 \r
362 /* LIN mode functions *********************************************************/\r
363 void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength);\r
364 void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
365 void USART_SendBreak(USART_TypeDef* USARTx);\r
366 \r
367 /* Half-duplex mode function **************************************************/\r
368 void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
369 \r
370 /* Smartcard mode functions ***************************************************/\r
371 void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
372 void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
373 void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime);\r
374 \r
375 /* IrDA mode functions ********************************************************/\r
376 void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode);\r
377 void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState);\r
378 \r
379 /* DMA transfers management functions *****************************************/\r
380 void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);\r
381 \r
382 /* Interrupts and flags management functions **********************************/\r
383 void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);\r
384 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);\r
385 void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);\r
386 ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);\r
387 void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);\r
388 \r
389 #ifdef __cplusplus\r
390 }\r
391 #endif\r
392 \r
393 #endif /* __STM32L1xx_USART_H */\r
394 \r
395 /**\r
396   * @}\r
397   */ \r
398 \r
399 /**\r
400   * @}\r
401   */ \r
402 \r
403 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r