STM32H735xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32h7xx_hal_usart_ex.h 00004 * @author MCD Application Team 00005 * @brief Header file of USART HAL Extended module. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2017 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 00019 /* Define to prevent recursive inclusion -------------------------------------*/ 00020 #ifndef STM32H7xx_HAL_USART_EX_H 00021 #define STM32H7xx_HAL_USART_EX_H 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /* Includes ------------------------------------------------------------------*/ 00028 #include "stm32h7xx_hal_def.h" 00029 00030 /** @addtogroup STM32H7xx_HAL_Driver 00031 * @{ 00032 */ 00033 00034 /** @addtogroup USARTEx 00035 * @{ 00036 */ 00037 00038 /* Exported types ------------------------------------------------------------*/ 00039 /* Exported constants --------------------------------------------------------*/ 00040 /** @defgroup USARTEx_Exported_Constants USARTEx Exported Constants 00041 * @{ 00042 */ 00043 00044 /** @defgroup USARTEx_Word_Length USARTEx Word Length 00045 * @{ 00046 */ 00047 #define USART_WORDLENGTH_7B (USART_CR1_M1) /*!< 7-bit long USART frame */ 00048 #define USART_WORDLENGTH_8B (0x00000000U) /*!< 8-bit long USART frame */ 00049 #define USART_WORDLENGTH_9B (USART_CR1_M0) /*!< 9-bit long USART frame */ 00050 /** 00051 * @} 00052 */ 00053 00054 /** @defgroup USARTEx_Slave_Select_management USARTEx Slave Select Management 00055 * @{ 00056 */ 00057 #define USART_NSS_HARD 0x00000000U /*!< SPI slave selection depends on NSS input pin */ 00058 #define USART_NSS_SOFT USART_CR2_DIS_NSS /*!< SPI slave is always selected and NSS input pin is ignored */ 00059 /** 00060 * @} 00061 */ 00062 00063 00064 /** @defgroup USARTEx_Slave_Mode USARTEx Synchronous Slave mode enable 00065 * @brief USART SLAVE mode 00066 * @{ 00067 */ 00068 #define USART_SLAVEMODE_DISABLE 0x00000000U /*!< USART SPI Slave Mode Enable */ 00069 #define USART_SLAVEMODE_ENABLE USART_CR2_SLVEN /*!< USART SPI Slave Mode Disable */ 00070 /** 00071 * @} 00072 */ 00073 00074 /** @defgroup USARTEx_FIFO_mode USARTEx FIFO mode 00075 * @brief USART FIFO mode 00076 * @{ 00077 */ 00078 #define USART_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable */ 00079 #define USART_FIFOMODE_ENABLE USART_CR1_FIFOEN /*!< FIFO mode enable */ 00080 /** 00081 * @} 00082 */ 00083 00084 /** @defgroup USARTEx_TXFIFO_threshold_level USARTEx TXFIFO threshold level 00085 * @brief USART TXFIFO level 00086 * @{ 00087 */ 00088 #define USART_TXFIFO_THRESHOLD_1_8 0x00000000U /*!< TXFIFO reaches 1/8 of its depth */ 00089 #define USART_TXFIFO_THRESHOLD_1_4 USART_CR3_TXFTCFG_0 /*!< TXFIFO reaches 1/4 of its depth */ 00090 #define USART_TXFIFO_THRESHOLD_1_2 USART_CR3_TXFTCFG_1 /*!< TXFIFO reaches 1/2 of its depth */ 00091 #define USART_TXFIFO_THRESHOLD_3_4 (USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1) /*!< TXFIFO reaches 3/4 of its depth */ 00092 #define USART_TXFIFO_THRESHOLD_7_8 USART_CR3_TXFTCFG_2 /*!< TXFIFO reaches 7/8 of its depth */ 00093 #define USART_TXFIFO_THRESHOLD_8_8 (USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0) /*!< TXFIFO becomes empty */ 00094 /** 00095 * @} 00096 */ 00097 00098 /** @defgroup USARTEx_RXFIFO_threshold_level USARTEx RXFIFO threshold level 00099 * @brief USART RXFIFO level 00100 * @{ 00101 */ 00102 #define USART_RXFIFO_THRESHOLD_1_8 0x00000000U /*!< RXFIFO FIFO reaches 1/8 of its depth */ 00103 #define USART_RXFIFO_THRESHOLD_1_4 USART_CR3_RXFTCFG_0 /*!< RXFIFO FIFO reaches 1/4 of its depth */ 00104 #define USART_RXFIFO_THRESHOLD_1_2 USART_CR3_RXFTCFG_1 /*!< RXFIFO FIFO reaches 1/2 of its depth */ 00105 #define USART_RXFIFO_THRESHOLD_3_4 (USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1) /*!< RXFIFO FIFO reaches 3/4 of its depth */ 00106 #define USART_RXFIFO_THRESHOLD_7_8 USART_CR3_RXFTCFG_2 /*!< RXFIFO FIFO reaches 7/8 of its depth */ 00107 #define USART_RXFIFO_THRESHOLD_8_8 (USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0) /*!< RXFIFO FIFO becomes full */ 00108 /** 00109 * @} 00110 */ 00111 00112 /** 00113 * @} 00114 */ 00115 00116 /* Private macros ------------------------------------------------------------*/ 00117 /** @defgroup USARTEx_Private_Macros USARTEx Private Macros 00118 * @{ 00119 */ 00120 00121 /** @brief Compute the USART mask to apply to retrieve the received data 00122 * according to the word length and to the parity bits activation. 00123 * @note If PCE = 1, the parity bit is not included in the data extracted 00124 * by the reception API(). 00125 * This masking operation is not carried out in the case of 00126 * DMA transfers. 00127 * @param __HANDLE__ specifies the USART Handle. 00128 * @retval None, the mask to apply to USART RDR register is stored in (__HANDLE__)->Mask field. 00129 */ 00130 #define USART_MASK_COMPUTATION(__HANDLE__) \ 00131 do { \ 00132 if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_9B) \ 00133 { \ 00134 if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \ 00135 { \ 00136 (__HANDLE__)->Mask = 0x01FFU; \ 00137 } \ 00138 else \ 00139 { \ 00140 (__HANDLE__)->Mask = 0x00FFU; \ 00141 } \ 00142 } \ 00143 else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_8B) \ 00144 { \ 00145 if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \ 00146 { \ 00147 (__HANDLE__)->Mask = 0x00FFU; \ 00148 } \ 00149 else \ 00150 { \ 00151 (__HANDLE__)->Mask = 0x007FU; \ 00152 } \ 00153 } \ 00154 else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_7B) \ 00155 { \ 00156 if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \ 00157 { \ 00158 (__HANDLE__)->Mask = 0x007FU; \ 00159 } \ 00160 else \ 00161 { \ 00162 (__HANDLE__)->Mask = 0x003FU; \ 00163 } \ 00164 } \ 00165 else \ 00166 { \ 00167 (__HANDLE__)->Mask = 0x0000U; \ 00168 } \ 00169 } while(0U) 00170 00171 /** 00172 * @brief Ensure that USART frame length is valid. 00173 * @param __LENGTH__ USART frame length. 00174 * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) 00175 */ 00176 #define IS_USART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == USART_WORDLENGTH_7B) || \ 00177 ((__LENGTH__) == USART_WORDLENGTH_8B) || \ 00178 ((__LENGTH__) == USART_WORDLENGTH_9B)) 00179 00180 /** 00181 * @brief Ensure that USART Negative Slave Select (NSS) pin management is valid. 00182 * @param __NSS__ USART Negative Slave Select pin management. 00183 * @retval SET (__NSS__ is valid) or RESET (__NSS__ is invalid) 00184 */ 00185 #define IS_USART_NSS(__NSS__) (((__NSS__) == USART_NSS_HARD) || \ 00186 ((__NSS__) == USART_NSS_SOFT)) 00187 00188 /** 00189 * @brief Ensure that USART Slave Mode is valid. 00190 * @param __STATE__ USART Slave Mode. 00191 * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid) 00192 */ 00193 #define IS_USART_SLAVEMODE(__STATE__) (((__STATE__) == USART_SLAVEMODE_DISABLE ) || \ 00194 ((__STATE__) == USART_SLAVEMODE_ENABLE)) 00195 00196 /** 00197 * @brief Ensure that USART FIFO mode is valid. 00198 * @param __STATE__ USART FIFO mode. 00199 * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid) 00200 */ 00201 #define IS_USART_FIFO_MODE_STATE(__STATE__) (((__STATE__) == USART_FIFOMODE_DISABLE ) || \ 00202 ((__STATE__) == USART_FIFOMODE_ENABLE)) 00203 00204 /** 00205 * @brief Ensure that USART TXFIFO threshold level is valid. 00206 * @param __THRESHOLD__ USART TXFIFO threshold level. 00207 * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) 00208 */ 00209 #define IS_USART_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_8) || \ 00210 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_4) || \ 00211 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_2) || \ 00212 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_3_4) || \ 00213 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_7_8) || \ 00214 ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_8_8)) 00215 00216 /** 00217 * @brief Ensure that USART RXFIFO threshold level is valid. 00218 * @param __THRESHOLD__ USART RXFIFO threshold level. 00219 * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) 00220 */ 00221 #define IS_USART_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_8) || \ 00222 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_4) || \ 00223 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_2) || \ 00224 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_3_4) || \ 00225 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_7_8) || \ 00226 ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_8_8)) 00227 /** 00228 * @} 00229 */ 00230 00231 /* Exported functions --------------------------------------------------------*/ 00232 /** @addtogroup USARTEx_Exported_Functions 00233 * @{ 00234 */ 00235 00236 /** @addtogroup USARTEx_Exported_Functions_Group1 00237 * @{ 00238 */ 00239 00240 /* IO operation functions *****************************************************/ 00241 void HAL_USARTEx_RxFifoFullCallback(USART_HandleTypeDef *husart); 00242 void HAL_USARTEx_TxFifoEmptyCallback(USART_HandleTypeDef *husart); 00243 00244 /** 00245 * @} 00246 */ 00247 00248 /** @addtogroup USARTEx_Exported_Functions_Group2 00249 * @{ 00250 */ 00251 00252 /* Peripheral Control functions ***********************************************/ 00253 HAL_StatusTypeDef HAL_USARTEx_EnableSlaveMode(USART_HandleTypeDef *husart); 00254 HAL_StatusTypeDef HAL_USARTEx_DisableSlaveMode(USART_HandleTypeDef *husart); 00255 HAL_StatusTypeDef HAL_USARTEx_ConfigNSS(USART_HandleTypeDef *husart, uint32_t NSSConfig); 00256 HAL_StatusTypeDef HAL_USARTEx_EnableFifoMode(USART_HandleTypeDef *husart); 00257 HAL_StatusTypeDef HAL_USARTEx_DisableFifoMode(USART_HandleTypeDef *husart); 00258 HAL_StatusTypeDef HAL_USARTEx_SetTxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold); 00259 HAL_StatusTypeDef HAL_USARTEx_SetRxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold); 00260 00261 /** 00262 * @} 00263 */ 00264 00265 /** 00266 * @} 00267 */ 00268 00269 /** 00270 * @} 00271 */ 00272 00273 /** 00274 * @} 00275 */ 00276 00277 #ifdef __cplusplus 00278 } 00279 #endif 00280 00281 #endif /* STM32H7xx_HAL_USART_EX_H */ 00282