stm32h7xx_hal_usart.h 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071
  1. /**
  2. ******************************************************************************
  3. * @file stm32h7xx_hal_usart.h
  4. * @author MCD Application Team
  5. * @version V1.0.0
  6. * @date 21-April-2017
  7. * @brief Header file of USART HAL module.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
  12. *
  13. * Redistribution and use in source and binary forms, with or without modification,
  14. * are permitted provided that the following conditions are met:
  15. * 1. Redistributions of source code must retain the above copyright notice,
  16. * this list of conditions and the following disclaimer.
  17. * 2. Redistributions in binary form must reproduce the above copyright notice,
  18. * this list of conditions and the following disclaimer in the documentation
  19. * and/or other materials provided with the distribution.
  20. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  21. * may be used to endorse or promote products derived from this software
  22. * without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  27. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  28. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  31. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  32. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  33. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34. *
  35. ******************************************************************************
  36. */
  37. /* Define to prevent recursive inclusion -------------------------------------*/
  38. #ifndef __STM32H7xx_HAL_USART_H
  39. #define __STM3H7xx_HAL_USART_H
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. /* Includes ------------------------------------------------------------------*/
  44. #include "stm32h7xx_hal_def.h"
  45. /** @addtogroup STM32H7xx_HAL_Driver
  46. * @{
  47. */
  48. /** @addtogroup USART
  49. * @{
  50. */
  51. /* Exported types ------------------------------------------------------------*/
  52. /** @defgroup USART_Exported_Types USART Exported Types
  53. * @{
  54. */
  55. /**
  56. * @brief USART Init Structure definition
  57. */
  58. typedef struct
  59. {
  60. uint32_t BaudRate; /*!< This member configures the Usart communication baud rate.
  61. The baud rate is computed using the following formula:
  62. Baud Rate Register = ((PCLKx) / ((husart->Init.BaudRate))) */
  63. uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame.
  64. This parameter can be a value of @ref USARTEx_Word_Length */
  65. uint32_t StopBits; /*!< Specifies the number of stop bits transmitted.
  66. This parameter can be a value of @ref USART_Stop_Bits */
  67. uint32_t Parity; /*!< Specifies the parity mode.
  68. This parameter can be a value of @ref USART_Parity
  69. @note When parity is enabled, the computed parity is inserted
  70. at the MSB position of the transmitted data (9th bit when
  71. the word length is set to 9 data bits; 8th bit when the
  72. word length is set to 8 data bits). */
  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. uint32_t CLKPolarity; /*!< Specifies the steady state of the serial clock.
  76. This parameter can be a value of @ref USART_Clock_Polarity */
  77. uint32_t CLKPhase; /*!< Specifies the clock transition on which the bit capture is made.
  78. This parameter can be a value of @ref USART_Clock_Phase */
  79. uint32_t CLKLastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted
  80. data bit (MSB) has to be output on the SCLK pin in synchronous mode.
  81. This parameter can be a value of @ref USART_Last_Bit */
  82. uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the USART clock source.
  83. This parameter can be a value of @ref USART_Prescaler */
  84. uint32_t NSS; /*!< Specifies whether the NSS signal is managed by hardware (DIS_NSS pin)
  85. or by software . This parameter can be a value
  86. of @ref USART_Slave_Select_management */
  87. uint32_t SlaveMode; /*!< Enable/Disable UART SPI Slave Mode. This parameter can be a value
  88. of @ref USART_Slave_Mode */
  89. uint32_t FIFOMode; /*!< Specifies if the FIFO mode will be used. This parameter can be a value
  90. of @ref USART_FIFO_mode */
  91. uint32_t TXFIFOThreshold; /*!< Specifies the TXFIFO threshold level.
  92. This parameter can be a value of @ref USART_TXFIFO_threshold_level */
  93. uint32_t RXFIFOThreshold; /*!< Specifies the RXFIFO threshold level.
  94. This parameter can be a value of @ref USART_RXFIFO_threshold_level */
  95. }USART_InitTypeDef;
  96. /**
  97. * @brief HAL USART State structures definition
  98. */
  99. typedef enum
  100. {
  101. HAL_USART_STATE_RESET = 0x00U, /*!< Peripheral is not initialized */
  102. HAL_USART_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */
  103. HAL_USART_STATE_BUSY = 0x02U, /*!< an internal process is ongoing */
  104. HAL_USART_STATE_BUSY_TX = 0x12U, /*!< Data Transmission process is ongoing */
  105. HAL_USART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */
  106. HAL_USART_STATE_BUSY_TX_RX = 0x32U, /*!< Data Transmission Reception process is ongoing */
  107. HAL_USART_STATE_TIMEOUT = 0x03U, /*!< Timeout state */
  108. HAL_USART_STATE_ERROR = 0x04U /*!< Error */
  109. }HAL_USART_StateTypeDef;
  110. /**
  111. * @brief HAL USART Error Code structure definition
  112. */
  113. typedef enum
  114. {
  115. HAL_USART_ERROR_NONE = 0x00U, /*!< No error */
  116. HAL_USART_ERROR_PE = 0x01U, /*!< Parity error */
  117. HAL_USART_ERROR_NE = 0x02U, /*!< Noise error */
  118. HAL_USART_ERROR_FE = 0x04U, /*!< frame error */
  119. HAL_USART_ERROR_ORE = 0x08U, /*!< Overrun error */
  120. HAL_USART_ERROR_DMA = 0x10U, /*!< DMA transfer error */
  121. HAL_USART_ERROR_UDR = 0x11U /*!< SPI UnderRun error */
  122. }HAL_USART_ErrorTypeDef;
  123. /**
  124. * @brief USART clock sources definitions
  125. */
  126. typedef enum
  127. {
  128. USART_CLOCKSOURCE_D2PCLK1 = 0x00U, /*!< Domain2 PCLK1 clock source */
  129. USART_CLOCKSOURCE_D2PCLK2 = 0x01U, /*!< Domain2 PCLK2 clock source */
  130. USART_CLOCKSOURCE_D3PCLK1 = 0x02U, /*!< Domain3 PCLK1 clock source */
  131. USART_CLOCKSOURCE_PLL2 = 0x04U, /*!< PLL2Q clock source */
  132. USART_CLOCKSOURCE_HSI = 0x08U, /*!< HSI clock source */
  133. USART_CLOCKSOURCE_CSI = 0x10U, /*!< CSI clock source */
  134. USART_CLOCKSOURCE_LSE = 0x20U, /*!< LSE clock source */
  135. USART_CLOCKSOURCE_PLL3 = 0x40U, /*!< PLL3Q clock source */
  136. USART_CLOCKSOURCE_UNDEFINED = 0x80U /*!< Undefined clock source */
  137. }USART_ClockSourceTypeDef;
  138. /**
  139. * @brief USART handle Structure definition
  140. */
  141. typedef struct
  142. {
  143. USART_TypeDef *Instance; /*!< USART registers base address */
  144. USART_InitTypeDef Init; /*!< USART communication parameters */
  145. uint8_t *pTxBuffPtr; /*!< Pointer to USART Tx transfer Buffer */
  146. uint16_t TxXferSize; /*!< USART Tx Transfer size */
  147. __IO uint16_t TxXferCount; /*!< USART Tx Transfer Counter */
  148. uint8_t *pRxBuffPtr; /*!< Pointer to USART Rx transfer Buffer */
  149. uint16_t RxXferSize; /*!< USART Rx Transfer size */
  150. __IO uint16_t RxXferCount; /*!< USART Rx Transfer Counter */
  151. uint16_t Mask; /*!< USART Rx RDR register mask */
  152. DMA_HandleTypeDef *hdmatx; /*!< USART Tx DMA Handle parameters */
  153. DMA_HandleTypeDef *hdmarx; /*!< USART Rx DMA Handle parameters */
  154. HAL_LockTypeDef Lock; /*!< Locking object */
  155. __IO HAL_USART_StateTypeDef State; /*!< USART communication state */
  156. __IO uint32_t ErrorCode; /*!< USART Error code */
  157. }USART_HandleTypeDef;
  158. /**
  159. * @}
  160. */
  161. /* Exported constants --------------------------------------------------------*/
  162. /** @defgroup USART_Exported_Constants USART Exported Constants
  163. * @{
  164. */
  165. /** @defgroup USART_Stop_Bits USART Number of Stop Bits
  166. * @{
  167. */
  168. #define USART_STOPBITS_0_5 ((uint32_t)USART_CR2_STOP_0) /*!< USART frame with 0.5 stop bit */
  169. #define USART_STOPBITS_1 ((uint32_t)0x00000000U) /*!< USART frame with 1 stop bit */
  170. #define USART_STOPBITS_1_5 ((uint32_t)(USART_CR2_STOP_0 | USART_CR2_STOP_1)) /*!< USART frame with 1.5 stop bits */
  171. #define USART_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1) /*!< USART frame with 2 stop bits */
  172. /**
  173. * @}
  174. */
  175. /** @defgroup USART_Parity USART Parity
  176. * @{
  177. */
  178. #define USART_PARITY_NONE ((uint32_t)0x00000000U) /*!< No parity */
  179. #define USART_PARITY_EVEN ((uint32_t)USART_CR1_PCE) /*!< Even parity */
  180. #define USART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) /*!< Odd parity */
  181. /**
  182. * @}
  183. */
  184. /** @defgroup USART_Mode USART Mode
  185. * @{
  186. */
  187. #define USART_MODE_RX ((uint32_t)USART_CR1_RE) /*!< RX mode */
  188. #define USART_MODE_TX ((uint32_t)USART_CR1_TE) /*!< TX mode */
  189. #define USART_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE)) /*!< RX and TX mode */
  190. /**
  191. * @}
  192. */
  193. /** @defgroup USART_Over_Sampling USART Over Sampling
  194. * @{
  195. */
  196. #define USART_OVERSAMPLING_16 ((uint32_t)0x00000000U) /*!< Oversampling by 16 */
  197. #define USART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8) /*!< Oversampling by 8 */
  198. /**
  199. * @}
  200. */
  201. /** @defgroup USART_Clock USART Clock
  202. * @{
  203. */
  204. #define USART_CLOCK_DISABLE ((uint32_t)0x00000000U) /*!< USART clock disable */
  205. #define USART_CLOCK_ENABLE ((uint32_t)USART_CR2_CLKEN) /*!< USART clock enable */
  206. /**
  207. * @}
  208. */
  209. /** @defgroup USART_Clock_Polarity USART Clock Polarity
  210. * @{
  211. */
  212. #define USART_POLARITY_LOW ((uint32_t)0x00000000U) /*!< USART Clock signal is steady Low */
  213. #define USART_POLARITY_HIGH ((uint32_t)USART_CR2_CPOL) /*!< USART Clock signal is steady High */
  214. /**
  215. * @}
  216. */
  217. /** @defgroup USART_Clock_Phase USART Clock Phase
  218. * @{
  219. */
  220. #define USART_PHASE_1EDGE ((uint32_t)0x00000000U) /*!< USART frame phase on first clock transition */
  221. #define USART_PHASE_2EDGE ((uint32_t)USART_CR2_CPHA) /*!< USART frame phase on second clock transition */
  222. /**
  223. * @}
  224. */
  225. /** @defgroup USART_Last_Bit USART Last Bit
  226. * @{
  227. */
  228. #define USART_LASTBIT_DISABLE ((uint32_t)0x00000000U) /*!< USART frame last data bit clock pulse not output to SCLK pin */
  229. #define USART_LASTBIT_ENABLE ((uint32_t)USART_CR2_LBCL) /*!< USART frame last data bit clock pulse output to SCLK pin */
  230. /**
  231. * @}
  232. */
  233. /** @defgroup USART_Prescaler USART Prescaler
  234. * @{
  235. */
  236. #define USART_PRESCALER_DIV1 ((uint32_t)0x00000000U) /*!< USART clock /1 */
  237. #define USART_PRESCALER_DIV2 ((uint32_t)0x00000001U) /*!< USART clock /2 */
  238. #define USART_PRESCALER_DIV4 ((uint32_t)0x00000002U) /*!< USART clock /4 */
  239. #define USART_PRESCALER_DIV6 ((uint32_t)0x00000003U) /*!< USART clock /6 */
  240. #define USART_PRESCALER_DIV8 ((uint32_t)0x00000004U) /*!< USART clock /8 */
  241. #define USART_PRESCALER_DIV10 ((uint32_t)0x00000005U) /*!< USART clock /10 */
  242. #define USART_PRESCALER_DIV12 ((uint32_t)0x00000006U) /*!< USART clock /12 */
  243. #define USART_PRESCALER_DIV16 ((uint32_t)0x00000007U) /*!< USART clock /16 */
  244. #define USART_PRESCALER_DIV32 ((uint32_t)0x00000008U) /*!< USART clock /32 */
  245. #define USART_PRESCALER_DIV64 ((uint32_t)0x00000009U) /*!< USART clock /64 */
  246. #define USART_PRESCALER_DIV128 ((uint32_t)0x0000000AU) /*!< USART clock /128 */
  247. #define USART_PRESCALER_DIV256 ((uint32_t)0x0000000BU) /*!< USART clock /256 */
  248. /**
  249. * @}
  250. */
  251. /** @defgroup USART_Slave_Select_management USART Slave Select Management
  252. * @{
  253. */
  254. #define USART_NSS_HW ((uint32_t)0x00000000U) /*!< USART Hardware NSS management */
  255. #define USART_NSS_SW ((uint32_t)USART_CR2_DIS_NSS) /*!< USART Software NSS management */
  256. /**
  257. * @}
  258. */
  259. /** @defgroup USART_Slave_Mode USART Synchronous Slave mode enable
  260. * @{
  261. */
  262. #define USART_SLAVEMODE_DISABLE ((uint32_t)0x00000000U) /*!< USART SPI Slave Mode Enable */
  263. #define USART_SLAVEMODE_ENABLE ((uint32_t)USART_CR2_SLVEN) /*!< USART SPI Slave Mode Disable */
  264. /**
  265. * @}
  266. */
  267. /** @defgroup USART_FIFO_mode USART FIFO mode
  268. * @brief USART FIFO mode
  269. * @{
  270. */
  271. #define USART_FIFOMODE_DISABLE ((uint32_t)0x00000000U) /*!< FIFO mode disable */
  272. #define USART_FIFOMODE_ENABLE ((uint32_t)USART_CR1_FIFOEN) /*!< FIFO mode enable */
  273. /**
  274. * @}
  275. */
  276. /** @defgroup USART_TXFIFO_threshold_level USART TXFIFO threshold level
  277. * @brief USART TXFIFO level
  278. * @{
  279. */
  280. #define USART_TXFIFO_THRESHOLD_1_8 ((uint32_t)0x00000000U) /*!< TXFIFO reaches 1/8 of its depth */
  281. #define USART_TXFIFO_THRESHOLD_1_4 ((uint32_t)USART_CR3_TXFTCFG_0) /*!< TXFIFO reaches 1/4 of its depth */
  282. #define USART_TXFIFO_THRESHOLD_1_2 ((uint32_t)USART_CR3_TXFTCFG_1) /*!< TXFIFO reaches 1/2 of its depth */
  283. #define USART_TXFIFO_THRESHOLD_3_4 ((uint32_t)(USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1)) /*!< TXFIFO reaches 3/4 of its depth */
  284. #define USART_TXFIFO_THRESHOLD_7_8 ((uint32_t)USART_CR3_TXFTCFG_2) /*!< TXFIFO reaches 7/8 of its depth */
  285. #define USART_TXFIFO_THRESHOLD_8_8 ((uint32_t)(USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0)) /*!< TXFIFO becomes empty */
  286. /**
  287. * @}
  288. */
  289. /** @defgroup USART_RXFIFO_threshold_level USART RXFIFO threshold level
  290. * @brief USART RXFIFO level
  291. * @{
  292. */
  293. #define USART_RXFIFO_THRESHOLD_1_8 ((uint32_t)0x00000000U) /*!< RXFIFO reaches 1/8 of its depth */
  294. #define USART_RXFIFO_THRESHOLD_1_4 ((uint32_t)USART_CR3_RXFTCFG_0) /*!< RXFIFO reaches 1/4 of its depth */
  295. #define USART_RXFIFO_THRESHOLD_1_2 ((uint32_t)USART_CR3_RXFTCFG_1) /*!< RXFIFO reaches 1/2 of its depth */
  296. #define USART_RXFIFO_THRESHOLD_3_4 ((uint32_t)(USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1)) /*!< RXFIFO reaches 3/4 of its depth */
  297. #define USART_RXFIFO_THRESHOLD_7_8 ((uint32_t)USART_CR3_RXFTCFG_2) /*!< RXFIFO reaches 7/8 of its depth */
  298. #define USART_RXFIFO_THRESHOLD_8_8 ((uint32_t)(USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0)) /*!< RXFIFO becomes full */
  299. /**
  300. * @}
  301. */
  302. /** @defgroup USART_Request_Parameters USART Request Parameters
  303. * @{
  304. */
  305. #define USART_RXDATA_FLUSH_REQUEST ((uint32_t)USART_RQR_RXFRQ) /*!< Receive Data flush Request */
  306. #define USART_TXDATA_FLUSH_REQUEST ((uint32_t)USART_RQR_TXFRQ) /*!< Transmit data flush Request */
  307. /**
  308. * @}
  309. */
  310. /** @defgroup USART_Flags USART Flags
  311. * Elements values convention: 0xXXXX
  312. * - 0xXXXX : Flag mask in the ISR register
  313. * @{
  314. */
  315. #define USART_FLAG_TXFT USART_ISR_TXFT /*!< USART TXFIFO threshold flag */
  316. #define USART_FLAG_RXFT USART_ISR_RXFT /*!< USART RXFIFO threshold flag */
  317. #define USART_FLAG_RXFF USART_ISR_RXFF /*!< USART RXFIFO Fullflag */
  318. #define USART_FLAG_TXFE USART_ISR_TXFE /*!< USART TXFIFO Empty flag */
  319. #define USART_FLAG_REACK USART_ISR_REACK /*!< USART receive enable acknowledge flag */
  320. #define USART_FLAG_TEACK USART_ISR_TEACK /*!< USART transmit enable acknowledge flag */
  321. #define USART_FLAG_BUSY USART_ISR_BUSY /*!< USART busy flag */
  322. #define USART_FLAG_UDR USART_ISR_UDR /*!< USART SPI slave underrun error */
  323. #define USART_FLAG_LBDF USART_ISR_LBDF /*!< USART LIN break detection flag */
  324. #define USART_FLAG_TXE USART_ISR_TXE /*!< USART transmit data register empty */
  325. #define USART_FLAG_TXFNF USART_ISR_TXE /*!< USART TXFIFO not full */
  326. #define USART_FLAG_TC USART_ISR_TC /*!< USART transmission complete */
  327. #define USART_FLAG_RXNE USART_ISR_RXNE /*!< USART read data register not empty */
  328. #define USART_FLAG_RXFNE USART_ISR_RXNE /*!< USART RXFIFO not empty */
  329. #define USART_FLAG_IDLE USART_ISR_IDLE /*!< USART idle flag */
  330. #define USART_FLAG_ORE USART_ISR_ORE /*!< USART overrun error */
  331. #define USART_FLAG_NE USART_ISR_NE /*!< USART noise error */
  332. #define USART_FLAG_FE USART_ISR_FE /*!< USART frame error */
  333. #define USART_FLAG_PE USART_ISR_PE /*!< USART parity error */
  334. /**
  335. * @}
  336. */
  337. /** @defgroup USART_Interrupt_definition USART Interrupts Definition
  338. * Elements values convention: 0000ZZZZ0XXYYYYYb
  339. * - YYYYY : Interrupt source position in the XX register (5bits)
  340. * - XX : Interrupt source register (2bits)
  341. * - 01: CR1 register
  342. * - 10: CR2 register
  343. * - 11: CR3 register
  344. * - ZZZZ : Flag position in the ISR register(5bits instead of 4bits)
  345. * @{
  346. */
  347. #define USART_IT_PE ((uint16_t)0x0028U)
  348. #define USART_IT_TXE ((uint16_t)0x0727U)
  349. #define USART_IT_TC ((uint16_t)0x0626U)
  350. #define USART_IT_RXNE ((uint16_t)0x0525U)
  351. #define USART_IT_IDLE ((uint16_t)0x0424U)
  352. #define USART_IT_ERR ((uint16_t)0x0060U)
  353. #define USART_IT_RXFF ((uint16_t)0x183FU)
  354. #define USART_IT_TXFE ((uint16_t)0x173EU)
  355. #define USART_IT_RXFT ((uint16_t)0x1A7CU)
  356. #define USART_IT_TXFT ((uint16_t)0x1B77U)
  357. #define USART_IT_UDR ((uint16_t)0x0D00U)
  358. #define USART_IT_ORE ((uint16_t)0x0300U)
  359. #define USART_IT_NE ((uint16_t)0x0200U)
  360. #define USART_IT_FE ((uint16_t)0x0100U)
  361. /**
  362. * @}
  363. */
  364. /** @defgroup USART_IT_CLEAR_Flags USART Interruption Clear Flags
  365. * @{
  366. */
  367. #define USART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */
  368. #define USART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */
  369. #define USART_CLEAR_NEF USART_ICR_NCF /*!< Noise detected Clear Flag */
  370. #define USART_CLEAR_OREF USART_ICR_ORECF /*!< OverRun Error Clear Flag */
  371. #define USART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */
  372. #define USART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */
  373. #define USART_CLEAR_UDRCF USART_ICR_UDRCF /*!< UnderRun Error Clear Flag */
  374. #define USART_CLEAR_TXFECF USART_ICR_TXFECF /*!< TXFIFO empty clear flag */
  375. /**
  376. * @}
  377. */
  378. /** @defgroup USART_Interruption_Mask USART Interruption Flags Mask
  379. * @{
  380. */
  381. #define USART_IT_MASK ((uint16_t)0x001FU) /*!< USART interruptions flags mask */
  382. /**
  383. * @}
  384. */
  385. /**
  386. * @}
  387. */
  388. /* Exported macros -----------------------------------------------------------*/
  389. /** @defgroup USART_Exported_Macros USART Exported Macros
  390. * @{
  391. */
  392. /** @brief Reset USART handle state.
  393. * @param __HANDLE__: USART handle.
  394. * @retval None
  395. */
  396. #define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_USART_STATE_RESET)
  397. /** @brief Check whether the specified USART flag is set or not.
  398. * @param __HANDLE__: specifies the USART Handle
  399. * @param __FLAG__: specifies the flag to check.
  400. * This parameter can be one of the following values:
  401. * @arg USART_FLAG_TXFT: TXFIFO threshold flag
  402. * @arg USART_FLAG_RXFT: RXFIFO threshold flag
  403. * @arg USART_FLAG_RXFF: RXFIFO Full flag
  404. * @arg USART_FLAG_TXFE: TXFIFO Empty flag
  405. * @arg USART_FLAG_REACK: Receive enable ackowledge flag
  406. * @arg USART_FLAG_TEACK: Transmit enable ackowledge flag
  407. * @arg USART_FLAG_BUSY: Busy flag
  408. * @arg USART_FLAG_TXE: Transmit data register empty flag
  409. * @arg USART_FLAG_TC: Transmission Complete flag
  410. * @arg USART_FLAG_RXNE: Receive data register not empty flag
  411. * @arg USART_FLAG_IDLE: Idle Line detection flag
  412. * @arg USART_FLAG_ORE: OverRun Error flag
  413. * @arg USART_FLAG_UDR: UnderRun Error flag
  414. * @arg USART_FLAG_NE: Noise Error flag
  415. * @arg USART_FLAG_FE: Framing Error flag
  416. * @arg USART_FLAG_PE: Parity Error flag
  417. * @retval The new state of __FLAG__ (TRUE or FALSE).
  418. */
  419. #define __HAL_USART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__))
  420. /** @brief Clear the specified USART pending flag.
  421. * @param __HANDLE__: specifies the USART Handle.
  422. * @param __FLAG__: specifies the flag to check.
  423. * This parameter can be any combination of the following values:
  424. * @arg USART_FLAG_TXFT: TXFIFO threshold flag
  425. * @arg USART_FLAG_RXFT: RXFIFO threshold flag
  426. * @arg USART_FLAG_RXFF: RXFIFO Full flag
  427. * @arg USART_FLAG_TXFE: TXFIFO Empty flag
  428. * @arg USART_FLAG_REACK: Receive enable ackowledge flag
  429. * @arg USART_FLAG_TEACK: Transmit enable ackowledge flag
  430. * @arg USART_FLAG_WUF: Wake up from stop mode flag
  431. * @arg USART_FLAG_RWU: Receiver wake up flag (is the USART in mute mode)
  432. * @arg USART_FLAG_SBKF: Send Break flag
  433. * @arg USART_FLAG_CMF: Character match flag
  434. * @arg USART_FLAG_BUSY: Busy flag
  435. * @arg USART_FLAG_ABRF: Auto Baud rate detection flag
  436. * @arg USART_FLAG_ABRE: Auto Baud rate detection error flag
  437. * @arg USART_FLAG_RTOF: Receiver timeout flag
  438. * @arg USART_FLAG_LBD: LIN Break detection flag
  439. * @arg USART_FLAG_TXE: Transmit data register empty flag
  440. * @arg USART_FLAG_TC: Transmission Complete flag
  441. * @arg USART_FLAG_RXNE: Receive data register not empty flag
  442. * @arg USART_FLAG_IDLE: Idle Line detection flag
  443. * @arg USART_FLAG_ORE: OverRun Error flag
  444. * @arg USART_FLAG_NE: Noise Error flag
  445. * @arg USART_FLAG_FE: Framing Error flag
  446. * @arg USART_FLAG_PE: Parity Error flag
  447. * @retval The new state of __FLAG__ (TRUE or FALSE).
  448. */
  449. #define __HAL_USART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__))
  450. /** @brief Enable the specified USART interrupt.
  451. * @param __HANDLE__: specifies the USART Handle.
  452. * @param __INTERRUPT__: specifies the USART interrupt source to enable.
  453. * This parameter can be one of the following values:
  454. * @arg USART_IT_RXFF: RXFIFO Full interrupt
  455. * @arg USART_IT_TXFE: TXFIFO Empty interrupt
  456. * @arg USART_IT_RXFT: RXFIFO threshold interrupt
  457. * @arg USART_IT_TXFT: TXFIFO threshold interrupt
  458. * @arg USART_IT_TXE : Transmit Data Register empty interrupt
  459. * @arg USART_IT_TC : Transmission complete interrupt
  460. * @arg USART_IT_RXNE: Receive Data register not empty interrupt
  461. * @arg USART_IT_IDLE: Idle line detection interrupt
  462. * @arg USART_IT_PE : Parity Error interrupt
  463. * @arg USART_IT_ERR : Error interrupt(Frame error, noise error, overrun error)
  464. * @retval None
  465. */
  466. #define __HAL_USART_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \
  467. ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \
  468. ((__HANDLE__)->Instance->CR3 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))))
  469. /** @brief Disable the specified USART interrupt.
  470. * @param __HANDLE__: specifies the USART Handle.
  471. * @param __INTERRUPT__: specifies the USART interrupt source to disable.
  472. * This parameter can be one of the following values:
  473. * @arg USART_IT_RXFF: RXFIFO Full interrupt
  474. * @arg USART_IT_TXFE: TXFIFO Empty interrupt
  475. * @arg USART_IT_RXFT: RXFIFO threshold interrupt
  476. * @arg USART_IT_TXFT: TXFIFO threshold interrupt
  477. * @arg USART_IT_TXE : Transmit Data Register empty interrupt
  478. * @arg USART_IT_TC : Transmission complete interrupt
  479. * @arg USART_IT_RXNE: Receive Data register not empty interrupt
  480. * @arg USART_IT_IDLE: Idle line detection interrupt
  481. * @arg USART_IT_PE : Parity Error interrupt
  482. * @arg USART_IT_ERR : Error interrupt(Frame error, noise error, overrun error)
  483. * @retval None
  484. */
  485. #define __HAL_USART_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \
  486. ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \
  487. ((__HANDLE__)->Instance->CR3 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))))
  488. /** @brief Check whether the specified USART interrupt has occurred or not.
  489. * @param __HANDLE__: specifies the USART Handle.
  490. * @param __IT__: specifies the USART interrupt source to check.
  491. * This parameter can be one of the following values:
  492. * @arg USART_IT_RXFF: RXFIFO Full interrupt
  493. * @arg USART_IT_TXFE: TXFIFO Empty interrupt
  494. * @arg USART_IT_RXFT: RXFIFO threshold interrupt
  495. * @arg USART_IT_TXFT: TXFIFO threshold interrupt
  496. * @arg USART_IT_TXE : Transmit Data Register empty interrupt
  497. * @arg USART_IT_TC : Transmission complete interrupt
  498. * @arg USART_IT_RXNE: Receive Data register not empty interrupt
  499. * @arg USART_IT_IDLE: Idle line detection interrupt
  500. * @arg USART_IT_ORE : OverRun Error interrupt
  501. * @arg USART_IT_UDR : UnderRun Error interrupt
  502. * @arg USART_IT_NE : Noise Error interrupt
  503. * @arg USART_IT_FE : Framing Error interrupt
  504. * @arg USART_IT_PE : Parity Error interrupt
  505. * @retval The new state of __IT__ (TRUE or FALSE).
  506. */
  507. #define __HAL_USART_GET_IT(__HANDLE__, __IT__) ((__HANDLE__)->Instance->ISR & ((uint32_t)1 << ((__IT__)>> 0x08)))
  508. /** @brief Check whether the specified USART interrupt source is enabled or not.
  509. * @param __HANDLE__: specifies the USART Handle.
  510. * @param __IT__: specifies the USART interrupt source to check.
  511. * This parameter can be one of the following values:
  512. * @arg USART_IT_RXFF: RXFIFO Full interrupt
  513. * @arg USART_IT_TXFE: TXFIFO Empty interrupt
  514. * @arg USART_IT_RXFT: RXFIFO threshold interrupt
  515. * @arg USART_IT_TXFT: TXFIFO threshold interrupt
  516. * @arg USART_IT_TXE : Transmit Data Register empty interrupt
  517. * @arg USART_IT_TC : Transmission complete interrupt
  518. * @arg USART_IT_RXNE: Receive Data register not empty interrupt
  519. * @arg USART_IT_IDLE: Idle line detection interrupt
  520. * @arg USART_IT_ORE : OverRun Error interrupt
  521. * @arg USART_IT_NE : Noise Error interrupt
  522. * @arg USART_IT_FE : Framing Error interrupt
  523. * @arg USART_IT_PE : Parity Error interrupt
  524. * @retval The new state of __IT__ (TRUE or FALSE).
  525. */
  526. #define __HAL_USART_GET_IT_SOURCE(__HANDLE__, __IT__) ((((((uint8_t)(__IT__)) >> 5) == 1)? (__HANDLE__)->Instance->CR1:(((((uint8_t)(__IT__)) >> 5) == 2)? \
  527. (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & ((uint32_t)1 << \
  528. (((uint16_t)(__IT__)) & USART_IT_MASK)))
  529. /** @brief Clear the specified USART ISR flag, in setting the proper ICR register flag.
  530. * @param __HANDLE__: specifies the USART Handle.
  531. * @param __IT_CLEAR__: specifies the interrupt clear register flag that needs to be set
  532. * to clear the corresponding interrupt.
  533. * This parameter can be one of the following values:
  534. * @arg USART_CLEAR_PEF: Parity Error Clear Flag
  535. * @arg USART_CLEAR_FEF: Framing Error Clear Flag
  536. * @arg USART_CLEAR_NEF: Noise detected Clear Flag
  537. * @arg USART_CLEAR_OREF: OverRun Error Clear Flag
  538. * @arg USART_CLEAR_IDLEF: IDLE line detected Clear Flag
  539. * @arg USART_CLEAR_TCF: Transmission Complete Clear Flag
  540. * @arg USART_CLEAR_UDRCF: UnderRun Error Clear Flag
  541. * @arg USART_CLEAR_TXFECF: TXFIFO empty Clear Flag
  542. * @retval None
  543. */
  544. #define __HAL_USART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__))
  545. /** @brief Clear the USART PE pending flag.
  546. * @param __HANDLE__: specifies the USART Handle.
  547. * @retval None
  548. */
  549. #define __HAL_USART_CLEAR_PEFLAG(__HANDLE__) __HAL_USART_CLEAR_IT((__HANDLE__), USART_CLEAR_PEF)
  550. /** @brief Clear the USART FE pending flag.
  551. * @param __HANDLE__: specifies the USART Handle.
  552. * @retval None
  553. */
  554. #define __HAL_USART_CLEAR_FEFLAG(__HANDLE__) __HAL_USART_CLEAR_IT((__HANDLE__), USART_CLEAR_FEF)
  555. /** @brief Clear the USART NE pending flag.
  556. * @param __HANDLE__: specifies the USART Handle.
  557. * @retval None
  558. */
  559. #define __HAL_USART_CLEAR_NEFLAG(__HANDLE__) __HAL_USART_CLEAR_IT((__HANDLE__), USART_CLEAR_NEF)
  560. /** @brief Clear the USART ORE pending flag.
  561. * @param __HANDLE__: specifies the USART Handle.
  562. * @retval None
  563. */
  564. #define __HAL_USART_CLEAR_OREFLAG(__HANDLE__) __HAL_USART_CLEAR_IT((__HANDLE__), USART_CLEAR_OREF)
  565. /** @brief Clear the USART IDLE pending flag.
  566. * @param __HANDLE__: specifies the USART Handle.
  567. * @retval None
  568. */
  569. #define __HAL_USART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_USART_CLEAR_IT((__HANDLE__), USART_CLEAR_IDLEF)
  570. /** @brief Clear the USART UDR pending flag.
  571. * @param __HANDLE__: specifies the USART Handle.
  572. * @retval None
  573. */
  574. #define __HAL_USART_CLEAR_UDRFLAG(__HANDLE__) __HAL_USART_CLEAR_IT((__HANDLE__), USART_CLEAR_UDRCF)
  575. /** @brief Clear the USART TX FIFO empty clear flag.
  576. * @param __HANDLE__: specifies the USART Handle.
  577. * @retval None
  578. */
  579. #define __HAL_USART_CLEAR_TXFECF(__HANDLE__) __HAL_USART_CLEAR_IT((__HANDLE__), USART_CLEAR_TXFECF)
  580. /** @brief Set a specific USART request flag.
  581. * @param __HANDLE__: specifies the USART Handle.
  582. * @param __REQ__: specifies the request flag to set.
  583. * This parameter can be one of the following values:
  584. * @arg USART_RXDATA_FLUSH_REQUEST: Receive Data flush Request
  585. * @arg USART_TXDATA_FLUSH_REQUEST: Transmit data flush Request
  586. *
  587. * @retval None
  588. */
  589. #define __HAL_USART_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (__REQ__))
  590. /** @brief Enable the USART one bit sample method.
  591. * @param __HANDLE__: specifies the USART Handle.
  592. * @retval None
  593. */
  594. #define __HAL_USART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT)
  595. /** @brief Disable the USART one bit sample method.
  596. * @param __HANDLE__: specifies the USART Handle.
  597. * @retval None
  598. */
  599. #define __HAL_USART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint32_t)~((uint32_t)USART_CR3_ONEBIT))
  600. /** @brief Enable USART.
  601. * @param __HANDLE__: specifies the USART Handle.
  602. * @retval None
  603. */
  604. #define __HAL_USART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE)
  605. /** @brief Disable USART.
  606. * @param __HANDLE__: specifies the USART Handle.
  607. * @retval None
  608. */
  609. #define __HAL_USART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE)
  610. /**
  611. * @}
  612. */
  613. /* Private variables -----------------------------------------------------*/
  614. /** @defgroup USART_Private_Variables USART Private Variables
  615. * @{
  616. */
  617. static const uint16_t USARTPrescTable[12] = {1, 2, 4, 6, 8, 10, 12, 16, 32, 64, 128, 256};
  618. /**
  619. * @}
  620. */
  621. /* Private macros --------------------------------------------------------*/
  622. /** @defgroup USART_Private_Macros USART Private Macros
  623. * @{
  624. */
  625. /** @brief Report the USART clock source.
  626. * @param __HANDLE__: specifies the USART Handle.
  627. * @param __CLOCKSOURCE__: output variable.
  628. * @retval the USART clocking source, written in __CLOCKSOURCE__.
  629. */
  630. #define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  631. do { \
  632. if((__HANDLE__)->Instance == USART1) \
  633. { \
  634. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  635. { \
  636. case RCC_USART1CLKSOURCE_D2PCLK2: \
  637. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_D2PCLK2; \
  638. break; \
  639. case RCC_USART1CLKSOURCE_PLL2: \
  640. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL2; \
  641. break; \
  642. case RCC_USART1CLKSOURCE_PLL3: \
  643. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL3; \
  644. break; \
  645. case RCC_USART1CLKSOURCE_HSI: \
  646. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
  647. break; \
  648. case RCC_USART1CLKSOURCE_CSI: \
  649. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_CSI; \
  650. break; \
  651. case RCC_USART1CLKSOURCE_LSE: \
  652. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
  653. break; \
  654. } \
  655. } \
  656. else if((__HANDLE__)->Instance == USART2) \
  657. { \
  658. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  659. { \
  660. case RCC_USART2CLKSOURCE_D2PCLK1: \
  661. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_D2PCLK1; \
  662. break; \
  663. case RCC_USART2CLKSOURCE_PLL2: \
  664. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL2; \
  665. break; \
  666. case RCC_USART2CLKSOURCE_PLL3: \
  667. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL3; \
  668. break; \
  669. case RCC_USART2CLKSOURCE_HSI: \
  670. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
  671. break; \
  672. case RCC_USART2CLKSOURCE_CSI: \
  673. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_CSI; \
  674. break; \
  675. case RCC_USART2CLKSOURCE_LSE: \
  676. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
  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. } \
  703. } \
  704. else if((__HANDLE__)->Instance == USART6) \
  705. { \
  706. switch(__HAL_RCC_GET_USART6_SOURCE()) \
  707. { \
  708. case RCC_USART6CLKSOURCE_D2PCLK2: \
  709. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_D2PCLK2; \
  710. break; \
  711. case RCC_USART6CLKSOURCE_PLL2: \
  712. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL2; \
  713. break; \
  714. case RCC_USART6CLKSOURCE_PLL3: \
  715. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PLL3; \
  716. break; \
  717. case RCC_USART6CLKSOURCE_HSI: \
  718. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
  719. break; \
  720. case RCC_USART6CLKSOURCE_CSI: \
  721. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_CSI; \
  722. break; \
  723. case RCC_USART6CLKSOURCE_LSE: \
  724. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
  725. break; \
  726. } \
  727. } \
  728. } while(0)
  729. /** @brief BRR division operation to set BRR register in 8-bit oversampling mode.
  730. * @param __PCLK__: USART clock.
  731. * @param __BAUD__: Baud rate set by the user.
  732. * @param __PRESCALER__: UART prescaler value.
  733. * @retval Division result
  734. */
  735. #define USART_DIV_SAMPLING8(__PCLK__, __BAUD__, __PRESCALER__) (((((__PCLK__)/USARTPrescTable[(__PRESCALER__)])*2) + ((__BAUD__)/2)) / (__BAUD__))
  736. /** @brief Check USART Baud rate.
  737. * @param __BAUDRATE__: Baudrate specified by the user.
  738. * The maximum Baud Rate is derived from the maximum clock on H7 (i.e. 100 MHz)
  739. * divided by the smallest oversampling used on the USART (i.e. 8).
  740. * @retval Test result (TRUE or FALSE).
  741. */
  742. #define IS_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 12500001U)
  743. /**
  744. * @brief Ensure that USART frame number of stop bits is valid.
  745. * @param __STOPBITS__: USART frame number of stop bits.
  746. * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid)
  747. */
  748. #define IS_USART_STOPBITS(__STOPBITS__) (((__STOPBITS__) == USART_STOPBITS_0_5) || \
  749. ((__STOPBITS__) == USART_STOPBITS_1) || \
  750. ((__STOPBITS__) == USART_STOPBITS_1_5) || \
  751. ((__STOPBITS__) == USART_STOPBITS_2))
  752. /**
  753. * @brief Ensure that USART frame parity is valid.
  754. * @param __PARITY__: USART frame parity.
  755. * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid)
  756. */
  757. #define IS_USART_PARITY(__PARITY__) (((__PARITY__) == USART_PARITY_NONE) || \
  758. ((__PARITY__) == USART_PARITY_EVEN) || \
  759. ((__PARITY__) == USART_PARITY_ODD))
  760. /**
  761. * @brief Ensure that USART communication mode is valid.
  762. * @param __MODE__: USART communication mode.
  763. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid)
  764. */
  765. #define IS_USART_MODE(__MODE__) ((((__MODE__) & (uint32_t)0xFFFFFFF3U) == 0x00U) && ((__MODE__) != (uint32_t)0x00U))
  766. /**
  767. * @brief Ensure that USART oversampling is valid.
  768. * @param __SAMPLING__: USART oversampling.
  769. * @retval SET (__SAMPLING__ is valid) or RESET (__SAMPLING__ is invalid)
  770. */
  771. #define IS_USART_OVERSAMPLING(__SAMPLING__) (((__SAMPLING__) == USART_OVERSAMPLING_16) || \
  772. ((__SAMPLING__) == USART_OVERSAMPLING_8))
  773. /**
  774. * @brief Ensure that USART clock state is valid.
  775. * @param __CLOCK__: USART clock state.
  776. * @retval SET (__CLOCK__ is valid) or RESET (__CLOCK__ is invalid)
  777. */
  778. #define IS_USART_CLOCK(__CLOCK__) (((__CLOCK__) == USART_CLOCK_DISABLE) || \
  779. ((__CLOCK__) == USART_CLOCK_ENABLE))
  780. /**
  781. * @brief Ensure that USART frame polarity is valid.
  782. * @param __CPOL__: USART frame polarity.
  783. * @retval SET (__CPOL__ is valid) or RESET (__CPOL__ is invalid)
  784. */
  785. #define IS_USART_POLARITY(__CPOL__) (((__CPOL__) == USART_POLARITY_LOW) || ((__CPOL__) == USART_POLARITY_HIGH))
  786. /**
  787. * @brief Ensure that USART frame phase is valid.
  788. * @param __CPHA__: USART frame phase.
  789. * @retval SET (__CPHA__ is valid) or RESET (__CPHA__ is invalid)
  790. */
  791. #define IS_USART_PHASE(__CPHA__) (((__CPHA__) == USART_PHASE_1EDGE) || ((__CPHA__) == USART_PHASE_2EDGE))
  792. /**
  793. * @brief Ensure that USART frame last bit clock pulse setting is valid.
  794. * @param __LASTBIT__: USART frame last bit clock pulse setting.
  795. * @retval SET (__LASTBIT__ is valid) or RESET (__LASTBIT__ is invalid)
  796. */
  797. #define IS_USART_LASTBIT(__LASTBIT__) (((__LASTBIT__) == USART_LASTBIT_DISABLE) || \
  798. ((__LASTBIT__) == USART_LASTBIT_ENABLE))
  799. /**
  800. * @brief Ensure that USART request parameter is valid.
  801. * @param __PARAM__: USART request parameter.
  802. * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid)
  803. */
  804. #define IS_USART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == USART_RXDATA_FLUSH_REQUEST) || \
  805. ((__PARAM__) == USART_TXDATA_FLUSH_REQUEST))
  806. /**
  807. * @brief Ensure that USART Prescaler is valid.
  808. * @param __PRESCALER__: USART Prescaler value.
  809. * @retval SET (__PRESCALER__ is valid) or RESET (__PRESCALER__ is invalid)
  810. */
  811. #define IS_USART_PRESCALER(__PRESCALER__) (((__PRESCALER__) == USART_PRESCALER_DIV1) || \
  812. ((__PRESCALER__) == USART_PRESCALER_DIV2) || \
  813. ((__PRESCALER__) == USART_PRESCALER_DIV4) || \
  814. ((__PRESCALER__) == USART_PRESCALER_DIV6) || \
  815. ((__PRESCALER__) == USART_PRESCALER_DIV8) || \
  816. ((__PRESCALER__) == USART_PRESCALER_DIV10) || \
  817. ((__PRESCALER__) == USART_PRESCALER_DIV12) || \
  818. ((__PRESCALER__) == USART_PRESCALER_DIV16) || \
  819. ((__PRESCALER__) == USART_PRESCALER_DIV32) || \
  820. ((__PRESCALER__) == USART_PRESCALER_DIV64) || \
  821. ((__PRESCALER__) == USART_PRESCALER_DIV128) || \
  822. ((__PRESCALER__) == USART_PRESCALER_DIV256))
  823. /**
  824. * @brief Ensure that USART NSS is valid.
  825. * @param __NSS__: USART Negative Slave Select pin management.
  826. * @retval SET (__NSS__ is valid) or RESET (__NSS__ is invalid)
  827. */
  828. #define IS_USART_NSS(__NSS__) (((__NSS__) == USART_NSS_HW) || ((__NSS__) == USART_NSS_SW))
  829. /**
  830. * @brief Ensure that USART FIFO mode is valid.
  831. * @param __STATE__: USART FIFO mode.
  832. * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid)
  833. */
  834. #define IS_USART_FIFO_MODE_STATE(__STATE__) (((__STATE__) == USART_FIFOMODE_DISABLE ) || \
  835. ((__STATE__) == USART_FIFOMODE_ENABLE))
  836. /**
  837. * @brief Ensure that USART TXFIFO threshold level is valid.
  838. * @param __THRESHOLD__: USART TXFIFO threshold level.
  839. * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid)
  840. */
  841. #define IS_USART_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_8) || \
  842. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_4) || \
  843. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_2) || \
  844. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_3_4) || \
  845. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_7_8) || \
  846. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_8_8))
  847. /**
  848. * @brief Ensure that USART RXFIFO threshold level is valid.
  849. * @param __THRESHOLD__: USART RXFIFO threshold level.
  850. * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid)
  851. */
  852. #define IS_USART_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_8) || \
  853. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_4) || \
  854. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_2) || \
  855. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_3_4) || \
  856. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_7_8) || \
  857. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_8_8))
  858. /**
  859. * @brief Ensure that USART Slave Mode is valid.
  860. * @param __STATE__: USART Slave Mode.
  861. * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid)
  862. */
  863. #define IS_USART_SLAVEMODE(__STATE__) (((__STATE__) == USART_SLAVEMODE_DISABLE ) || \
  864. ((__STATE__) == USART_SLAVEMODE_ENABLE))
  865. /**
  866. * @}
  867. */
  868. /* Include USART HAL Extended module */
  869. #include "stm32h7xx_hal_usart_ex.h"
  870. /* Exported functions --------------------------------------------------------*/
  871. /** @addtogroup USART_Exported_Functions USART Exported Functions
  872. * @{
  873. */
  874. /** @addtogroup USART_Exported_Functions_Group1 Initialization and de-initialization functions
  875. * @{
  876. */
  877. /* Initialization and de-initialization functions ****************************/
  878. HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart);
  879. HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart);
  880. void HAL_USART_MspInit(USART_HandleTypeDef *husart);
  881. void HAL_USART_MspDeInit(USART_HandleTypeDef *husart);
  882. /**
  883. * @}
  884. */
  885. /** @addtogroup USART_Exported_Functions_Group2 IO operation functions
  886. * @{
  887. */
  888. /* IO operation functions *****************************************************/
  889. HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size, uint32_t Timeout);
  890. HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
  891. HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
  892. HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
  893. HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
  894. HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
  895. HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
  896. HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
  897. HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
  898. HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart);
  899. HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart);
  900. HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart);
  901. /* Transfer Abort functions */
  902. HAL_StatusTypeDef HAL_USART_Abort(USART_HandleTypeDef *husart);
  903. HAL_StatusTypeDef HAL_USART_Abort_IT(USART_HandleTypeDef *husart);
  904. void HAL_USART_IRQHandler(USART_HandleTypeDef *husart);
  905. void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart);
  906. void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart);
  907. void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart);
  908. void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart);
  909. void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart);
  910. void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart);
  911. void HAL_USART_AbortCpltCallback (USART_HandleTypeDef *husart);
  912. /**
  913. * @}
  914. */
  915. /* Peripheral Control functions ***********************************************/
  916. /** @addtogroup USART_Exported_Functions_Group4 Peripheral State and Error functions
  917. * @{
  918. */
  919. /* Peripheral State and Error functions ***************************************/
  920. HAL_USART_StateTypeDef HAL_USART_GetState(USART_HandleTypeDef *husart);
  921. uint32_t HAL_USART_GetError(USART_HandleTypeDef *husart);
  922. /**
  923. * @}
  924. */
  925. /**
  926. * @}
  927. */
  928. /**
  929. * @}
  930. */
  931. /**
  932. * @}
  933. */
  934. #ifdef __cplusplus
  935. }
  936. #endif
  937. #endif /* __STM32H7xx_HAL_USART_H */
  938. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/