You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1176 lines
63 KiB

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