1 /** 2 ****************************************************************************** 3 * @file stm32mp1xx_hal_usart.h 4 * @author MCD Application Team 5 * @brief Header file of USART HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2019 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32MP1xx_HAL_USART_H 21 #define STM32MP1xx_HAL_USART_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32mp1xx_hal_def.h" 29 30 /** @addtogroup STM32MP1xx_HAL_Driver 31 * @{ 32 */ 33 34 /** @addtogroup USART 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 /** @defgroup USART_Exported_Types USART Exported Types 40 * @{ 41 */ 42 43 /** 44 * @brief USART Init Structure definition 45 */ 46 typedef struct 47 { 48 uint32_t BaudRate; /*!< This member configures the Usart communication baud rate. 49 The baud rate is computed using the following formula: 50 Baud Rate Register[15:4] = ((2 * fclk_pres) / 51 ((huart->Init.BaudRate)))[15:4] 52 Baud Rate Register[3] = 0 53 Baud Rate Register[2:0] = (((2 * fclk_pres) / 54 ((huart->Init.BaudRate)))[3:0]) >> 1 55 where fclk_pres is the USART input clock frequency (fclk) 56 divided by a prescaler. 57 @note Oversampling by 8 is systematically applied to 58 achieve high baud rates. */ 59 60 uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. 61 This parameter can be a value of @ref USARTEx_Word_Length. */ 62 63 uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. 64 This parameter can be a value of @ref USART_Stop_Bits. */ 65 66 uint32_t Parity; /*!< Specifies the parity mode. 67 This parameter can be a value of @ref USART_Parity 68 @note When parity is enabled, the computed parity is inserted 69 at the MSB position of the transmitted data (9th bit when 70 the word length is set to 9 data bits; 8th bit when the 71 word length is set to 8 data bits). */ 72 73 uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled. 74 This parameter can be a value of @ref USART_Mode. */ 75 76 uint32_t CLKPolarity; /*!< Specifies the steady state of the serial clock. 77 This parameter can be a value of @ref USART_Clock_Polarity. */ 78 79 uint32_t CLKPhase; /*!< Specifies the clock transition on which the bit capture is made. 80 This parameter can be a value of @ref USART_Clock_Phase. */ 81 82 uint32_t CLKLastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted 83 data bit (MSB) has to be output on the SCLK pin in synchronous mode. 84 This parameter can be a value of @ref USART_Last_Bit. */ 85 86 uint32_t ClockPrescaler; /*!< Specifies the prescaler value used to divide the USART clock source. 87 This parameter can be a value of @ref USART_ClockPrescaler. */ 88 } USART_InitTypeDef; 89 90 /** 91 * @brief HAL USART State structures definition 92 */ 93 typedef enum 94 { 95 HAL_USART_STATE_RESET = 0x00U, /*!< Peripheral is not initialized */ 96 HAL_USART_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ 97 HAL_USART_STATE_BUSY = 0x02U, /*!< an internal process is ongoing */ 98 HAL_USART_STATE_BUSY_TX = 0x12U, /*!< Data Transmission process is ongoing */ 99 HAL_USART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */ 100 HAL_USART_STATE_BUSY_TX_RX = 0x32U, /*!< Data Transmission Reception process is ongoing */ 101 HAL_USART_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ 102 HAL_USART_STATE_ERROR = 0x04U /*!< Error */ 103 } HAL_USART_StateTypeDef; 104 105 /** 106 * @brief USART clock sources definitions 107 */ 108 typedef enum 109 { 110 USART_CLOCKSOURCE_PCLK1 = 0x00U, /*!< PCLK1 clock source */ 111 USART_CLOCKSOURCE_PCLK2 = 0x01U, /*!< PCLK2 clock source */ 112 USART_CLOCKSOURCE_PCLK5 = 0x02U, /*!< PCLK5 clock source (only used by UART1) */ 113 USART_CLOCKSOURCE_PLL3Q = 0x04U, /*!< PLL3Q clock source (only used by UART1) */ 114 USART_CLOCKSOURCE_PLL4Q = 0x08U, /*!< PLL4Q clock source */ 115 USART_CLOCKSOURCE_HSI = 0x10U, /*!< HSI clock source */ 116 USART_CLOCKSOURCE_CSI = 0x20U, /*!< CSI clock source */ 117 USART_CLOCKSOURCE_HSE = 0x40U, /*!< HSE clock source */ 118 USART_CLOCKSOURCE_UNDEFINED = 0x80U /*!< Undefined clock source */ 119 } USART_ClockSourceTypeDef; 120 121 /** 122 * @brief USART handle Structure definition 123 */ 124 typedef struct __USART_HandleTypeDef 125 { 126 USART_TypeDef *Instance; /*!< USART registers base address */ 127 128 USART_InitTypeDef Init; /*!< USART communication parameters */ 129 130 const uint8_t *pTxBuffPtr; /*!< Pointer to USART Tx transfer Buffer */ 131 132 uint16_t TxXferSize; /*!< USART Tx Transfer size */ 133 134 __IO uint16_t TxXferCount; /*!< USART Tx Transfer Counter */ 135 136 uint8_t *pRxBuffPtr; /*!< Pointer to USART Rx transfer Buffer */ 137 138 uint16_t RxXferSize; /*!< USART Rx Transfer size */ 139 140 __IO uint16_t RxXferCount; /*!< USART Rx Transfer Counter */ 141 142 uint16_t Mask; /*!< USART Rx RDR register mask */ 143 144 uint16_t NbRxDataToProcess; /*!< Number of data to process during RX ISR execution */ 145 146 uint16_t NbTxDataToProcess; /*!< Number of data to process during TX ISR execution */ 147 148 uint32_t SlaveMode; /*!< Enable/Disable UART SPI Slave Mode. This parameter can be a value 149 of @ref USARTEx_Slave_Mode */ 150 151 uint32_t FifoMode; /*!< Specifies if the FIFO mode will be used. This parameter can be a value 152 of @ref USARTEx_FIFO_mode. */ 153 154 void (*RxISR)(struct __USART_HandleTypeDef *husart); /*!< Function pointer on Rx IRQ handler */ 155 156 void (*TxISR)(struct __USART_HandleTypeDef *husart); /*!< Function pointer on Tx IRQ handler */ 157 158 DMA_HandleTypeDef *hdmatx; /*!< USART Tx DMA Handle parameters */ 159 160 DMA_HandleTypeDef *hdmarx; /*!< USART Rx DMA Handle parameters */ 161 162 #ifdef HAL_MDMA_MODULE_ENABLED 163 MDMA_HandleTypeDef *hmdmatx; /*!< USART Tx MDMA Handle parameters */ 164 165 MDMA_HandleTypeDef *hmdmarx; /*!< USART Rx MDMA Handle parameters */ 166 #endif 167 168 HAL_LockTypeDef Lock; /*!< Locking object */ 169 170 __IO HAL_USART_StateTypeDef State; /*!< USART communication state */ 171 172 __IO uint32_t ErrorCode; /*!< USART Error code */ 173 174 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 175 void (* TxHalfCpltCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Tx Half Complete Callback */ 176 void (* TxCpltCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Tx Complete Callback */ 177 void (* RxHalfCpltCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Rx Half Complete Callback */ 178 void (* RxCpltCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Rx Complete Callback */ 179 void (* TxRxCpltCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Tx Rx Complete Callback */ 180 void (* ErrorCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Error Callback */ 181 void (* AbortCpltCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Abort Complete Callback */ 182 void (* RxFifoFullCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Rx Fifo Full Callback */ 183 void (* TxFifoEmptyCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Tx Fifo Empty Callback */ 184 185 void (* MspInitCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Msp Init callback */ 186 void (* MspDeInitCallback)(struct __USART_HandleTypeDef *husart); /*!< USART Msp DeInit callback */ 187 #endif /* USE_HAL_USART_REGISTER_CALLBACKS */ 188 189 } USART_HandleTypeDef; 190 191 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 192 /** 193 * @brief HAL USART Callback ID enumeration definition 194 */ 195 typedef enum 196 { 197 HAL_USART_TX_HALFCOMPLETE_CB_ID = 0x00U, /*!< USART Tx Half Complete Callback ID */ 198 HAL_USART_TX_COMPLETE_CB_ID = 0x01U, /*!< USART Tx Complete Callback ID */ 199 HAL_USART_RX_HALFCOMPLETE_CB_ID = 0x02U, /*!< USART Rx Half Complete Callback ID */ 200 HAL_USART_RX_COMPLETE_CB_ID = 0x03U, /*!< USART Rx Complete Callback ID */ 201 HAL_USART_TX_RX_COMPLETE_CB_ID = 0x04U, /*!< USART Tx Rx Complete Callback ID */ 202 HAL_USART_ERROR_CB_ID = 0x05U, /*!< USART Error Callback ID */ 203 HAL_USART_ABORT_COMPLETE_CB_ID = 0x06U, /*!< USART Abort Complete Callback ID */ 204 HAL_USART_RX_FIFO_FULL_CB_ID = 0x07U, /*!< USART Rx Fifo Full Callback ID */ 205 HAL_USART_TX_FIFO_EMPTY_CB_ID = 0x08U, /*!< USART Tx Fifo Empty Callback ID */ 206 207 HAL_USART_MSPINIT_CB_ID = 0x09U, /*!< USART MspInit callback ID */ 208 HAL_USART_MSPDEINIT_CB_ID = 0x0AU /*!< USART MspDeInit callback ID */ 209 210 } HAL_USART_CallbackIDTypeDef; 211 212 /** 213 * @brief HAL USART Callback pointer definition 214 */ 215 typedef void (*pUSART_CallbackTypeDef)(USART_HandleTypeDef *husart); /*!< pointer to an USART callback function */ 216 217 #endif /* USE_HAL_USART_REGISTER_CALLBACKS */ 218 219 /** 220 * @} 221 */ 222 223 /* Exported constants --------------------------------------------------------*/ 224 /** @defgroup USART_Exported_Constants USART Exported Constants 225 * @{ 226 */ 227 228 /** @defgroup USART_Error_Definition USART Error Definition 229 * @{ 230 */ 231 #define HAL_USART_ERROR_NONE (0x00000000U) /*!< No error */ 232 #define HAL_USART_ERROR_PE (0x00000001U) /*!< Parity error */ 233 #define HAL_USART_ERROR_NE (0x00000002U) /*!< Noise error */ 234 #define HAL_USART_ERROR_FE (0x00000004U) /*!< Frame error */ 235 #define HAL_USART_ERROR_ORE (0x00000008U) /*!< Overrun error */ 236 #define HAL_USART_ERROR_DMA (0x00000010U) /*!< DMA transfer error */ 237 #define HAL_USART_ERROR_UDR (0x00000020U) /*!< SPI slave underrun error */ 238 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 239 #define HAL_USART_ERROR_INVALID_CALLBACK (0x00000040U) /*!< Invalid Callback error */ 240 #endif /* USE_HAL_USART_REGISTER_CALLBACKS */ 241 #define HAL_USART_ERROR_RTO (0x00000080U) /*!< Receiver Timeout error */ 242 /** 243 * @} 244 */ 245 246 /** @defgroup USART_Stop_Bits USART Number of Stop Bits 247 * @{ 248 */ 249 #define USART_STOPBITS_0_5 USART_CR2_STOP_0 /*!< USART frame with 0.5 stop bit */ 250 #define USART_STOPBITS_1 0x00000000U /*!< USART frame with 1 stop bit */ 251 #define USART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< USART frame with 1.5 stop bits */ 252 #define USART_STOPBITS_2 USART_CR2_STOP_1 /*!< USART frame with 2 stop bits */ 253 /** 254 * @} 255 */ 256 257 /** @defgroup USART_Parity USART Parity 258 * @{ 259 */ 260 #define USART_PARITY_NONE 0x00000000U /*!< No parity */ 261 #define USART_PARITY_EVEN USART_CR1_PCE /*!< Even parity */ 262 #define USART_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS) /*!< Odd parity */ 263 /** 264 * @} 265 */ 266 267 /** @defgroup USART_Mode USART Mode 268 * @{ 269 */ 270 #define USART_MODE_RX USART_CR1_RE /*!< RX mode */ 271 #define USART_MODE_TX USART_CR1_TE /*!< TX mode */ 272 #define USART_MODE_TX_RX (USART_CR1_TE |USART_CR1_RE) /*!< RX and TX mode */ 273 /** 274 * @} 275 */ 276 277 /** @defgroup USART_Clock USART Clock 278 * @{ 279 */ 280 #define USART_CLOCK_DISABLE 0x00000000U /*!< USART clock disable */ 281 #define USART_CLOCK_ENABLE USART_CR2_CLKEN /*!< USART clock enable */ 282 /** 283 * @} 284 */ 285 286 /** @defgroup USART_Clock_Polarity USART Clock Polarity 287 * @{ 288 */ 289 #define USART_POLARITY_LOW 0x00000000U /*!< Driver enable signal is active high */ 290 #define USART_POLARITY_HIGH USART_CR2_CPOL /*!< Driver enable signal is active low */ 291 /** 292 * @} 293 */ 294 295 /** @defgroup USART_Clock_Phase USART Clock Phase 296 * @{ 297 */ 298 #define USART_PHASE_1EDGE 0x00000000U /*!< USART frame phase on first clock transition */ 299 #define USART_PHASE_2EDGE USART_CR2_CPHA /*!< USART frame phase on second clock transition */ 300 /** 301 * @} 302 */ 303 304 /** @defgroup USART_Last_Bit USART Last Bit 305 * @{ 306 */ 307 #define USART_LASTBIT_DISABLE 0x00000000U /*!< USART frame last data bit clock pulse not output to SCLK pin */ 308 #define USART_LASTBIT_ENABLE USART_CR2_LBCL /*!< USART frame last data bit clock pulse output to SCLK pin */ 309 /** 310 * @} 311 */ 312 313 /** @defgroup USART_ClockPrescaler USART Clock Prescaler 314 * @{ 315 */ 316 #define USART_PRESCALER_DIV1 0x00000000U /*!< fclk_pres = fclk */ 317 #define USART_PRESCALER_DIV2 0x00000001U /*!< fclk_pres = fclk/2 */ 318 #define USART_PRESCALER_DIV4 0x00000002U /*!< fclk_pres = fclk/4 */ 319 #define USART_PRESCALER_DIV6 0x00000003U /*!< fclk_pres = fclk/6 */ 320 #define USART_PRESCALER_DIV8 0x00000004U /*!< fclk_pres = fclk/8 */ 321 #define USART_PRESCALER_DIV10 0x00000005U /*!< fclk_pres = fclk/10 */ 322 #define USART_PRESCALER_DIV12 0x00000006U /*!< fclk_pres = fclk/12 */ 323 #define USART_PRESCALER_DIV16 0x00000007U /*!< fclk_pres = fclk/16 */ 324 #define USART_PRESCALER_DIV32 0x00000008U /*!< fclk_pres = fclk/32 */ 325 #define USART_PRESCALER_DIV64 0x00000009U /*!< fclk_pres = fclk/64 */ 326 #define USART_PRESCALER_DIV128 0x0000000AU /*!< fclk_pres = fclk/128 */ 327 #define USART_PRESCALER_DIV256 0x0000000BU /*!< fclk_pres = fclk/256 */ 328 329 /** 330 * @} 331 */ 332 333 /** @defgroup USART_Request_Parameters USART Request Parameters 334 * @{ 335 */ 336 #define USART_RXDATA_FLUSH_REQUEST USART_RQR_RXFRQ /*!< Receive Data flush Request */ 337 #define USART_TXDATA_FLUSH_REQUEST USART_RQR_TXFRQ /*!< Transmit data flush Request */ 338 /** 339 * @} 340 */ 341 342 /** @defgroup USART_Flags USART Flags 343 * Elements values convention: 0xXXXX 344 * - 0xXXXX : Flag mask in the ISR register 345 * @{ 346 */ 347 #define USART_FLAG_TXFT USART_ISR_TXFT /*!< USART TXFIFO threshold flag */ 348 #define USART_FLAG_RXFT USART_ISR_RXFT /*!< USART RXFIFO threshold flag */ 349 #define USART_FLAG_RXFF USART_ISR_RXFF /*!< USART RXFIFO Full flag */ 350 #define USART_FLAG_TXFE USART_ISR_TXFE /*!< USART TXFIFO Empty flag */ 351 #define USART_FLAG_REACK USART_ISR_REACK /*!< USART receive enable acknowledge flag */ 352 #define USART_FLAG_TEACK USART_ISR_TEACK /*!< USART transmit enable acknowledge flag */ 353 #define USART_FLAG_BUSY USART_ISR_BUSY /*!< USART busy flag */ 354 #define USART_FLAG_UDR USART_ISR_UDR /*!< SPI slave underrun error flag */ 355 #define USART_FLAG_TXE USART_ISR_TXE_TXFNF /*!< USART transmit data register empty */ 356 #define USART_FLAG_TXFNF USART_ISR_TXE_TXFNF /*!< USART TXFIFO not full */ 357 #define USART_FLAG_RTOF USART_ISR_RTOF /*!< USART receiver timeout flag */ 358 #define USART_FLAG_TC USART_ISR_TC /*!< USART transmission complete */ 359 #define USART_FLAG_RXNE USART_ISR_RXNE_RXFNE /*!< USART read data register not empty */ 360 #define USART_FLAG_RXFNE USART_ISR_RXNE_RXFNE /*!< USART RXFIFO not empty */ 361 #define USART_FLAG_IDLE USART_ISR_IDLE /*!< USART idle flag */ 362 #define USART_FLAG_ORE USART_ISR_ORE /*!< USART overrun error */ 363 #define USART_FLAG_NE USART_ISR_NE /*!< USART noise error */ 364 #define USART_FLAG_FE USART_ISR_FE /*!< USART frame error */ 365 #define USART_FLAG_PE USART_ISR_PE /*!< USART parity error */ 366 /** 367 * @} 368 */ 369 370 /** @defgroup USART_Interrupt_definition USART Interrupts Definition 371 * Elements values convention: 0000ZZZZ0XXYYYYYb 372 * - YYYYY : Interrupt source position in the XX register (5bits) 373 * - XX : Interrupt source register (2bits) 374 * - 01: CR1 register 375 * - 10: CR2 register 376 * - 11: CR3 register 377 * - ZZZZ : Flag position in the ISR register(4bits) 378 * @{ 379 */ 380 381 #define USART_IT_PE 0x0028U /*!< USART parity error interruption */ 382 #define USART_IT_TXE 0x0727U /*!< USART transmit data register empty interruption */ 383 #define USART_IT_TXFNF 0x0727U /*!< USART TX FIFO not full interruption */ 384 #define USART_IT_TC 0x0626U /*!< USART transmission complete interruption */ 385 #define USART_IT_RXNE 0x0525U /*!< USART read data register not empty interruption */ 386 #define USART_IT_RXFNE 0x0525U /*!< USART RXFIFO not empty interruption */ 387 #define USART_IT_IDLE 0x0424U /*!< USART idle interruption */ 388 #define USART_IT_ERR 0x0060U /*!< USART error interruption */ 389 #define USART_IT_ORE 0x0300U /*!< USART overrun error interruption */ 390 #define USART_IT_NE 0x0200U /*!< USART noise error interruption */ 391 #define USART_IT_FE 0x0100U /*!< USART frame error interruption */ 392 #define USART_IT_RXFF 0x183FU /*!< USART RXFIFO full interruption */ 393 #define USART_IT_TXFE 0x173EU /*!< USART TXFIFO empty interruption */ 394 #define USART_IT_RXFT 0x1A7CU /*!< USART RXFIFO threshold reached interruption */ 395 #define USART_IT_TXFT 0x1B77U /*!< USART TXFIFO threshold reached interruption */ 396 397 /** 398 * @} 399 */ 400 401 /** @defgroup USART_IT_CLEAR_Flags USART Interruption Clear Flags 402 * @{ 403 */ 404 #define USART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */ 405 #define USART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */ 406 #define USART_CLEAR_NEF USART_ICR_NECF /*!< Noise Error detected Clear Flag */ 407 #define USART_CLEAR_OREF USART_ICR_ORECF /*!< OverRun Error Clear Flag */ 408 #define USART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */ 409 #define USART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */ 410 #define USART_CLEAR_UDRF USART_ICR_UDRCF /*!< SPI slave underrun error Clear Flag */ 411 #define USART_CLEAR_TXFECF USART_ICR_TXFECF /*!< TXFIFO Empty Clear Flag */ 412 #define USART_CLEAR_RTOF USART_ICR_RTOCF /*!< USART receiver timeout clear flag */ 413 /** 414 * @} 415 */ 416 417 /** @defgroup USART_Interruption_Mask USART Interruption Flags Mask 418 * @{ 419 */ 420 #define USART_IT_MASK 0x001FU /*!< USART interruptions flags mask */ 421 #define USART_CR_MASK 0x00E0U /*!< USART control register mask */ 422 #define USART_CR_POS 5U /*!< USART control register position */ 423 #define USART_ISR_MASK 0x1F00U /*!< USART ISR register mask */ 424 #define USART_ISR_POS 8U /*!< USART ISR register position */ 425 /** 426 * @} 427 */ 428 429 /** 430 * @} 431 */ 432 433 /* Exported macros -----------------------------------------------------------*/ 434 /** @defgroup USART_Exported_Macros USART Exported Macros 435 * @{ 436 */ 437 438 /** @brief Reset USART handle state. 439 * @param __HANDLE__ USART handle. 440 * @retval None 441 */ 442 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 443 #define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__) do{ \ 444 (__HANDLE__)->State = HAL_USART_STATE_RESET; \ 445 (__HANDLE__)->MspInitCallback = NULL; \ 446 (__HANDLE__)->MspDeInitCallback = NULL; \ 447 } while(0U) 448 #else 449 #define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_USART_STATE_RESET) 450 #endif /* USE_HAL_USART_REGISTER_CALLBACKS */ 451 452 /** @brief Check whether the specified USART flag is set or not. 453 * @param __HANDLE__ specifies the USART Handle 454 * @param __FLAG__ specifies the flag to check. 455 * This parameter can be one of the following values: 456 * @arg @ref USART_FLAG_TXFT TXFIFO threshold flag 457 * @arg @ref USART_FLAG_RXFT RXFIFO threshold flag 458 * @arg @ref USART_FLAG_RXFF RXFIFO Full flag 459 * @arg @ref USART_FLAG_TXFE TXFIFO Empty flag 460 * @arg @ref USART_FLAG_REACK Receive enable acknowledge flag 461 * @arg @ref USART_FLAG_TEACK Transmit enable acknowledge flag 462 * @arg @ref USART_FLAG_BUSY Busy flag 463 * @arg @ref USART_FLAG_UDR SPI slave underrun error flag 464 * @arg @ref USART_FLAG_TXE Transmit data register empty flag 465 * @arg @ref USART_FLAG_TXFNF TXFIFO not full flag 466 * @arg @ref USART_FLAG_TC Transmission Complete flag 467 * @arg @ref USART_FLAG_RXNE Receive data register not empty flag 468 * @arg @ref USART_FLAG_RXFNE RXFIFO not empty flag 469 * @arg @ref USART_FLAG_RTOF Receiver Timeout flag 470 * @arg @ref USART_FLAG_IDLE Idle Line detection flag 471 * @arg @ref USART_FLAG_ORE OverRun Error flag 472 * @arg @ref USART_FLAG_NE Noise Error flag 473 * @arg @ref USART_FLAG_FE Framing Error flag 474 * @arg @ref USART_FLAG_PE Parity Error flag 475 * @retval The new state of __FLAG__ (TRUE or FALSE). 476 */ 477 #define __HAL_USART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__)) 478 479 /** @brief Clear the specified USART pending flag. 480 * @param __HANDLE__ specifies the USART Handle. 481 * @param __FLAG__ specifies the flag to check. 482 * This parameter can be any combination of the following values: 483 * @arg @ref USART_CLEAR_PEF Parity Error Clear Flag 484 * @arg @ref USART_CLEAR_FEF Framing Error Clear Flag 485 * @arg @ref USART_CLEAR_NEF Noise detected Clear Flag 486 * @arg @ref USART_CLEAR_OREF Overrun Error Clear Flag 487 * @arg @ref USART_CLEAR_IDLEF IDLE line detected Clear Flag 488 * @arg @ref USART_CLEAR_TXFECF TXFIFO empty clear Flag 489 * @arg @ref USART_CLEAR_TCF Transmission Complete Clear Flag 490 * @arg @ref USART_CLEAR_RTOF Receiver Timeout clear flag 491 * @arg @ref USART_CLEAR_UDRF SPI slave underrun error Clear Flag 492 * @retval None 493 */ 494 #define __HAL_USART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) 495 496 /** @brief Clear the USART PE pending flag. 497 * @param __HANDLE__ specifies the USART Handle. 498 * @retval None 499 */ 500 #define __HAL_USART_CLEAR_PEFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_PEF) 501 502 /** @brief Clear the USART FE pending flag. 503 * @param __HANDLE__ specifies the USART Handle. 504 * @retval None 505 */ 506 #define __HAL_USART_CLEAR_FEFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_FEF) 507 508 /** @brief Clear the USART NE pending flag. 509 * @param __HANDLE__ specifies the USART Handle. 510 * @retval None 511 */ 512 #define __HAL_USART_CLEAR_NEFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_NEF) 513 514 /** @brief Clear the USART ORE pending flag. 515 * @param __HANDLE__ specifies the USART Handle. 516 * @retval None 517 */ 518 #define __HAL_USART_CLEAR_OREFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_OREF) 519 520 /** @brief Clear the USART IDLE pending flag. 521 * @param __HANDLE__ specifies the USART Handle. 522 * @retval None 523 */ 524 #define __HAL_USART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_IDLEF) 525 526 /** @brief Clear the USART TX FIFO empty clear flag. 527 * @param __HANDLE__ specifies the USART Handle. 528 * @retval None 529 */ 530 #define __HAL_USART_CLEAR_TXFECF(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_TXFECF) 531 532 /** @brief Clear SPI slave underrun error flag. 533 * @param __HANDLE__ specifies the USART Handle. 534 * @retval None 535 */ 536 #define __HAL_USART_CLEAR_UDRFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_UDRF) 537 538 /** @brief Enable the specified USART interrupt. 539 * @param __HANDLE__ specifies the USART Handle. 540 * @param __INTERRUPT__ specifies the USART interrupt source to enable. 541 * This parameter can be one of the following values: 542 * @arg @ref USART_IT_RXFF RXFIFO Full interrupt 543 * @arg @ref USART_IT_TXFE TXFIFO Empty interrupt 544 * @arg @ref USART_IT_RXFT RXFIFO threshold interrupt 545 * @arg @ref USART_IT_TXFT TXFIFO threshold interrupt 546 * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt 547 * @arg @ref USART_IT_TXFNF TX FIFO not full interrupt 548 * @arg @ref USART_IT_TC Transmission complete interrupt 549 * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt 550 * @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt 551 * @arg @ref USART_IT_IDLE Idle line detection interrupt 552 * @arg @ref USART_IT_PE Parity Error interrupt 553 * @arg @ref USART_IT_ERR Error interrupt(Frame error, noise error, overrun error) 554 * @retval None 555 */ 556 #define __HAL_USART_ENABLE_IT(__HANDLE__, __INTERRUPT__)\ 557 (((((__INTERRUPT__) & USART_CR_MASK) >> USART_CR_POS) == 1U)?\ 558 ((__HANDLE__)->Instance->CR1 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ 559 ((((__INTERRUPT__) & USART_CR_MASK) >> USART_CR_POS) == 2U)?\ 560 ((__HANDLE__)->Instance->CR2 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ 561 ((__HANDLE__)->Instance->CR3 |= (1U << ((__INTERRUPT__) & USART_IT_MASK)))) 562 563 /** @brief Disable the specified USART interrupt. 564 * @param __HANDLE__ specifies the USART Handle. 565 * @param __INTERRUPT__ specifies the USART interrupt source to disable. 566 * This parameter can be one of the following values: 567 * @arg @ref USART_IT_RXFF RXFIFO Full interrupt 568 * @arg @ref USART_IT_TXFE TXFIFO Empty interrupt 569 * @arg @ref USART_IT_RXFT RXFIFO threshold interrupt 570 * @arg @ref USART_IT_TXFT TXFIFO threshold interrupt 571 * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt 572 * @arg @ref USART_IT_TXFNF TX FIFO not full interrupt 573 * @arg @ref USART_IT_TC Transmission complete interrupt 574 * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt 575 * @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt 576 * @arg @ref USART_IT_IDLE Idle line detection interrupt 577 * @arg @ref USART_IT_PE Parity Error interrupt 578 * @arg @ref USART_IT_ERR Error interrupt(Frame error, noise error, overrun error) 579 * @retval None 580 */ 581 #define __HAL_USART_DISABLE_IT(__HANDLE__, __INTERRUPT__)\ 582 (((((__INTERRUPT__) & USART_CR_MASK) >> USART_CR_POS) == 1U)?\ 583 ((__HANDLE__)->Instance->CR1 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ 584 ((((__INTERRUPT__) & USART_CR_MASK) >> USART_CR_POS) == 2U)?\ 585 ((__HANDLE__)->Instance->CR2 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ 586 ((__HANDLE__)->Instance->CR3 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK)))) 587 588 /** @brief Check whether the specified USART interrupt has occurred or not. 589 * @param __HANDLE__ specifies the USART Handle. 590 * @param __INTERRUPT__ specifies the USART interrupt source to check. 591 * This parameter can be one of the following values: 592 * @arg @ref USART_IT_RXFF RXFIFO Full interrupt 593 * @arg @ref USART_IT_TXFE TXFIFO Empty interrupt 594 * @arg @ref USART_IT_RXFT RXFIFO threshold interrupt 595 * @arg @ref USART_IT_TXFT TXFIFO threshold interrupt 596 * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt 597 * @arg @ref USART_IT_TXFNF TX FIFO not full interrupt 598 * @arg @ref USART_IT_TC Transmission complete interrupt 599 * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt 600 * @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt 601 * @arg @ref USART_IT_IDLE Idle line detection interrupt 602 * @arg @ref USART_IT_ORE OverRun Error interrupt 603 * @arg @ref USART_IT_NE Noise Error interrupt 604 * @arg @ref USART_IT_FE Framing Error interrupt 605 * @arg @ref USART_IT_PE Parity Error interrupt 606 * @retval The new state of __INTERRUPT__ (SET or RESET). 607 */ 608 #define __HAL_USART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR\ 609 & (0x01U << (((__INTERRUPT__) & USART_ISR_MASK)>>\ 610 USART_ISR_POS))) != 0U) ? SET : RESET) 611 612 /** @brief Check whether the specified USART interrupt source is enabled or not. 613 * @param __HANDLE__ specifies the USART Handle. 614 * @param __INTERRUPT__ specifies the USART interrupt source to check. 615 * This parameter can be one of the following values: 616 * @arg @ref USART_IT_RXFF RXFIFO Full interrupt 617 * @arg @ref USART_IT_TXFE TXFIFO Empty interrupt 618 * @arg @ref USART_IT_RXFT RXFIFO threshold interrupt 619 * @arg @ref USART_IT_TXFT TXFIFO threshold interrupt 620 * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt 621 * @arg @ref USART_IT_TXFNF TX FIFO not full interrupt 622 * @arg @ref USART_IT_TC Transmission complete interrupt 623 * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt 624 * @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt 625 * @arg @ref USART_IT_IDLE Idle line detection interrupt 626 * @arg @ref USART_IT_ORE OverRun Error interrupt 627 * @arg @ref USART_IT_NE Noise Error interrupt 628 * @arg @ref USART_IT_FE Framing Error interrupt 629 * @arg @ref USART_IT_PE Parity Error interrupt 630 * @retval The new state of __INTERRUPT__ (SET or RESET). 631 */ 632 #define __HAL_USART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x01U) ?\ 633 (__HANDLE__)->Instance->CR1 : \ 634 (((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x02U) ?\ 635 (__HANDLE__)->Instance->CR2 : \ 636 (__HANDLE__)->Instance->CR3)) & (0x01U <<\ 637 (((uint16_t)(__INTERRUPT__)) &\ 638 USART_IT_MASK))) != 0U) ? SET : RESET) 639 640 /** @brief Clear the specified USART ISR flag, in setting the proper ICR register flag. 641 * @param __HANDLE__ specifies the USART Handle. 642 * @param __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set 643 * to clear the corresponding interrupt. 644 * This parameter can be one of the following values: 645 * @arg @ref USART_CLEAR_PEF Parity Error Clear Flag 646 * @arg @ref USART_CLEAR_FEF Framing Error Clear Flag 647 * @arg @ref USART_CLEAR_NEF Noise detected Clear Flag 648 * @arg @ref USART_CLEAR_OREF Overrun Error Clear Flag 649 * @arg @ref USART_CLEAR_IDLEF IDLE line detected Clear Flag 650 * @arg @ref USART_CLEAR_RTOF Receiver timeout clear flag 651 * @arg @ref USART_CLEAR_TXFECF TXFIFO empty clear Flag 652 * @arg @ref USART_CLEAR_TCF Transmission Complete Clear Flag 653 * @retval None 654 */ 655 #define __HAL_USART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__)) 656 657 /** @brief Set a specific USART request flag. 658 * @param __HANDLE__ specifies the USART Handle. 659 * @param __REQ__ specifies the request flag to set. 660 * This parameter can be one of the following values: 661 * @arg @ref USART_RXDATA_FLUSH_REQUEST Receive Data flush Request 662 * @arg @ref USART_TXDATA_FLUSH_REQUEST Transmit data flush Request 663 * 664 * @retval None 665 */ 666 #define __HAL_USART_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (uint16_t)(__REQ__)) 667 668 /** @brief Enable the USART one bit sample method. 669 * @param __HANDLE__ specifies the USART Handle. 670 * @retval None 671 */ 672 #define __HAL_USART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) 673 674 /** @brief Disable the USART one bit sample method. 675 * @param __HANDLE__ specifies the USART Handle. 676 * @retval None 677 */ 678 #define __HAL_USART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= ~USART_CR3_ONEBIT) 679 680 /** @brief Enable USART. 681 * @param __HANDLE__ specifies the USART Handle. 682 * @retval None 683 */ 684 #define __HAL_USART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) 685 686 /** @brief Disable USART. 687 * @param __HANDLE__ specifies the USART Handle. 688 * @retval None 689 */ 690 #define __HAL_USART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) 691 692 /** 693 * @} 694 */ 695 696 /* Private macros --------------------------------------------------------*/ 697 /** @defgroup USART_Private_Macros USART Private Macros 698 * @{ 699 */ 700 701 /** @brief Get USART clock division factor from clock prescaler value. 702 * @param __CLOCKPRESCALER__ USART prescaler value. 703 * @retval USART clock division factor 704 */ 705 #define USART_GET_DIV_FACTOR(__CLOCKPRESCALER__) \ 706 (((__CLOCKPRESCALER__) == USART_PRESCALER_DIV1) ? 1U : \ 707 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV2) ? 2U : \ 708 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV4) ? 4U : \ 709 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV6) ? 6U : \ 710 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV8) ? 8U : \ 711 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV10) ? 10U : \ 712 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV12) ? 12U : \ 713 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV16) ? 16U : \ 714 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV32) ? 32U : \ 715 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV64) ? 64U : \ 716 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV128) ? 128U : \ 717 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV256) ? 256U : 1U) 718 719 /** @brief BRR division operation to set BRR register in 8-bit oversampling mode. 720 * @param __PCLK__ USART clock. 721 * @param __BAUD__ Baud rate set by the user. 722 * @param __CLOCKPRESCALER__ USART prescaler value. 723 * @retval Division result 724 */ 725 #define USART_DIV_SAMPLING8(__PCLK__, __BAUD__, __CLOCKPRESCALER__)\ 726 (((((__PCLK__)/USART_GET_DIV_FACTOR(__CLOCKPRESCALER__))*2U)\ 727 + ((__BAUD__)/2U)) / (__BAUD__)) 728 729 /** @brief Report the USART clock source. 730 * @param __HANDLE__ specifies the USART Handle. 731 * @param __CLOCKSOURCE__ output variable. 732 * @retval the USART clocking source, written in __CLOCKSOURCE__. 733 */ 734 #define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ 735 do { \ 736 if((__HANDLE__)->Instance == USART1) \ 737 { \ 738 switch(__HAL_RCC_GET_USART1_SOURCE()) \ 739 { \ 740 case RCC_USART1CLKSOURCE_PCLK5: \ 741 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK5; \ 742 break; \ 743 case RCC_USART1CLKSOURCE_PLL3: \ 744 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL3Q; \ 745 break; \ 746 case RCC_USART1CLKSOURCE_HSI: \ 747 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \ 748 break; \ 749 case RCC_USART1CLKSOURCE_CSI: \ 750 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_CSI; \ 751 break; \ 752 case RCC_USART1CLKSOURCE_PLL4: \ 753 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL4Q; \ 754 break; \ 755 case RCC_USART1CLKSOURCE_HSE: \ 756 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSE; \ 757 break; \ 758 default: \ 759 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \ 760 break; \ 761 } \ 762 } \ 763 else if((__HANDLE__)->Instance == USART2) \ 764 { \ 765 switch(__HAL_RCC_GET_UART24_SOURCE()) \ 766 { \ 767 case RCC_UART24CLKSOURCE_PCLK1: \ 768 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \ 769 break; \ 770 case RCC_UART24CLKSOURCE_PLL4: \ 771 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL4Q; \ 772 break; \ 773 case RCC_UART24CLKSOURCE_HSI: \ 774 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \ 775 break; \ 776 case RCC_UART24CLKSOURCE_CSI: \ 777 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_CSI; \ 778 break; \ 779 case RCC_UART24CLKSOURCE_HSE: \ 780 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSE; \ 781 break; \ 782 default: \ 783 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \ 784 break; \ 785 } \ 786 } \ 787 else if((__HANDLE__)->Instance == USART3) \ 788 { \ 789 switch(__HAL_RCC_GET_UART35_SOURCE()) \ 790 { \ 791 case RCC_UART35CLKSOURCE_PCLK1: \ 792 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \ 793 break; \ 794 case RCC_UART35CLKSOURCE_PLL4: \ 795 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL4Q; \ 796 break; \ 797 case RCC_UART35CLKSOURCE_HSI: \ 798 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \ 799 break; \ 800 case RCC_UART35CLKSOURCE_CSI: \ 801 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_CSI; \ 802 break; \ 803 case RCC_UART35CLKSOURCE_HSE: \ 804 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSE; \ 805 break; \ 806 default: \ 807 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \ 808 break; \ 809 } \ 810 } \ 811 else if((__HANDLE__)->Instance == USART6) \ 812 { \ 813 switch(__HAL_RCC_GET_USART6_SOURCE()) \ 814 { \ 815 case RCC_USART6CLKSOURCE_PCLK2: \ 816 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK2; \ 817 break; \ 818 case RCC_USART6CLKSOURCE_PLL4: \ 819 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL4Q; \ 820 break; \ 821 case RCC_USART6CLKSOURCE_HSI: \ 822 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \ 823 break; \ 824 case RCC_USART6CLKSOURCE_CSI: \ 825 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_CSI; \ 826 break; \ 827 case RCC_USART6CLKSOURCE_HSE: \ 828 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSE; \ 829 break; \ 830 default: \ 831 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \ 832 break; \ 833 } \ 834 } \ 835 else \ 836 { \ 837 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \ 838 } \ 839 } while(0) 840 841 /** @brief Check USART Baud rate. 842 * @param __BAUDRATE__ Baudrate specified by the user. 843 * The maximum Baud Rate is derived from the maximum clock on MP1 (i.e. 100 MHz) 844 * divided by the smallest oversampling used on the USART (i.e. 8) 845 * @retval SET (__BAUDRATE__ is valid) or RESET (__BAUDRATE__ is invalid) */ 846 #define IS_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 12500001U) 847 848 /** 849 * @brief Ensure that USART frame number of stop bits is valid. 850 * @param __STOPBITS__ USART frame number of stop bits. 851 * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid) 852 */ 853 #define IS_USART_STOPBITS(__STOPBITS__) (((__STOPBITS__) == USART_STOPBITS_0_5) || \ 854 ((__STOPBITS__) == USART_STOPBITS_1) || \ 855 ((__STOPBITS__) == USART_STOPBITS_1_5) || \ 856 ((__STOPBITS__) == USART_STOPBITS_2)) 857 858 /** 859 * @brief Ensure that USART frame parity is valid. 860 * @param __PARITY__ USART frame parity. 861 * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid) 862 */ 863 #define IS_USART_PARITY(__PARITY__) (((__PARITY__) == USART_PARITY_NONE) || \ 864 ((__PARITY__) == USART_PARITY_EVEN) || \ 865 ((__PARITY__) == USART_PARITY_ODD)) 866 867 /** 868 * @brief Ensure that USART communication mode is valid. 869 * @param __MODE__ USART communication mode. 870 * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) 871 */ 872 #define IS_USART_MODE(__MODE__) ((((__MODE__) & 0xFFFFFFF3U) == 0x00U) && ((__MODE__) != 0x00U)) 873 874 /** 875 * @brief Ensure that USART clock state is valid. 876 * @param __CLOCK__ USART clock state. 877 * @retval SET (__CLOCK__ is valid) or RESET (__CLOCK__ is invalid) 878 */ 879 #define IS_USART_CLOCK(__CLOCK__) (((__CLOCK__) == USART_CLOCK_DISABLE) || \ 880 ((__CLOCK__) == USART_CLOCK_ENABLE)) 881 882 /** 883 * @brief Ensure that USART frame polarity is valid. 884 * @param __CPOL__ USART frame polarity. 885 * @retval SET (__CPOL__ is valid) or RESET (__CPOL__ is invalid) 886 */ 887 #define IS_USART_POLARITY(__CPOL__) (((__CPOL__) == USART_POLARITY_LOW) || ((__CPOL__) == USART_POLARITY_HIGH)) 888 889 /** 890 * @brief Ensure that USART frame phase is valid. 891 * @param __CPHA__ USART frame phase. 892 * @retval SET (__CPHA__ is valid) or RESET (__CPHA__ is invalid) 893 */ 894 #define IS_USART_PHASE(__CPHA__) (((__CPHA__) == USART_PHASE_1EDGE) || ((__CPHA__) == USART_PHASE_2EDGE)) 895 896 /** 897 * @brief Ensure that USART frame last bit clock pulse setting is valid. 898 * @param __LASTBIT__ USART frame last bit clock pulse setting. 899 * @retval SET (__LASTBIT__ is valid) or RESET (__LASTBIT__ is invalid) 900 */ 901 #define IS_USART_LASTBIT(__LASTBIT__) (((__LASTBIT__) == USART_LASTBIT_DISABLE) || \ 902 ((__LASTBIT__) == USART_LASTBIT_ENABLE)) 903 904 /** 905 * @brief Ensure that USART request parameter is valid. 906 * @param __PARAM__ USART request parameter. 907 * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid) 908 */ 909 #define IS_USART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == USART_RXDATA_FLUSH_REQUEST) || \ 910 ((__PARAM__) == USART_TXDATA_FLUSH_REQUEST)) 911 912 /** 913 * @brief Ensure that USART Prescaler is valid. 914 * @param __CLOCKPRESCALER__ USART Prescaler value. 915 * @retval SET (__CLOCKPRESCALER__ is valid) or RESET (__CLOCKPRESCALER__ is invalid) 916 */ 917 #define IS_USART_PRESCALER(__CLOCKPRESCALER__) (((__CLOCKPRESCALER__) == USART_PRESCALER_DIV1) || \ 918 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV2) || \ 919 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV4) || \ 920 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV6) || \ 921 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV8) || \ 922 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV10) || \ 923 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV12) || \ 924 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV16) || \ 925 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV32) || \ 926 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV64) || \ 927 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV128) || \ 928 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV256)) 929 930 /** 931 * @} 932 */ 933 934 /* Include USART HAL Extended module */ 935 #include "stm32mp1xx_hal_usart_ex.h" 936 937 /* Exported functions --------------------------------------------------------*/ 938 /** @addtogroup USART_Exported_Functions USART Exported Functions 939 * @{ 940 */ 941 942 /** @addtogroup USART_Exported_Functions_Group1 Initialization and de-initialization functions 943 * @{ 944 */ 945 946 /* Initialization and de-initialization functions ****************************/ 947 HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart); 948 HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart); 949 void HAL_USART_MspInit(USART_HandleTypeDef *husart); 950 void HAL_USART_MspDeInit(USART_HandleTypeDef *husart); 951 952 /* Callbacks Register/UnRegister functions ***********************************/ 953 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 954 HAL_StatusTypeDef HAL_USART_RegisterCallback(USART_HandleTypeDef *husart, HAL_USART_CallbackIDTypeDef CallbackID, 955 pUSART_CallbackTypeDef pCallback); 956 HAL_StatusTypeDef HAL_USART_UnRegisterCallback(USART_HandleTypeDef *husart, HAL_USART_CallbackIDTypeDef CallbackID); 957 #endif /* USE_HAL_USART_REGISTER_CALLBACKS */ 958 959 /** 960 * @} 961 */ 962 963 /** @addtogroup USART_Exported_Functions_Group2 IO operation functions 964 * @{ 965 */ 966 967 /* IO operation functions *****************************************************/ 968 HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, const uint8_t *pTxData, uint16_t Size, 969 uint32_t Timeout); 970 HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout); 971 HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, const uint8_t *pTxData, uint8_t *pRxData, 972 uint16_t Size, uint32_t Timeout); 973 HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, const uint8_t *pTxData, uint16_t Size); 974 HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size); 975 HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, const uint8_t *pTxData, uint8_t *pRxData, 976 uint16_t Size); 977 HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, const uint8_t *pTxData, uint16_t Size); 978 HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size); 979 HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, const uint8_t *pTxData, uint8_t *pRxData, 980 uint16_t Size); 981 HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart); 982 HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart); 983 HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart); 984 /* Transfer Abort functions */ 985 HAL_StatusTypeDef HAL_USART_Abort(USART_HandleTypeDef *husart); 986 HAL_StatusTypeDef HAL_USART_Abort_IT(USART_HandleTypeDef *husart); 987 988 void HAL_USART_IRQHandler(USART_HandleTypeDef *husart); 989 void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart); 990 void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart); 991 void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart); 992 void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart); 993 void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart); 994 void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart); 995 void HAL_USART_AbortCpltCallback(USART_HandleTypeDef *husart); 996 997 /** 998 * @} 999 */ 1000 1001 /** @addtogroup USART_Exported_Functions_Group4 Peripheral State and Error functions 1002 * @{ 1003 */ 1004 1005 /* Peripheral State and Error functions ***************************************/ 1006 HAL_USART_StateTypeDef HAL_USART_GetState(USART_HandleTypeDef *husart); 1007 uint32_t HAL_USART_GetError(USART_HandleTypeDef *husart); 1008 1009 /** 1010 * @} 1011 */ 1012 1013 /** 1014 * @} 1015 */ 1016 1017 /** 1018 * @} 1019 */ 1020 1021 /** 1022 * @} 1023 */ 1024 1025 #ifdef __cplusplus 1026 } 1027 #endif 1028 1029 #endif /* STM32MP1xx_HAL_USART_H */ 1030