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