STM32G474xx HAL 用户手册
stm32g4xx_hal_usart_ex.h
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_hal_usart_ex.h
00004   * @author  MCD Application Team
00005   * @brief   USART HAL 扩展模块的头文件。
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2019 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 STM32G4xx_HAL_USART_EX_H
00021 #define STM32G4xx_HAL_USART_EX_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 /* Includes ------------------------------------------------------------------*/
00028 #include "stm32g4xx_hal_def.h"
00029 
00030 /** @addtogroup STM32G4xx_HAL_Driver
00031   * @{
00032   */
00033 
00034 /** @addtogroup USARTEx
00035   * @{
00036   */
00037 
00038 /* Exported types ------------------------------------------------------------*/
00039 /* Exported constants --------------------------------------------------------*/
00040 /** @defgroup USARTEx_Exported_Constants USARTEx 导出常量
00041   * @{
00042   */
00043 
00044 /** @defgroup USARTEx_Word_Length USARTEx 字长
00045   * @{
00046   */
00047 #define USART_WORDLENGTH_7B                  (USART_CR1_M1)   /*!< 7位长的USART帧 */
00048 #define USART_WORDLENGTH_8B                  (0x00000000U)    /*!< 8位长的USART帧 */
00049 #define USART_WORDLENGTH_9B                  (USART_CR1_M0)   /*!< 9位长的USART帧 */
00050 /**
00051   * @}
00052   */
00053 
00054 /** @defgroup USARTEx_Slave_Select_management USARTEx 从机选择管理
00055   * @{
00056   */
00057 #define USART_NSS_HARD                        0x00000000U          /*!< SPI从机选择取决于NSS输入引脚              */
00058 #define USART_NSS_SOFT                        USART_CR2_DIS_NSS    /*!< SPI从机始终被选中,忽略NSS输入引脚 */
00059 /**
00060   * @}
00061   */
00062 
00063 
00064 /** @defgroup USARTEx_Slave_Mode USARTEx 同步从机模式使能
00065   * @brief    USART 从机模式
00066   * @{
00067   */
00068 #define USART_SLAVEMODE_DISABLE   0x00000000U     /*!< USART SPI从机模式使能  */
00069 #define USART_SLAVEMODE_ENABLE    USART_CR2_SLVEN /*!< USART SPI从机模式禁用 */
00070 /**
00071   * @}
00072   */
00073 
00074 /** @defgroup USARTEx_FIFO_mode USARTEx FIFO 模式
00075   * @brief    USART FIFO 模式
00076   * @{
00077   */
00078 #define USART_FIFOMODE_DISABLE        0x00000000U                   /*!< FIFO模式禁用 */
00079 #define USART_FIFOMODE_ENABLE         USART_CR1_FIFOEN              /*!< FIFO模式使能  */
00080 /**
00081   * @}
00082   */
00083 
00084 /** @defgroup USARTEx_TXFIFO_threshold_level USARTEx TXFIFO 阈值级别
00085   * @brief    USART TXFIFO 级别
00086   * @{
00087   */
00088 #define USART_TXFIFO_THRESHOLD_1_8   0x00000000U                               /*!< TXFIFO达到其深度的1/8 */
00089 #define USART_TXFIFO_THRESHOLD_1_4   USART_CR3_TXFTCFG_0                       /*!< TXFIFO达到其深度的1/4 */
00090 #define USART_TXFIFO_THRESHOLD_1_2   USART_CR3_TXFTCFG_1                       /*!< TXFIFO达到其深度的1/2 */
00091 #define USART_TXFIFO_THRESHOLD_3_4   (USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1) /*!< TXFIFO达到其深度的3/4 */
00092 #define USART_TXFIFO_THRESHOLD_7_8   USART_CR3_TXFTCFG_2                       /*!< TXFIFO达到其深度的7/8 */
00093 #define USART_TXFIFO_THRESHOLD_8_8   (USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0) /*!< TXFIFO变为空            */
00094 /**
00095   * @}
00096   */
00097 
00098 /** @defgroup USARTEx_RXFIFO_threshold_level USARTEx RXFIFO 阈值级别
00099   * @brief    USART RXFIFO 级别
00100   * @{
00101   */
00102 #define USART_RXFIFO_THRESHOLD_1_8   0x00000000U                               /*!< RXFIFO达到其深度的1/8 */
00103 #define USART_RXFIFO_THRESHOLD_1_4   USART_CR3_RXFTCFG_0                       /*!< RXFIFO达到其深度的1/4 */
00104 #define USART_RXFIFO_THRESHOLD_1_2   USART_CR3_RXFTCFG_1                       /*!< RXFIFO达到其深度的1/2 */
00105 #define USART_RXFIFO_THRESHOLD_3_4   (USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1) /*!< RXFIFO达到其深度的3/4 */
00106 #define USART_RXFIFO_THRESHOLD_7_8   USART_CR3_RXFTCFG_2                       /*!< RXFIFO达到其深度的7/8 */
00107 #define USART_RXFIFO_THRESHOLD_8_8   (USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0) /*!< RXFIFO变满             */
00108 /**
00109   * @}
00110   */
00111 
00112 /**
00113   * @}
00114   */
00115 
00116 /* Private macros ------------------------------------------------------------*/
00117 /** @defgroup USARTEx_Private_Macros USARTEx 私有宏
00118   * @{
00119   */
00120 
00121 /** @brief  计算用于检索接收数据的USART掩码
00122   *         根据字长和奇偶校验位激活情况。
00123   * @note   如果 PCE = 1,奇偶校验位不包含在接收API()提取的数据中。
00124   *         在DMA传输的情况下不执行此掩码操作。
00125   * @param  __HANDLE__ 指定USART句柄。
00126   * @retval 无,应用于USART RDR寄存器的掩码存储在(__HANDLE__)->Mask字段中。
00127   */
00128 #define USART_MASK_COMPUTATION(__HANDLE__)                            \
00129   do {                                                                \
00130     if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_9B)         \
00131     {                                                                 \
00132       if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \
00133       {                                                               \
00134         (__HANDLE__)->Mask = 0x01FFU;                                 \
00135       }                                                               \
00136       else                                                            \
00137       {                                                               \
00138         (__HANDLE__)->Mask = 0x00FFU;                                 \
00139       }                                                               \
00140     }                                                                 \
00141     else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_8B)    \
00142     {                                                                 \
00143       if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \
00144       {                                                               \
00145         (__HANDLE__)->Mask = 0x00FFU;                                 \
00146       }                                                               \
00147       else                                                            \
00148       {                                                               \
00149         (__HANDLE__)->Mask = 0x007FU;                                 \
00150       }                                                               \
00151     }                                                                 \
00152     else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_7B)    \
00153     {                                                                 \
00154       if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \
00155       {                                                               \
00156         (__HANDLE__)->Mask = 0x007FU;                                 \
00157       }                                                               \
00158       else                                                            \
00159