stm32g4xx_hal_usart_ex.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. /**
  2. ******************************************************************************
  3. * @file stm32g4xx_hal_usart_ex.h
  4. * @author MCD Application Team
  5. * @brief Header file of USART HAL Extended module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2019 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file
  13. * in the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. *
  16. ******************************************************************************
  17. */
  18. /* Define to prevent recursive inclusion -------------------------------------*/
  19. #ifndef STM32G4xx_HAL_USART_EX_H
  20. #define STM32G4xx_HAL_USART_EX_H
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /* Includes ------------------------------------------------------------------*/
  25. #include "stm32g4xx_hal_def.h"
  26. /** @addtogroup STM32G4xx_HAL_Driver
  27. * @{
  28. */
  29. /** @addtogroup USARTEx
  30. * @{
  31. */
  32. /* Exported types ------------------------------------------------------------*/
  33. /* Exported constants --------------------------------------------------------*/
  34. /** @defgroup USARTEx_Exported_Constants USARTEx Exported Constants
  35. * @{
  36. */
  37. /** @defgroup USARTEx_Word_Length USARTEx Word Length
  38. * @{
  39. */
  40. #define USART_WORDLENGTH_7B (USART_CR1_M1) /*!< 7-bit long USART frame */
  41. #define USART_WORDLENGTH_8B (0x00000000U) /*!< 8-bit long USART frame */
  42. #define USART_WORDLENGTH_9B (USART_CR1_M0) /*!< 9-bit long USART frame */
  43. /**
  44. * @}
  45. */
  46. /** @defgroup USARTEx_Slave_Select_management USARTEx Slave Select Management
  47. * @{
  48. */
  49. #define USART_NSS_HARD 0x00000000U /*!< SPI slave selection depends on NSS input pin */
  50. #define USART_NSS_SOFT USART_CR2_DIS_NSS /*!< SPI slave is always selected and NSS input pin is ignored */
  51. /**
  52. * @}
  53. */
  54. /** @defgroup USARTEx_Slave_Mode USARTEx Synchronous Slave mode enable
  55. * @brief USART SLAVE mode
  56. * @{
  57. */
  58. #define USART_SLAVEMODE_DISABLE 0x00000000U /*!< USART SPI Slave Mode Enable */
  59. #define USART_SLAVEMODE_ENABLE USART_CR2_SLVEN /*!< USART SPI Slave Mode Disable */
  60. /**
  61. * @}
  62. */
  63. /** @defgroup USARTEx_FIFO_mode USARTEx FIFO mode
  64. * @brief USART FIFO mode
  65. * @{
  66. */
  67. #define USART_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable */
  68. #define USART_FIFOMODE_ENABLE USART_CR1_FIFOEN /*!< FIFO mode enable */
  69. /**
  70. * @}
  71. */
  72. /** @defgroup USARTEx_TXFIFO_threshold_level USARTEx TXFIFO threshold level
  73. * @brief USART TXFIFO level
  74. * @{
  75. */
  76. #define USART_TXFIFO_THRESHOLD_1_8 0x00000000U /*!< TXFIFO reaches 1/8 of its depth */
  77. #define USART_TXFIFO_THRESHOLD_1_4 USART_CR3_TXFTCFG_0 /*!< TXFIFO reaches 1/4 of its depth */
  78. #define USART_TXFIFO_THRESHOLD_1_2 USART_CR3_TXFTCFG_1 /*!< TXFIFO reaches 1/2 of its depth */
  79. #define USART_TXFIFO_THRESHOLD_3_4 (USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1) /*!< TXFIFO reaches 3/4 of its depth */
  80. #define USART_TXFIFO_THRESHOLD_7_8 USART_CR3_TXFTCFG_2 /*!< TXFIFO reaches 7/8 of its depth */
  81. #define USART_TXFIFO_THRESHOLD_8_8 (USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0) /*!< TXFIFO becomes empty */
  82. /**
  83. * @}
  84. */
  85. /** @defgroup USARTEx_RXFIFO_threshold_level USARTEx RXFIFO threshold level
  86. * @brief USART RXFIFO level
  87. * @{
  88. */
  89. #define USART_RXFIFO_THRESHOLD_1_8 0x00000000U /*!< RXFIFO FIFO reaches 1/8 of its depth */
  90. #define USART_RXFIFO_THRESHOLD_1_4 USART_CR3_RXFTCFG_0 /*!< RXFIFO FIFO reaches 1/4 of its depth */
  91. #define USART_RXFIFO_THRESHOLD_1_2 USART_CR3_RXFTCFG_1 /*!< RXFIFO FIFO reaches 1/2 of its depth */
  92. #define USART_RXFIFO_THRESHOLD_3_4 (USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1) /*!< RXFIFO FIFO reaches 3/4 of its depth */
  93. #define USART_RXFIFO_THRESHOLD_7_8 USART_CR3_RXFTCFG_2 /*!< RXFIFO FIFO reaches 7/8 of its depth */
  94. #define USART_RXFIFO_THRESHOLD_8_8 (USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0) /*!< RXFIFO FIFO becomes full */
  95. /**
  96. * @}
  97. */
  98. /**
  99. * @}
  100. */
  101. /* Private macros ------------------------------------------------------------*/
  102. /** @defgroup USARTEx_Private_Macros USARTEx Private Macros
  103. * @{
  104. */
  105. /** @brief Compute the USART mask to apply to retrieve the received data
  106. * according to the word length and to the parity bits activation.
  107. * @note If PCE = 1, the parity bit is not included in the data extracted
  108. * by the reception API().
  109. * This masking operation is not carried out in the case of
  110. * DMA transfers.
  111. * @param __HANDLE__ specifies the USART Handle.
  112. * @retval None, the mask to apply to USART RDR register is stored in (__HANDLE__)->Mask field.
  113. */
  114. #define USART_MASK_COMPUTATION(__HANDLE__) \
  115. do { \
  116. if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_9B) \
  117. { \
  118. if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \
  119. { \
  120. (__HANDLE__)->Mask = 0x01FFU; \
  121. } \
  122. else \
  123. { \
  124. (__HANDLE__)->Mask = 0x00FFU; \
  125. } \
  126. } \
  127. else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_8B) \
  128. { \
  129. if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \
  130. { \
  131. (__HANDLE__)->Mask = 0x00FFU; \
  132. } \
  133. else \
  134. { \
  135. (__HANDLE__)->Mask = 0x007FU; \
  136. } \
  137. } \
  138. else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_7B) \
  139. { \
  140. if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \
  141. { \
  142. (__HANDLE__)->Mask = 0x007FU; \
  143. } \
  144. else \
  145. { \
  146. (__HANDLE__)->Mask = 0x003FU; \
  147. } \
  148. } \
  149. else \
  150. { \
  151. (__HANDLE__)->Mask = 0x0000U; \
  152. } \
  153. } while(0U)
  154. /**
  155. * @brief Ensure that USART frame length is valid.
  156. * @param __LENGTH__ USART frame length.
  157. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
  158. */
  159. #define IS_USART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == USART_WORDLENGTH_7B) || \
  160. ((__LENGTH__) == USART_WORDLENGTH_8B) || \
  161. ((__LENGTH__) == USART_WORDLENGTH_9B))
  162. /**
  163. * @brief Ensure that USART Negative Slave Select (NSS) pin management is valid.
  164. * @param __NSS__ USART Negative Slave Select pin management.
  165. * @retval SET (__NSS__ is valid) or RESET (__NSS__ is invalid)
  166. */
  167. #define IS_USART_NSS(__NSS__) (((__NSS__) == USART_NSS_HARD) || \
  168. ((__NSS__) == USART_NSS_SOFT))
  169. /**
  170. * @brief Ensure that USART Slave Mode is valid.
  171. * @param __STATE__ USART Slave Mode.
  172. * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid)
  173. */
  174. #define IS_USART_SLAVEMODE(__STATE__) (((__STATE__) == USART_SLAVEMODE_DISABLE ) || \
  175. ((__STATE__) == USART_SLAVEMODE_ENABLE))
  176. /**
  177. * @brief Ensure that USART FIFO mode is valid.
  178. * @param __STATE__ USART FIFO mode.
  179. * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid)
  180. */
  181. #define IS_USART_FIFO_MODE_STATE(__STATE__) (((__STATE__) == USART_FIFOMODE_DISABLE ) || \
  182. ((__STATE__) == USART_FIFOMODE_ENABLE))
  183. /**
  184. * @brief Ensure that USART TXFIFO threshold level is valid.
  185. * @param __THRESHOLD__ USART TXFIFO threshold level.
  186. * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid)
  187. */
  188. #define IS_USART_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_8) || \
  189. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_4) || \
  190. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_2) || \
  191. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_3_4) || \
  192. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_7_8) || \
  193. ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_8_8))
  194. /**
  195. * @brief Ensure that USART RXFIFO threshold level is valid.
  196. * @param __THRESHOLD__ USART RXFIFO threshold level.
  197. * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid)
  198. */
  199. #define IS_USART_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_8) || \
  200. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_4) || \
  201. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_2) || \
  202. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_3_4) || \
  203. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_7_8) || \
  204. ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_8_8))
  205. /**
  206. * @}
  207. */
  208. /* Exported functions --------------------------------------------------------*/
  209. /** @addtogroup USARTEx_Exported_Functions
  210. * @{
  211. */
  212. /** @addtogroup USARTEx_Exported_Functions_Group1
  213. * @{
  214. */
  215. /* IO operation functions *****************************************************/
  216. void HAL_USARTEx_RxFifoFullCallback(USART_HandleTypeDef *husart);
  217. void HAL_USARTEx_TxFifoEmptyCallback(USART_HandleTypeDef *husart);
  218. /**
  219. * @}
  220. */
  221. /** @addtogroup USARTEx_Exported_Functions_Group2
  222. * @{
  223. */
  224. /* Peripheral Control functions ***********************************************/
  225. HAL_StatusTypeDef HAL_USARTEx_EnableSlaveMode(USART_HandleTypeDef *husart);
  226. HAL_StatusTypeDef HAL_USARTEx_DisableSlaveMode(USART_HandleTypeDef *husart);
  227. HAL_StatusTypeDef HAL_USARTEx_ConfigNSS(USART_HandleTypeDef *husart, uint32_t NSSConfig);
  228. HAL_StatusTypeDef HAL_USARTEx_EnableFifoMode(USART_HandleTypeDef *husart);
  229. HAL_StatusTypeDef HAL_USARTEx_DisableFifoMode(USART_HandleTypeDef *husart);
  230. HAL_StatusTypeDef HAL_USARTEx_SetTxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold);
  231. HAL_StatusTypeDef HAL_USARTEx_SetRxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold);
  232. /**
  233. * @}
  234. */
  235. /**
  236. * @}
  237. */
  238. /**
  239. * @}
  240. */
  241. /**
  242. * @}
  243. */
  244. #ifdef __cplusplus
  245. }
  246. #endif
  247. #endif /* STM32G4xx_HAL_USART_EX_H */