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