1 /** 2 ****************************************************************************** 3 * @file stm32wbaxx_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) 2022 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32WBAxx_HAL_USART_EX_H 21 #define STM32WBAxx_HAL_USART_EX_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32wbaxx_hal_def.h" 29 30 /** @addtogroup STM32WBAxx_HAL_Driver 31 * @{ 32 */ 33 34 /** @addtogroup USARTEx 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 /** @defgroup USARTEx_Exported_Types USARTEx Exported Types 40 * @{ 41 */ 42 /** 43 * @brief USART Autonomous mode parameters 44 */ 45 typedef struct 46 { 47 uint32_t AutonomousModeState; /*!< Specifies the autonomous mode state.This parameter can be a value of 48 @ref USARTEx_Autonomous_mode.*/ 49 50 uint32_t TriggerSelection; /*!< Specifies which trigger will activate the Transmission automatically. 51 This parameter can be a value of @ref USARTEx_Autonomous_Trigger_selection */ 52 53 uint32_t TriggerPolarity; /*!< Specifies the autonomous mode trigger signal polarity. 54 This parameter can be a value of @ref USARTEx_Autonomous_Trigger_Polarity */ 55 56 uint32_t DataSize; /*!< Specifies the transmitted data size in byte */ 57 58 uint32_t IdleFrame; /*!< Specifies whether the IDLE frame transmission is enabled or disabled. 59 This parameter can be a value of @ref USARTEx_Autonomous_IDLE_FRAME. */ 60 61 } USART_AutonomousModeConfTypeDef; 62 /** 63 * @} 64 */ 65 66 /* Exported constants --------------------------------------------------------*/ 67 /** @defgroup USARTEx_Exported_Constants USARTEx Exported Constants 68 * @{ 69 */ 70 71 /** @defgroup USARTEx_Word_Length USARTEx Word Length 72 * @{ 73 */ 74 #define USART_WORDLENGTH_7B (USART_CR1_M1) /*!< 7-bit long USART frame */ 75 #define USART_WORDLENGTH_8B (0x00000000U) /*!< 8-bit long USART frame */ 76 #define USART_WORDLENGTH_9B (USART_CR1_M0) /*!< 9-bit long USART frame */ 77 /** 78 * @} 79 */ 80 81 /** @defgroup USARTEx_Slave_Select_management USARTEx Slave Select Management 82 * @{ 83 */ 84 #define USART_NSS_HARD 0x00000000U /*!< SPI slave selection depends on NSS input pin */ 85 #define USART_NSS_SOFT USART_CR2_DIS_NSS /*!< SPI slave is always selected and NSS input pin is ignored */ 86 /** 87 * @} 88 */ 89 90 91 /** @defgroup USARTEx_Slave_Mode USARTEx Synchronous Slave mode enable 92 * @brief USART SLAVE mode 93 * @{ 94 */ 95 #define USART_SLAVEMODE_DISABLE 0x00000000U /*!< USART SPI Slave Mode Enable */ 96 #define USART_SLAVEMODE_ENABLE USART_CR2_SLVEN /*!< USART SPI Slave Mode Disable */ 97 /** 98 * @} 99 */ 100 101 /** @defgroup USARTEx_FIFO_mode USARTEx FIFO mode 102 * @brief USART FIFO mode 103 * @{ 104 */ 105 #define USART_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable */ 106 #define USART_FIFOMODE_ENABLE USART_CR1_FIFOEN /*!< FIFO mode enable */ 107 /** 108 * @} 109 */ 110 111 /** @defgroup USARTEx_TXFIFO_threshold_level USARTEx TXFIFO threshold level 112 * @brief USART TXFIFO level 113 * @{ 114 */ 115 #define USART_TXFIFO_THRESHOLD_1_8 0x00000000U /*!< TXFIFO reaches 1/8 of its depth */ 116 #define USART_TXFIFO_THRESHOLD_1_4 USART_CR3_TXFTCFG_0 /*!< TXFIFO reaches 1/4 of its depth */ 117 #define USART_TXFIFO_THRESHOLD_1_2 USART_CR3_TXFTCFG_1 /*!< TXFIFO reaches 1/2 of its depth */ 118 #define USART_TXFIFO_THRESHOLD_3_4 (USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1) /*!< TXFIFO reaches 3/4 of its depth */ 119 #define USART_TXFIFO_THRESHOLD_7_8 USART_CR3_TXFTCFG_2 /*!< TXFIFO reaches 7/8 of its depth */ 120 #define USART_TXFIFO_THRESHOLD_8_8 (USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0) /*!< TXFIFO becomes empty */ 121 /** 122 * @} 123 */ 124 125 /** @defgroup USARTEx_RXFIFO_threshold_level USARTEx RXFIFO threshold level 126 * @brief USART RXFIFO level 127 * @{ 128 */ 129 #define USART_RXFIFO_THRESHOLD_1_8 0x00000000U /*!< RXFIFO FIFO reaches 1/8 of its depth */ 130 #define USART_RXFIFO_THRESHOLD_1_4 USART_CR3_RXFTCFG_0 /*!< RXFIFO FIFO reaches 1/4 of its depth */ 131 #define USART_RXFIFO_THRESHOLD_1_2 USART_CR3_RXFTCFG_1 /*!< RXFIFO FIFO reaches 1/2 of its depth */ 132 #define USART_RXFIFO_THRESHOLD_3_4 (USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1) /*!< RXFIFO FIFO reaches 3/4 of its depth */ 133 #define USART_RXFIFO_THRESHOLD_7_8 USART_CR3_RXFTCFG_2 /*!< RXFIFO FIFO reaches 7/8 of its depth */ 134 #define USART_RXFIFO_THRESHOLD_8_8 (USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0) /*!< RXFIFO FIFO becomes full */ 135 /** 136 * @} 137 */ 138 139 /** @defgroup USARTEx_Autonomous_mode USARTEx Autonomous Mode 140 * @brief USART Autonomous mode 141 * @{ 142 */ 143 #define USART_AUTONOMOUS_MODE_DISABLE 0x00000000U /*!< Autonomous mode disable */ 144 #define USART_AUTONOMOUS_MODE_ENABLE USART_AUTOCR_TRIGEN /*!< Autonomous mode enable */ 145 /** 146 * @} 147 */ 148 149 /** @defgroup USARTEx_Autonomous_Trigger_Polarity USARTEx Autonomous Trigger Polarity 150 * @brief USART Trigger polarity edge selection 151 * @{ 152 */ 153 #define USART_TRIG_POLARITY_RISING 0x00000000U /*!< USART triggered on rising edge */ 154 #define USART_TRIG_POLARITY_FALLING USART_AUTOCR_TRIGPOL /*!< USART triggered on falling edge */ 155 /** 156 * @} 157 */ 158 159 /** @defgroup USARTEx_Autonomous_IDLE_FRAME USARTEx Autonomous IDLE Frame 160 * @brief USART IDLE frame transmission 161 * @{ 162 */ 163 #define USART_IDLE_FRAME_ENABLE 0x00000000U /*!< IDLE Frame sent after enabling the transmitter */ 164 #define USART_IDLE_FRAME_DISABLE USART_AUTOCR_IDLEDIS /*!< IDLE Frame not sent after enabling the transmitter */ 165 /** 166 * @} 167 */ 168 169 /** @defgroup USARTEx_Autonomous_Trigger_selection USARTEx Autonomous trigger selection 170 * @brief USART Autonomous Trigger selection 171 * @{ 172 */ 173 #define USART_GPDMA1_CH0_TCF_TRG 0U /*!< USART GPDMA1 channel0 Internal Trigger */ 174 #define USART_GPDMA1_CH1_TCF_TRG 1U /*!< USART GPDMA1 channel1 Internal Trigger */ 175 #define USART_GPDMA1_CH2_TCF_TRG 2U /*!< USART GPDMA1 channel2 Internal Trigger */ 176 #define USART_GPDMA1_CH3_TCF_TRG 3U /*!< USART GPDMA1 channel3 Internal Trigger */ 177 #define USART_EXTI_LINE6_TRG 4U /*!< USART EXTI line 6 Internal Trigger */ 178 #define USART_EXTI_LINE9_TRG 5U /*!< USART EXTI line 9 Internal Trigger */ 179 #define USART_LPTIM1_OUT_TRG 6U /*!< USART LPTIM1 out Internal Trigger */ 180 #if defined(LPTIM2) 181 #define USART_LPTIM2_OUT_TRG 7U /*!< USART LPTIM2 out Internal Trigger */ 182 #endif /* LPTIM2 */ 183 #if defined(COMP12_COMMON) 184 #define USART_COMP1_OUT_TRG 8U /*!< USART COMP1 out Internal Trigger */ 185 #define USART_COMP2_OUT_TRG 9U /*!< USART COMP2 out Internal Trigger */ 186 #endif /* COMP12_COMMON */ 187 #define USART_RTC_ALRA_TRG 10U /*!< USART RTC alarm Internal Trigger */ 188 #define USART_RTC_WUT_TRG 11U /*!< USART RTC wakeup Internal Trigger */ 189 /** 190 * @} 191 */ 192 193 /** 194 * @} 195 */ 196 197 /* Private macros ------------------------------------------------------------*/ 198 /** @defgroup USARTEx_Private_Macros USARTEx Private Macros 199 * @{ 200 */ 201 202 /** @brief Compute the USART mask to apply to retrieve the received data 203 * according to the word length and to the parity bits activation. 204 * @note If PCE = 1, the parity bit is not included in the data extracted 205 * by the reception API(). 206 * This masking operation is not carried out in the case of 207 * DMA transfers. 208 * @param __HANDLE__ specifies the USART Handle. 209 * @retval None, the mask to apply to USART RDR register is stored in (__HANDLE__)->Mask field. 210 */ 211 #define USART_MASK_COMPUTATION(__HANDLE__) \ 212 do { \ 213 if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_9B) \ 214 { \ 215 if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \ 216 { \ 217 (__HANDLE__)->Mask = 0x01FFU; \ 218 } \ 219 else \ 220 { \ 221 (__HANDLE__)->Mask = 0x00FFU; \ 222 } \ 223 } \ 224 else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_8B) \ 225 { \ 226 if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \ 227 { \ 228 (__HANDLE__)->Mask = 0x00FFU; \ 229 } \ 230 else \ 231 { \ 232 (__HANDLE__)->Mask = 0x007FU; \ 233 } \ 234 } \ 235 else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_7B) \ 236 { \ 237 if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \ 238 { \ 239 (__HANDLE__)->Mask = 0x007FU; \ 240 } \ 241 else \ 242 { \ 243 (__HANDLE__)->Mask = 0x003FU; \ 244 } \ 245 } \ 246 else \ 247 { \ 248 (__HANDLE__)->Mask = 0x0000U; \ 249 } \ 250 } while(0U) 251 252 /** 253 * @brief Ensure that USART frame length is valid. 254 * @param __LENGTH__ USART frame length. 255 * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) 256 */ 257 #define IS_USART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == USART_WORDLENGTH_7B) || \ 258 ((__LENGTH__) == USART_WORDLENGTH_8B) || \ 259 ((__LENGTH__) == USART_WORDLENGTH_9B)) 260 261 /** 262 * @brief Ensure that USART Negative Slave Select (NSS) pin management is valid. 263 * @param __NSS__ USART Negative Slave Select pin management. 264 * @retval SET (__NSS__ is valid) or RESET (__NSS__ is invalid) 265 */ 266 #define IS_USART_NSS(__NSS__) (((__NSS__) == USART_NSS_HARD) || \ 267 ((__NSS__) == USART_NSS_SOFT)) 268 269 /** 270 * @brief Ensure that USART Slave Mode is valid. 271 * @param __STATE__ USART Slave Mode. 272 * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid) 273 */ 274 #define IS_USART_SLAVEMODE(__STATE__) (((__STATE__) == USART_SLAVEMODE_DISABLE ) || \ 275 ((__STATE__) == USART_SLAVEMODE_ENABLE)) 276 277 /** 278 * @brief Ensure that USART FIFO mode is valid. 279 * @param __STATE__ USART FIFO mode. 280 * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid) 281 */ 282 #define IS_USART_FIFO_MODE_STATE(__STATE__) (((__STATE__) == USART_FIFOMODE_DISABLE ) || \ 283 ((__STATE__) == USART_FIFOMODE_ENABLE)) 284 285 /** 286 * @brief Ensure that USART TXFIFO threshold level is valid. 287 * @param __THRESHOLD__ USART TXFIFO threshold level. 288 * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) 289 */ 290 #define IS_USART_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_8) || \ 291 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_4) || \ 292 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_2) || \ 293 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_3_4) || \ 294 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_7_8) || \ 295 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_8_8)) 296 297 /** 298 * @brief Ensure that USART RXFIFO threshold level is valid. 299 * @param __THRESHOLD__ USART RXFIFO threshold level. 300 * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) 301 */ 302 #define IS_USART_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_8) || \ 303 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_4) || \ 304 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_2) || \ 305 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_3_4) || \ 306 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_7_8) || \ 307 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_8_8)) 308 /** 309 * @brief Ensure that USART Trigger polarity state is valid. 310 * @param __POLARITY__ USART Trigger polarity. 311 * @retval SET (__POLARITY__ is valid) or RESET (__POLARITY__ is invalid) 312 */ 313 #define IS_USART_TRIGGER_POLARITY(__POLARITY__) (((__POLARITY__) == USART_TRIG_POLARITY_RISING) ||\ 314 ((__POLARITY__) == USART_TRIG_POLARITY_FALLING)) 315 316 /** 317 * @brief Ensure that USART IDLE Frame Transmit state is valid. 318 * @param __IDLE__ USART IDLE Frame Transmit state. 319 * @retval SET (__IDLE__ is valid) or RESET (__IDLE__ is invalid) 320 */ 321 #define IS_USART_IDLE_FRAME_TRANSMIT(__IDLE__) (((__IDLE__) == USART_IDLE_FRAME_ENABLE) ||\ 322 ((__IDLE__) == USART_IDLE_FRAME_DISABLE)) 323 324 /** 325 * @brief Ensure that USART Trigger source selection is valid. 326 * @param __SOURCE__ USART Trigger source selection. 327 * @retval SET (__SOURCE__ is valid) or RESET (__SOURCE__ is invalid) 328 */ 329 #define IS_USART_TRIGGER_SELECTION(__SOURCE__) ((__SOURCE__) <= 11U) 330 331 /** 332 * @brief Ensure that the number of transferred data is valid. 333 * @param __SOURCE__ USART TX data size. 334 * @retval SET (__SOURCE__ is valid) or RESET (__SOURCE__ is invalid) 335 */ 336 #define IS_USART_TX_DATA_SIZE(__SOURCE__) ((__SOURCE__) <= 0xFFFFU) 337 338 /** 339 * @} 340 */ 341 342 /* Exported functions --------------------------------------------------------*/ 343 /** @addtogroup USARTEx_Exported_Functions 344 * @{ 345 */ 346 347 /** @addtogroup USARTEx_Exported_Functions_Group1 348 * @{ 349 */ 350 351 /* IO operation functions *****************************************************/ 352 void HAL_USARTEx_RxFifoFullCallback(USART_HandleTypeDef *husart); 353 void HAL_USARTEx_TxFifoEmptyCallback(USART_HandleTypeDef *husart); 354 355 /** 356 * @} 357 */ 358 359 /** @addtogroup USARTEx_Exported_Functions_Group2 360 * @{ 361 */ 362 363 /* Peripheral Control functions ***********************************************/ 364 HAL_StatusTypeDef HAL_USARTEx_EnableSlaveMode(USART_HandleTypeDef *husart); 365 HAL_StatusTypeDef HAL_USARTEx_DisableSlaveMode(USART_HandleTypeDef *husart); 366 HAL_StatusTypeDef HAL_USARTEx_ConfigNSS(USART_HandleTypeDef *husart, uint32_t NSSConfig); 367 HAL_StatusTypeDef HAL_USARTEx_EnableFifoMode(USART_HandleTypeDef *husart); 368 HAL_StatusTypeDef HAL_USARTEx_DisableFifoMode(USART_HandleTypeDef *husart); 369 HAL_StatusTypeDef HAL_USARTEx_SetTxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold); 370 HAL_StatusTypeDef HAL_USARTEx_SetRxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold); 371 HAL_StatusTypeDef HAL_USARTEx_SetConfigAutonomousMode(USART_HandleTypeDef *husart, 372 const USART_AutonomousModeConfTypeDef *sConfig); 373 HAL_StatusTypeDef HAL_USARTEx_GetConfigAutonomousMode(const USART_HandleTypeDef *husart, 374 USART_AutonomousModeConfTypeDef *sConfig); 375 HAL_StatusTypeDef HAL_USARTEx_ClearConfigAutonomousMode(USART_HandleTypeDef *husart); 376 377 /** 378 * @} 379 */ 380 381 /** 382 * @} 383 */ 384 385 /** 386 * @} 387 */ 388 389 /** 390 * @} 391 */ 392 393 #ifdef __cplusplus 394 } 395 #endif 396 397 #endif /* STM32WBAxx_HAL_USART_EX_H */ 398 399