STM32H735xx HAL User Manual
stm32h7xx_hal_usart_ex.h
Go to the documentation of this file.
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