Subversion Repositories FuelGauge

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f0xx_hal_uart.h
  4.   * @author  MCD Application Team
  5.   * @brief   Header file of UART HAL module.
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * <h2><center>&copy; Copyright (c) 2016 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 STM32F0xx_HAL_UART_H
  22. #define STM32F0xx_HAL_UART_H
  23.  
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27.  
  28. /* Includes ------------------------------------------------------------------*/
  29. #include "stm32f0xx_hal_def.h"
  30.  
  31. /** @addtogroup STM32F0xx_HAL_Driver
  32.   * @{
  33.   */
  34.  
  35. /** @addtogroup UART
  36.   * @{
  37.   */
  38.  
  39. /* Exported types ------------------------------------------------------------*/
  40. /** @defgroup UART_Exported_Types UART Exported Types
  41.   * @{
  42.   */
  43.  
  44. /**
  45.   * @brief UART Init Structure definition
  46.   */
  47. typedef struct
  48. {
  49.   uint32_t BaudRate;                /*!< This member configures the UART communication baud rate.
  50.                                          The baud rate register is computed using the following formula:
  51.                                          - If oversampling is 16 or in LIN mode,
  52.                                             Baud Rate Register = ((uart_ker_ck) / ((huart->Init.BaudRate)))
  53.                                          - If oversampling is 8,
  54.                                             Baud Rate Register[15:4] = ((2 * uart_ker_ck) /
  55.                                                                         ((huart->Init.BaudRate)))[15:4]
  56.                                             Baud Rate Register[3] =  0
  57.                                             Baud Rate Register[2:0] =  (((2 * uart_ker_ck) /
  58.                                                                         ((huart->Init.BaudRate)))[3:0]) >> 1
  59.                                          where uart_ker_ck is the UART input clock */
  60.  
  61.   uint32_t WordLength;              /*!< Specifies the number of data bits transmitted or received in a frame.
  62.                                          This parameter can be a value of @ref UARTEx_Word_Length. */
  63.  
  64.   uint32_t StopBits;                /*!< Specifies the number of stop bits transmitted.
  65.                                          This parameter can be a value of @ref UART_Stop_Bits. */
  66.  
  67.   uint32_t Parity;                  /*!< Specifies the parity mode.
  68.                                          This parameter can be a value of @ref UART_Parity
  69.                                          @note When parity is enabled, the computed parity is inserted
  70.                                                at the MSB position of the transmitted data (9th bit when
  71.                                                the word length is set to 9 data bits; 8th bit when the
  72.                                                word length is set to 8 data bits). */
  73.  
  74.   uint32_t Mode;                    /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
  75.                                          This parameter can be a value of @ref UART_Mode. */
  76.  
  77.   uint32_t HwFlowCtl;               /*!< Specifies whether the hardware flow control mode is enabled
  78.                                          or disabled.
  79.                                          This parameter can be a value of @ref UART_Hardware_Flow_Control. */
  80.  
  81.   uint32_t OverSampling;            /*!< Specifies whether the Over sampling 8 is enabled or disabled,
  82.                                          to achieve higher speed (up to f_PCLK/8).
  83.                                          This parameter can be a value of @ref UART_Over_Sampling. */
  84.  
  85.   uint32_t OneBitSampling;          /*!< Specifies whether a single sample or three samples' majority vote is selected.
  86.                                          Selecting the single sample method increases the receiver tolerance to clock
  87.                                          deviations. This parameter can be a value of @ref UART_OneBit_Sampling. */
  88.  
  89.  
  90. } UART_InitTypeDef;
  91.  
  92. /**
  93.   * @brief  UART Advanced Features initialization structure definition
  94.   */
  95. typedef struct
  96. {
  97.   uint32_t AdvFeatureInit;        /*!< Specifies which advanced UART features is initialized. Several
  98.                                        Advanced Features may be initialized at the same time .
  99.                                        This parameter can be a value of
  100.                                        @ref UART_Advanced_Features_Initialization_Type. */
  101.  
  102.   uint32_t TxPinLevelInvert;      /*!< Specifies whether the TX pin active level is inverted.
  103.                                        This parameter can be a value of @ref UART_Tx_Inv. */
  104.  
  105.   uint32_t RxPinLevelInvert;      /*!< Specifies whether the RX pin active level is inverted.
  106.                                        This parameter can be a value of @ref UART_Rx_Inv. */
  107.  
  108.   uint32_t DataInvert;            /*!< Specifies whether data are inverted (positive/direct logic
  109.                                        vs negative/inverted logic).
  110.                                        This parameter can be a value of @ref UART_Data_Inv. */
  111.  
  112.   uint32_t Swap;                  /*!< Specifies whether TX and RX pins are swapped.
  113.                                        This parameter can be a value of @ref UART_Rx_Tx_Swap. */
  114.  
  115.   uint32_t OverrunDisable;        /*!< Specifies whether the reception overrun detection is disabled.
  116.                                        This parameter can be a value of @ref UART_Overrun_Disable. */
  117.  
  118.   uint32_t DMADisableonRxError;   /*!< Specifies whether the DMA is disabled in case of reception error.
  119.                                        This parameter can be a value of @ref UART_DMA_Disable_on_Rx_Error. */
  120.  
  121.   uint32_t AutoBaudRateEnable;    /*!< Specifies whether auto Baud rate detection is enabled.
  122.                                        This parameter can be a value of @ref UART_AutoBaudRate_Enable. */
  123.  
  124.   uint32_t AutoBaudRateMode;      /*!< If auto Baud rate detection is enabled, specifies how the rate
  125.                                        detection is carried out.
  126.                                        This parameter can be a value of @ref UART_AutoBaud_Rate_Mode. */
  127.  
  128.   uint32_t MSBFirst;              /*!< Specifies whether MSB is sent first on UART line.
  129.                                        This parameter can be a value of @ref UART_MSB_First. */
  130. } UART_AdvFeatureInitTypeDef;
  131.  
  132. /**
  133.   * @brief HAL UART State definition
  134.   * @note  HAL UART State value is a combination of 2 different substates:
  135.   *        gState and RxState (see @ref UART_State_Definition).
  136.   *        - gState contains UART state information related to global Handle management
  137.   *          and also information related to Tx operations.
  138.   *          gState value coding follow below described bitmap :
  139.   *          b7-b6  Error information
  140.   *             00 : No Error
  141.   *             01 : (Not Used)
  142.   *             10 : Timeout
  143.   *             11 : Error
  144.   *          b5     Peripheral initialization status
  145.   *             0  : Reset (Peripheral not initialized)
  146.   *             1  : Init done (Peripheral initialized. HAL UART Init function already called)
  147.   *          b4-b3  (not used)
  148.   *             xx : Should be set to 00
  149.   *          b2     Intrinsic process state
  150.   *             0  : Ready
  151.   *             1  : Busy (Peripheral busy with some configuration or internal operations)
  152.   *          b1     (not used)
  153.   *             x  : Should be set to 0
  154.   *          b0     Tx state
  155.   *             0  : Ready (no Tx operation ongoing)
  156.   *             1  : Busy (Tx operation ongoing)
  157.   *        - RxState contains information related to Rx operations.
  158.   *          RxState value coding follow below described bitmap :
  159.   *          b7-b6  (not used)
  160.   *             xx : Should be set to 00
  161.   *          b5     Peripheral initialization status
  162.   *             0  : Reset (Peripheral not initialized)
  163.   *             1  : Init done (Peripheral initialized)
  164.   *          b4-b2  (not used)
  165.   *            xxx : Should be set to 000
  166.   *          b1     Rx state
  167.   *             0  : Ready (no Rx operation ongoing)
  168.   *             1  : Busy (Rx operation ongoing)
  169.   *          b0     (not used)
  170.   *             x  : Should be set to 0.
  171.   */
  172. typedef uint32_t HAL_UART_StateTypeDef;
  173.  
  174. /**
  175.   * @brief UART clock sources definition
  176.   */
  177. typedef enum
  178. {
  179.   UART_CLOCKSOURCE_PCLK1      = 0x00U,    /*!< PCLK1 clock source  */
  180.   UART_CLOCKSOURCE_HSI        = 0x02U,    /*!< HSI clock source    */
  181.   UART_CLOCKSOURCE_SYSCLK     = 0x04U,    /*!< SYSCLK clock source */
  182.   UART_CLOCKSOURCE_LSE        = 0x08U,    /*!< LSE clock source       */
  183.   UART_CLOCKSOURCE_UNDEFINED  = 0x10U     /*!< Undefined clock source */
  184. } UART_ClockSourceTypeDef;
  185.  
  186. /**
  187.   * @brief HAL UART Reception type definition
  188.   * @note  HAL UART Reception type value aims to identify which type of Reception is ongoing.
  189.   *        It is expected to admit following values :
  190.   *           HAL_UART_RECEPTION_STANDARD         = 0x00U,
  191.   *           HAL_UART_RECEPTION_TOIDLE           = 0x01U,
  192.   *           HAL_UART_RECEPTION_TORTO            = 0x02U,
  193.   *           HAL_UART_RECEPTION_TOCHARMATCH      = 0x03U,
  194.   */
  195. typedef uint32_t HAL_UART_RxTypeTypeDef;
  196.  
  197. /**
  198.   * @brief  UART handle Structure definition
  199.   */
  200. typedef struct __UART_HandleTypeDef
  201. {
  202.   USART_TypeDef            *Instance;                /*!< UART registers base address        */
  203.  
  204.   UART_InitTypeDef         Init;                     /*!< UART communication parameters      */
  205.  
  206.   UART_AdvFeatureInitTypeDef AdvancedInit;           /*!< UART Advanced Features initialization parameters */
  207.  
  208.   uint8_t                  *pTxBuffPtr;              /*!< Pointer to UART Tx transfer Buffer */
  209.  
  210.   uint16_t                 TxXferSize;               /*!< UART Tx Transfer size              */
  211.  
  212.   __IO uint16_t            TxXferCount;              /*!< UART Tx Transfer Counter           */
  213.  
  214.   uint8_t                  *pRxBuffPtr;              /*!< Pointer to UART Rx transfer Buffer */
  215.  
  216.   uint16_t                 RxXferSize;               /*!< UART Rx Transfer size              */
  217.  
  218.   __IO uint16_t            RxXferCount;              /*!< UART Rx Transfer Counter           */
  219.  
  220.   uint16_t                 Mask;                     /*!< UART Rx RDR register mask          */
  221.  
  222.   __IO HAL_UART_RxTypeTypeDef ReceptionType;         /*!< Type of ongoing reception          */
  223.  
  224.   void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */
  225.  
  226.   void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */
  227.  
  228.   DMA_HandleTypeDef        *hdmatx;                  /*!< UART Tx DMA Handle parameters      */
  229.  
  230.   DMA_HandleTypeDef        *hdmarx;                  /*!< UART Rx DMA Handle parameters      */
  231.  
  232.   HAL_LockTypeDef           Lock;                    /*!< Locking object                     */
  233.  
  234.   __IO HAL_UART_StateTypeDef    gState;              /*!< UART state information related to global Handle management
  235.                                                           and also related to Tx operations. This parameter
  236.                                                           can be a value of @ref HAL_UART_StateTypeDef */
  237.  
  238.   __IO HAL_UART_StateTypeDef    RxState;             /*!< UART state information related to Rx operations. This
  239.                                                           parameter can be a value of @ref HAL_UART_StateTypeDef */
  240.  
  241.   __IO uint32_t                 ErrorCode;           /*!< UART Error code                    */
  242.  
  243. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  244.   void (* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart);        /*!< UART Tx Half Complete Callback        */
  245.   void (* TxCpltCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Tx Complete Callback             */
  246.   void (* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart);        /*!< UART Rx Half Complete Callback        */
  247.   void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Rx Complete Callback             */
  248.   void (* ErrorCallback)(struct __UART_HandleTypeDef *huart);             /*!< UART Error Callback                   */
  249.   void (* AbortCpltCallback)(struct __UART_HandleTypeDef *huart);         /*!< UART Abort Complete Callback          */
  250.   void (* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Transmit Complete Callback */
  251.   void (* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart);  /*!< UART Abort Receive Complete Callback  */
  252. #if defined(USART_CR1_UESM)
  253. #if defined(USART_CR3_WUFIE)
  254.   void (* WakeupCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Wakeup Callback                  */
  255. #endif /* USART_CR3_WUFIE */
  256. #endif /* USART_CR1_UESM */
  257.   void (* RxEventCallback)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< UART Reception Event Callback     */
  258.  
  259.   void (* MspInitCallback)(struct __UART_HandleTypeDef *huart);           /*!< UART Msp Init callback                */
  260.   void (* MspDeInitCallback)(struct __UART_HandleTypeDef *huart);         /*!< UART Msp DeInit callback              */
  261. #endif  /* USE_HAL_UART_REGISTER_CALLBACKS */
  262.  
  263. } UART_HandleTypeDef;
  264.  
  265. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  266. /**
  267.   * @brief  HAL UART Callback ID enumeration definition
  268.   */
  269. typedef enum
  270. {
  271.   HAL_UART_TX_HALFCOMPLETE_CB_ID         = 0x00U,    /*!< UART Tx Half Complete Callback ID        */
  272.   HAL_UART_TX_COMPLETE_CB_ID             = 0x01U,    /*!< UART Tx Complete Callback ID             */
  273.   HAL_UART_RX_HALFCOMPLETE_CB_ID         = 0x02U,    /*!< UART Rx Half Complete Callback ID        */
  274.   HAL_UART_RX_COMPLETE_CB_ID             = 0x03U,    /*!< UART Rx Complete Callback ID             */
  275.   HAL_UART_ERROR_CB_ID                   = 0x04U,    /*!< UART Error Callback ID                   */
  276.   HAL_UART_ABORT_COMPLETE_CB_ID          = 0x05U,    /*!< UART Abort Complete Callback ID          */
  277.   HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U,    /*!< UART Abort Transmit Complete Callback ID */
  278.   HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID  = 0x07U,    /*!< UART Abort Receive Complete Callback ID  */
  279.   HAL_UART_WAKEUP_CB_ID                  = 0x08U,    /*!< UART Wakeup Callback ID                  */
  280.  
  281.   HAL_UART_MSPINIT_CB_ID                 = 0x0BU,    /*!< UART MspInit callback ID                 */
  282.   HAL_UART_MSPDEINIT_CB_ID               = 0x0CU     /*!< UART MspDeInit callback ID               */
  283.  
  284. } HAL_UART_CallbackIDTypeDef;
  285.  
  286. /**
  287.   * @brief  HAL UART Callback pointer definition
  288.   */
  289. typedef  void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer to an UART callback function */
  290. typedef  void (*pUART_RxEventCallbackTypeDef)
  291. (struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< pointer to a UART Rx Event specific callback function */
  292.  
  293. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  294.  
  295. /**
  296.   * @}
  297.   */
  298.  
  299. /* Exported constants --------------------------------------------------------*/
  300. /** @defgroup UART_Exported_Constants UART Exported Constants
  301.   * @{
  302.   */
  303.  
  304. /** @defgroup UART_State_Definition UART State Code Definition
  305.   * @{
  306.   */
  307. #define  HAL_UART_STATE_RESET         0x00000000U    /*!< Peripheral is not initialized
  308.                                                           Value is allowed for gState and RxState */
  309. #define  HAL_UART_STATE_READY         0x00000020U    /*!< Peripheral Initialized and ready for use
  310.                                                           Value is allowed for gState and RxState */
  311. #define  HAL_UART_STATE_BUSY          0x00000024U    /*!< an internal process is ongoing
  312.                                                           Value is allowed for gState only */
  313. #define  HAL_UART_STATE_BUSY_TX       0x00000021U    /*!< Data Transmission process is ongoing
  314.                                                           Value is allowed for gState only */
  315. #define  HAL_UART_STATE_BUSY_RX       0x00000022U    /*!< Data Reception process is ongoing
  316.                                                           Value is allowed for RxState only */
  317. #define  HAL_UART_STATE_BUSY_TX_RX    0x00000023U    /*!< Data Transmission and Reception process is ongoing
  318.                                                           Not to be used for neither gState nor RxState.Value is result
  319.                                                           of combination (Or) between gState and RxState values */
  320. #define  HAL_UART_STATE_TIMEOUT       0x000000A0U    /*!< Timeout state
  321.                                                           Value is allowed for gState only */
  322. #define  HAL_UART_STATE_ERROR         0x000000E0U    /*!< Error
  323.                                                           Value is allowed for gState only */
  324. /**
  325.   * @}
  326.   */
  327.  
  328. /** @defgroup UART_Error_Definition   UART Error Definition
  329.   * @{
  330.   */
  331. #define  HAL_UART_ERROR_NONE             (0x00000000U)    /*!< No error                */
  332. #define  HAL_UART_ERROR_PE               (0x00000001U)    /*!< Parity error            */
  333. #define  HAL_UART_ERROR_NE               (0x00000002U)    /*!< Noise error             */
  334. #define  HAL_UART_ERROR_FE               (0x00000004U)    /*!< Frame error             */
  335. #define  HAL_UART_ERROR_ORE              (0x00000008U)    /*!< Overrun error           */
  336. #define  HAL_UART_ERROR_DMA              (0x00000010U)    /*!< DMA transfer error      */
  337. #define  HAL_UART_ERROR_RTO              (0x00000020U)    /*!< Receiver Timeout error  */
  338.  
  339. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  340. #define  HAL_UART_ERROR_INVALID_CALLBACK (0x00000040U)    /*!< Invalid Callback error  */
  341. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  342. /**
  343.   * @}
  344.   */
  345.  
  346. /** @defgroup UART_Stop_Bits   UART Number of Stop Bits
  347.   * @{
  348.   */
  349. #define UART_STOPBITS_0_5                    USART_CR2_STOP_0                     /*!< UART frame with 0.5 stop bit  */
  350. #define UART_STOPBITS_1                     0x00000000U                           /*!< UART frame with 1 stop bit    */
  351. #define UART_STOPBITS_1_5                   (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< UART frame with 1.5 stop bits */
  352. #define UART_STOPBITS_2                      USART_CR2_STOP_1                     /*!< UART frame with 2 stop bits   */
  353. /**
  354.   * @}
  355.   */
  356.  
  357. /** @defgroup UART_Parity  UART Parity
  358.   * @{
  359.   */
  360. #define UART_PARITY_NONE                    0x00000000U                        /*!< No parity   */
  361. #define UART_PARITY_EVEN                    USART_CR1_PCE                      /*!< Even parity */
  362. #define UART_PARITY_ODD                     (USART_CR1_PCE | USART_CR1_PS)     /*!< Odd parity  */
  363. /**
  364.   * @}
  365.   */
  366.  
  367. /** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control
  368.   * @{
  369.   */
  370. #define UART_HWCONTROL_NONE                  0x00000000U                          /*!< No hardware control       */
  371. #define UART_HWCONTROL_RTS                   USART_CR3_RTSE                       /*!< Request To Send           */
  372. #define UART_HWCONTROL_CTS                   USART_CR3_CTSE                       /*!< Clear To Send             */
  373. #define UART_HWCONTROL_RTS_CTS               (USART_CR3_RTSE | USART_CR3_CTSE)    /*!< Request and Clear To Send */
  374. /**
  375.   * @}
  376.   */
  377.  
  378. /** @defgroup UART_Mode UART Transfer Mode
  379.   * @{
  380.   */
  381. #define UART_MODE_RX                        USART_CR1_RE                    /*!< RX mode        */
  382. #define UART_MODE_TX                        USART_CR1_TE                    /*!< TX mode        */
  383. #define UART_MODE_TX_RX                     (USART_CR1_TE |USART_CR1_RE)    /*!< RX and TX mode */
  384. /**
  385.   * @}
  386.   */
  387.  
  388. /** @defgroup UART_State  UART State
  389.   * @{
  390.   */
  391. #define UART_STATE_DISABLE                  0x00000000U         /*!< UART disabled  */
  392. #define UART_STATE_ENABLE                   USART_CR1_UE        /*!< UART enabled   */
  393. /**
  394.   * @}
  395.   */
  396.  
  397. /** @defgroup UART_Over_Sampling UART Over Sampling
  398.   * @{
  399.   */
  400. #define UART_OVERSAMPLING_16                0x00000000U         /*!< Oversampling by 16 */
  401. #define UART_OVERSAMPLING_8                 USART_CR1_OVER8     /*!< Oversampling by 8  */
  402. /**
  403.   * @}
  404.   */
  405.  
  406. /** @defgroup UART_OneBit_Sampling UART One Bit Sampling Method
  407.   * @{
  408.   */
  409. #define UART_ONE_BIT_SAMPLE_DISABLE         0x00000000U         /*!< One-bit sampling disable */
  410. #define UART_ONE_BIT_SAMPLE_ENABLE          USART_CR3_ONEBIT    /*!< One-bit sampling enable  */
  411. /**
  412.   * @}
  413.   */
  414.  
  415. /** @defgroup UART_AutoBaud_Rate_Mode    UART Advanced Feature AutoBaud Rate Mode
  416.   * @{
  417.   */
  418. #define UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT    0x00000000U           /*!< Auto Baud rate detection
  419.                                                                               on start bit              */
  420. #define UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE USART_CR2_ABRMODE_0   /*!< Auto Baud rate detection
  421.                                                                               on falling edge           */
  422. #define UART_ADVFEATURE_AUTOBAUDRATE_ON0X7FFRAME   USART_CR2_ABRMODE_1   /*!< Auto Baud rate detection
  423.                                                                               on 0x7F frame detection   */
  424. #define UART_ADVFEATURE_AUTOBAUDRATE_ON0X55FRAME   USART_CR2_ABRMODE     /*!< Auto Baud rate detection
  425.                                                                               on 0x55 frame detection   */
  426. /**
  427.   * @}
  428.   */
  429.  
  430. /** @defgroup UART_Receiver_Timeout UART Receiver Timeout
  431.   * @{
  432.   */
  433. #define UART_RECEIVER_TIMEOUT_DISABLE       0x00000000U                /*!< UART Receiver Timeout disable */
  434. #define UART_RECEIVER_TIMEOUT_ENABLE        USART_CR2_RTOEN            /*!< UART Receiver Timeout enable  */
  435. /**
  436.   * @}
  437.   */
  438.  
  439. /** @defgroup UART_LIN    UART Local Interconnection Network mode
  440.   * @{
  441.   */
  442. #define UART_LIN_DISABLE                    0x00000000U                /*!< Local Interconnect Network disable */
  443. #define UART_LIN_ENABLE                     USART_CR2_LINEN            /*!< Local Interconnect Network enable  */
  444. /**
  445.   * @}
  446.   */
  447.  
  448. /** @defgroup UART_LIN_Break_Detection  UART LIN Break Detection
  449.   * @{
  450.   */
  451. #define UART_LINBREAKDETECTLENGTH_10B       0x00000000U                /*!< LIN 10-bit break detection length */
  452. #define UART_LINBREAKDETECTLENGTH_11B       USART_CR2_LBDL             /*!< LIN 11-bit break detection length  */
  453. /**
  454.   * @}
  455.   */
  456.  
  457. /** @defgroup UART_DMA_Tx    UART DMA Tx
  458.   * @{
  459.   */
  460. #define UART_DMA_TX_DISABLE                 0x00000000U                /*!< UART DMA TX disabled */
  461. #define UART_DMA_TX_ENABLE                  USART_CR3_DMAT             /*!< UART DMA TX enabled  */
  462. /**
  463.   * @}
  464.   */
  465.  
  466. /** @defgroup UART_DMA_Rx   UART DMA Rx
  467.   * @{
  468.   */
  469. #define UART_DMA_RX_DISABLE                 0x00000000U                 /*!< UART DMA RX disabled */
  470. #define UART_DMA_RX_ENABLE                  USART_CR3_DMAR              /*!< UART DMA RX enabled  */
  471. /**
  472.   * @}
  473.   */
  474.  
  475. /** @defgroup UART_Half_Duplex_Selection  UART Half Duplex Selection
  476.   * @{
  477.   */
  478. #define UART_HALF_DUPLEX_DISABLE            0x00000000U                 /*!< UART half-duplex disabled */
  479. #define UART_HALF_DUPLEX_ENABLE             USART_CR3_HDSEL             /*!< UART half-duplex enabled  */
  480. /**
  481.   * @}
  482.   */
  483.  
  484. /** @defgroup UART_WakeUp_Methods   UART WakeUp Methods
  485.   * @{
  486.   */
  487. #define UART_WAKEUPMETHOD_IDLELINE          0x00000000U                 /*!< UART wake-up on idle line    */
  488. #define UART_WAKEUPMETHOD_ADDRESSMARK       USART_CR1_WAKE              /*!< UART wake-up on address mark */
  489. /**
  490.   * @}
  491.   */
  492.  
  493. /** @defgroup UART_Request_Parameters UART Request Parameters
  494.   * @{
  495.   */
  496. #define UART_AUTOBAUD_REQUEST               USART_RQR_ABRRQ        /*!< Auto-Baud Rate Request      */
  497. #define UART_SENDBREAK_REQUEST              USART_RQR_SBKRQ        /*!< Send Break Request          */
  498. #define UART_MUTE_MODE_REQUEST              USART_RQR_MMRQ         /*!< Mute Mode Request           */
  499. #define UART_RXDATA_FLUSH_REQUEST           USART_RQR_RXFRQ        /*!< Receive Data flush Request  */
  500. #define UART_TXDATA_FLUSH_REQUEST           USART_RQR_TXFRQ        /*!< Transmit data flush Request */
  501. /**
  502.   * @}
  503.   */
  504.  
  505. /** @defgroup UART_Advanced_Features_Initialization_Type  UART Advanced Feature Initialization Type
  506.   * @{
  507.   */
  508. #define UART_ADVFEATURE_NO_INIT                 0x00000000U          /*!< No advanced feature initialization       */
  509. #define UART_ADVFEATURE_TXINVERT_INIT           0x00000001U          /*!< TX pin active level inversion            */
  510. #define UART_ADVFEATURE_RXINVERT_INIT           0x00000002U          /*!< RX pin active level inversion            */
  511. #define UART_ADVFEATURE_DATAINVERT_INIT         0x00000004U          /*!< Binary data inversion                    */
  512. #define UART_ADVFEATURE_SWAP_INIT               0x00000008U          /*!< TX/RX pins swap                          */
  513. #define UART_ADVFEATURE_RXOVERRUNDISABLE_INIT   0x00000010U          /*!< RX overrun disable                       */
  514. #define UART_ADVFEATURE_DMADISABLEONERROR_INIT  0x00000020U          /*!< DMA disable on Reception Error           */
  515. #define UART_ADVFEATURE_AUTOBAUDRATE_INIT       0x00000040U          /*!< Auto Baud rate detection initialization  */
  516. #define UART_ADVFEATURE_MSBFIRST_INIT           0x00000080U          /*!< Most significant bit sent/received first */
  517. /**
  518.   * @}
  519.   */
  520.  
  521. /** @defgroup UART_Tx_Inv UART Advanced Feature TX Pin Active Level Inversion
  522.   * @{
  523.   */
  524. #define UART_ADVFEATURE_TXINV_DISABLE       0x00000000U             /*!< TX pin active level inversion disable */
  525. #define UART_ADVFEATURE_TXINV_ENABLE        USART_CR2_TXINV         /*!< TX pin active level inversion enable  */
  526. /**
  527.   * @}
  528.   */
  529.  
  530. /** @defgroup UART_Rx_Inv UART Advanced Feature RX Pin Active Level Inversion
  531.   * @{
  532.   */
  533. #define UART_ADVFEATURE_RXINV_DISABLE       0x00000000U             /*!< RX pin active level inversion disable */
  534. #define UART_ADVFEATURE_RXINV_ENABLE        USART_CR2_RXINV         /*!< RX pin active level inversion enable  */
  535. /**
  536.   * @}
  537.   */
  538.  
  539. /** @defgroup UART_Data_Inv  UART Advanced Feature Binary Data Inversion
  540.   * @{
  541.   */
  542. #define UART_ADVFEATURE_DATAINV_DISABLE     0x00000000U             /*!< Binary data inversion disable */
  543. #define UART_ADVFEATURE_DATAINV_ENABLE      USART_CR2_DATAINV       /*!< Binary data inversion enable  */
  544. /**
  545.   * @}
  546.   */
  547.  
  548. /** @defgroup UART_Rx_Tx_Swap UART Advanced Feature RX TX Pins Swap
  549.   * @{
  550.   */
  551. #define UART_ADVFEATURE_SWAP_DISABLE        0x00000000U             /*!< TX/RX pins swap disable */
  552. #define UART_ADVFEATURE_SWAP_ENABLE         USART_CR2_SWAP          /*!< TX/RX pins swap enable  */
  553. /**
  554.   * @}
  555.   */
  556.  
  557. /** @defgroup UART_Overrun_Disable  UART Advanced Feature Overrun Disable
  558.   * @{
  559.   */
  560. #define UART_ADVFEATURE_OVERRUN_ENABLE      0x00000000U             /*!< RX overrun enable  */
  561. #define UART_ADVFEATURE_OVERRUN_DISABLE     USART_CR3_OVRDIS        /*!< RX overrun disable */
  562. /**
  563.   * @}
  564.   */
  565.  
  566. /** @defgroup UART_AutoBaudRate_Enable  UART Advanced Feature Auto BaudRate Enable
  567.   * @{
  568.   */
  569. #define UART_ADVFEATURE_AUTOBAUDRATE_DISABLE   0x00000000U          /*!< RX Auto Baud rate detection enable  */
  570. #define UART_ADVFEATURE_AUTOBAUDRATE_ENABLE    USART_CR2_ABREN      /*!< RX Auto Baud rate detection disable */
  571. /**
  572.   * @}
  573.   */
  574.  
  575. /** @defgroup UART_DMA_Disable_on_Rx_Error   UART Advanced Feature DMA Disable On Rx Error
  576.   * @{
  577.   */
  578. #define UART_ADVFEATURE_DMA_ENABLEONRXERROR    0x00000000U          /*!< DMA enable on Reception Error  */
  579. #define UART_ADVFEATURE_DMA_DISABLEONRXERROR   USART_CR3_DDRE       /*!< DMA disable on Reception Error */
  580. /**
  581.   * @}
  582.   */
  583.  
  584. /** @defgroup UART_MSB_First   UART Advanced Feature MSB First
  585.   * @{
  586.   */
  587. #define UART_ADVFEATURE_MSBFIRST_DISABLE    0x00000000U             /*!< Most significant bit sent/received
  588.                                                                          first disable                      */
  589. #define UART_ADVFEATURE_MSBFIRST_ENABLE     USART_CR2_MSBFIRST      /*!< Most significant bit sent/received
  590.                                                                          first enable                       */
  591. /**
  592.   * @}
  593.   */
  594. #if defined(USART_CR1_UESM)
  595.  
  596. /** @defgroup UART_Stop_Mode_Enable   UART Advanced Feature Stop Mode Enable
  597.   * @{
  598.   */
  599. #define UART_ADVFEATURE_STOPMODE_DISABLE    0x00000000U             /*!< UART stop mode disable */
  600. #define UART_ADVFEATURE_STOPMODE_ENABLE     USART_CR1_UESM          /*!< UART stop mode enable  */
  601. /**
  602.   * @}
  603.   */
  604. #endif /* USART_CR1_UESM */
  605.  
  606. /** @defgroup UART_Mute_Mode   UART Advanced Feature Mute Mode Enable
  607.   * @{
  608.   */
  609. #define UART_ADVFEATURE_MUTEMODE_DISABLE    0x00000000U             /*!< UART mute mode disable */
  610. #define UART_ADVFEATURE_MUTEMODE_ENABLE     USART_CR1_MME           /*!< UART mute mode enable  */
  611. /**
  612.   * @}
  613.   */
  614.  
  615. /** @defgroup UART_CR2_ADDRESS_LSB_POS    UART Address-matching LSB Position In CR2 Register
  616.   * @{
  617.   */
  618. #define UART_CR2_ADDRESS_LSB_POS             24U             /*!< UART address-matching LSB position in CR2 register */
  619. /**
  620.   * @}
  621.   */
  622. #if defined(USART_CR1_UESM)
  623.  
  624. /** @defgroup UART_WakeUp_from_Stop_Selection   UART WakeUp From Stop Selection
  625.   * @{
  626.   */
  627. #if defined(USART_CR3_WUS)
  628. #define UART_WAKEUP_ON_ADDRESS              0x00000000U             /*!< UART wake-up on address                     */
  629. #define UART_WAKEUP_ON_STARTBIT             USART_CR3_WUS_1         /*!< UART wake-up on start bit                   */
  630. #define UART_WAKEUP_ON_READDATA_NONEMPTY    USART_CR3_WUS           /*!< UART wake-up on receive data register
  631.                                                                          not empty or RXFIFO is not empty            */
  632. #else
  633. #define UART_WAKEUP_ON_ADDRESS              0x00000000U             /*!< UART wake-up on address                     */
  634. #define UART_WAKEUP_ON_READDATA_NONEMPTY    0x00000001U             /*!< UART wake-up on receive data register
  635.                                                                          not empty or RXFIFO is not empty            */
  636. #endif /* USART_CR3_WUS */
  637. /**
  638.   * @}
  639.   */
  640. #endif /* USART_CR1_UESM */
  641.  
  642. /** @defgroup UART_DriverEnable_Polarity      UART DriverEnable Polarity
  643.   * @{
  644.   */
  645. #define UART_DE_POLARITY_HIGH               0x00000000U             /*!< Driver enable signal is active high */
  646. #define UART_DE_POLARITY_LOW                USART_CR3_DEP           /*!< Driver enable signal is active low  */
  647. /**
  648.   * @}
  649.   */
  650.  
  651. /** @defgroup UART_CR1_DEAT_ADDRESS_LSB_POS    UART Driver Enable Assertion Time LSB Position In CR1 Register
  652.   * @{
  653.   */
  654. #define UART_CR1_DEAT_ADDRESS_LSB_POS       21U      /*!< UART Driver Enable assertion time LSB
  655.                                                           position in CR1 register */
  656. /**
  657.   * @}
  658.   */
  659.  
  660. /** @defgroup UART_CR1_DEDT_ADDRESS_LSB_POS    UART Driver Enable DeAssertion Time LSB Position In CR1 Register
  661.   * @{
  662.   */
  663. #define UART_CR1_DEDT_ADDRESS_LSB_POS       16U      /*!< UART Driver Enable de-assertion time LSB
  664.                                                           position in CR1 register */
  665. /**
  666.   * @}
  667.   */
  668.  
  669. /** @defgroup UART_Interruption_Mask    UART Interruptions Flag Mask
  670.   * @{
  671.   */
  672. #define UART_IT_MASK                        0x001FU  /*!< UART interruptions flags mask */
  673. /**
  674.   * @}
  675.   */
  676.  
  677. /** @defgroup UART_TimeOut_Value    UART polling-based communications time-out value
  678.   * @{
  679.   */
  680. #define HAL_UART_TIMEOUT_VALUE              0x1FFFFFFU  /*!< UART polling-based communications time-out value */
  681. /**
  682.   * @}
  683.   */
  684.  
  685. /** @defgroup UART_Flags     UART Status Flags
  686.   *        Elements values convention: 0xXXXX
  687.   *           - 0xXXXX  : Flag mask in the ISR register
  688.   * @{
  689.   */
  690. #define UART_FLAG_REACK                     USART_ISR_REACK         /*!< UART receive enable acknowledge flag      */
  691. #define UART_FLAG_TEACK                     USART_ISR_TEACK         /*!< UART transmit enable acknowledge flag     */
  692. #if defined(USART_CR1_UESM)
  693. #if defined(USART_CR3_WUFIE)
  694. #define UART_FLAG_WUF                       USART_ISR_WUF           /*!< UART wake-up from stop mode flag          */
  695. #endif /* USART_CR3_WUFIE */
  696. #endif /* USART_CR1_UESM */
  697. #define UART_FLAG_RWU                       USART_ISR_RWU           /*!< UART receiver wake-up from mute mode flag */
  698. #define UART_FLAG_SBKF                      USART_ISR_SBKF          /*!< UART send break flag                      */
  699. #define UART_FLAG_CMF                       USART_ISR_CMF           /*!< UART character match flag                 */
  700. #define UART_FLAG_BUSY                      USART_ISR_BUSY          /*!< UART busy flag                            */
  701. #define UART_FLAG_ABRF                      USART_ISR_ABRF          /*!< UART auto Baud rate flag                  */
  702. #define UART_FLAG_ABRE                      USART_ISR_ABRE          /*!< UART auto Baud rate error                 */
  703. #define UART_FLAG_RTOF                      USART_ISR_RTOF          /*!< UART receiver timeout flag                */
  704. #define UART_FLAG_CTS                       USART_ISR_CTS           /*!< UART clear to send flag                   */
  705. #define UART_FLAG_CTSIF                     USART_ISR_CTSIF         /*!< UART clear to send interrupt flag         */
  706. #define UART_FLAG_LBDF                      USART_ISR_LBDF          /*!< UART LIN break detection flag             */
  707. #define UART_FLAG_TXE                       USART_ISR_TXE           /*!< UART transmit data register empty         */
  708. #define UART_FLAG_TC                        USART_ISR_TC            /*!< UART transmission complete                */
  709. #define UART_FLAG_RXNE                      USART_ISR_RXNE          /*!< UART read data register not empty         */
  710. #define UART_FLAG_IDLE                      USART_ISR_IDLE          /*!< UART idle flag                            */
  711. #define UART_FLAG_ORE                       USART_ISR_ORE           /*!< UART overrun error                        */
  712. #define UART_FLAG_NE                        USART_ISR_NE            /*!< UART noise error                          */
  713. #define UART_FLAG_FE                        USART_ISR_FE            /*!< UART frame error                          */
  714. #define UART_FLAG_PE                        USART_ISR_PE            /*!< UART parity error                         */
  715. /**
  716.   * @}
  717.   */
  718.  
  719. /** @defgroup UART_Interrupt_definition   UART Interrupts Definition
  720.   *        Elements values convention: 000ZZZZZ0XXYYYYYb
  721.   *           - YYYYY  : Interrupt source position in the XX register (5bits)
  722.   *           - XX  : Interrupt source register (2bits)
  723.   *                 - 01: CR1 register
  724.   *                 - 10: CR2 register
  725.   *                 - 11: CR3 register
  726.   *           - ZZZZZ  : Flag position in the ISR register(5bits)
  727.   *        Elements values convention: 000000000XXYYYYYb
  728.   *           - YYYYY  : Interrupt source position in the XX register (5bits)
  729.   *           - XX  : Interrupt source register (2bits)
  730.   *                 - 01: CR1 register
  731.   *                 - 10: CR2 register
  732.   *                 - 11: CR3 register
  733.   *        Elements values convention: 0000ZZZZ00000000b
  734.   *           - ZZZZ  : Flag position in the ISR register(4bits)
  735.   * @{
  736.   */
  737. #define UART_IT_PE                          0x0028U              /*!< UART parity error interruption                 */
  738. #define UART_IT_TXE                         0x0727U              /*!< UART transmit data register empty interruption */
  739. #define UART_IT_TC                          0x0626U              /*!< UART transmission complete interruption        */
  740. #define UART_IT_RXNE                        0x0525U              /*!< UART read data register not empty interruption */
  741. #define UART_IT_IDLE                        0x0424U              /*!< UART idle interruption                         */
  742. #define UART_IT_LBD                         0x0846U              /*!< UART LIN break detection interruption          */
  743. #define UART_IT_CTS                         0x096AU              /*!< UART CTS interruption                          */
  744. #define UART_IT_CM                          0x112EU              /*!< UART character match interruption              */
  745. #if defined(USART_CR1_UESM)
  746. #if defined(USART_CR3_WUFIE)
  747. #define UART_IT_WUF                         0x1476U              /*!< UART wake-up from stop mode interruption       */
  748. #endif /* USART_CR3_WUFIE */
  749. #endif /* USART_CR1_UESM */
  750. #define UART_IT_RTO                         0x0B3AU              /*!< UART receiver timeout interruption             */
  751.  
  752. #define UART_IT_ERR                         0x0060U              /*!< UART error interruption                        */
  753.  
  754. #define UART_IT_ORE                         0x0300U              /*!< UART overrun error interruption                */
  755. #define UART_IT_NE                          0x0200U              /*!< UART noise error interruption                  */
  756. #define UART_IT_FE                          0x0100U              /*!< UART frame error interruption                  */
  757. /**
  758.   * @}
  759.   */
  760.  
  761. /** @defgroup UART_IT_CLEAR_Flags  UART Interruption Clear Flags
  762.   * @{
  763.   */
  764. #define UART_CLEAR_PEF                       USART_ICR_PECF            /*!< Parity Error Clear Flag           */
  765. #define UART_CLEAR_FEF                       USART_ICR_FECF            /*!< Framing Error Clear Flag          */
  766. #define UART_CLEAR_NEF                       USART_ICR_NCF             /*!< Noise Error detected Clear Flag   */
  767. #define UART_CLEAR_OREF                      USART_ICR_ORECF           /*!< Overrun Error Clear Flag          */
  768. #define UART_CLEAR_IDLEF                     USART_ICR_IDLECF          /*!< IDLE line detected Clear Flag     */
  769. #define UART_CLEAR_TCF                       USART_ICR_TCCF            /*!< Transmission Complete Clear Flag  */
  770. #define UART_CLEAR_LBDF                      USART_ICR_LBDCF           /*!< LIN Break Detection Clear Flag    */
  771. #define UART_CLEAR_CTSF                      USART_ICR_CTSCF           /*!< CTS Interrupt Clear Flag          */
  772. #define UART_CLEAR_CMF                       USART_ICR_CMCF            /*!< Character Match Clear Flag        */
  773. #if defined(USART_CR1_UESM)
  774. #if defined(USART_CR3_WUFIE)
  775. #define UART_CLEAR_WUF                       USART_ICR_WUCF            /*!< Wake Up from stop mode Clear Flag */
  776. #endif /* USART_CR3_WUFIE */
  777. #endif /* USART_CR1_UESM */
  778. #define UART_CLEAR_RTOF                      USART_ICR_RTOCF           /*!< UART receiver timeout clear flag  */
  779. /**
  780.   * @}
  781.   */
  782.  
  783. /** @defgroup UART_RECEPTION_TYPE_Values  UART Reception type values
  784.   * @{
  785.   */
  786. #define HAL_UART_RECEPTION_STANDARD          (0x00000000U)             /*!< Standard reception                       */
  787. #define HAL_UART_RECEPTION_TOIDLE            (0x00000001U)             /*!< Reception till completion or IDLE event  */
  788. #define HAL_UART_RECEPTION_TORTO             (0x00000002U)             /*!< Reception till completion or RTO event   */
  789. #define HAL_UART_RECEPTION_TOCHARMATCH       (0x00000003U)             /*!< Reception till completion or CM event    */
  790. /**
  791.   * @}
  792.   */
  793.  
  794. /**
  795.   * @}
  796.   */
  797.  
  798. /* Exported macros -----------------------------------------------------------*/
  799. /** @defgroup UART_Exported_Macros UART Exported Macros
  800.   * @{
  801.   */
  802.  
  803. /** @brief  Reset UART handle states.
  804.   * @param  __HANDLE__ UART handle.
  805.   * @retval None
  806.   */
  807. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  808. #define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \
  809.                                                        (__HANDLE__)->gState = HAL_UART_STATE_RESET;      \
  810.                                                        (__HANDLE__)->RxState = HAL_UART_STATE_RESET;     \
  811.                                                        (__HANDLE__)->MspInitCallback = NULL;             \
  812.                                                        (__HANDLE__)->MspDeInitCallback = NULL;           \
  813.                                                      } while(0U)
  814. #else
  815. #define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \
  816.                                                        (__HANDLE__)->gState = HAL_UART_STATE_RESET;      \
  817.                                                        (__HANDLE__)->RxState = HAL_UART_STATE_RESET;     \
  818.                                                      } while(0U)
  819. #endif /*USE_HAL_UART_REGISTER_CALLBACKS */
  820.  
  821. /** @brief  Flush the UART Data registers.
  822.   * @param  __HANDLE__ specifies the UART Handle.
  823.   * @retval None
  824.   */
  825. #define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__)  \
  826.   do{                \
  827.     SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
  828.     SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
  829.   }  while(0U)
  830.  
  831. /** @brief  Clear the specified UART pending flag.
  832.   * @param  __HANDLE__ specifies the UART Handle.
  833.   * @param  __FLAG__ specifies the flag to check.
  834.   *          This parameter can be any combination of the following values:
  835.   *            @arg @ref UART_CLEAR_PEF      Parity Error Clear Flag
  836.   *            @arg @ref UART_CLEAR_FEF      Framing Error Clear Flag
  837.   *            @arg @ref UART_CLEAR_NEF      Noise detected Clear Flag
  838.   *            @arg @ref UART_CLEAR_OREF     Overrun Error Clear Flag
  839.   *            @arg @ref UART_CLEAR_IDLEF    IDLE line detected Clear Flag
  840.   *            @arg @ref UART_CLEAR_TCF      Transmission Complete Clear Flag
  841.   *            @arg @ref UART_CLEAR_RTOF     Receiver Timeout clear flag
  842.   *            @arg @ref UART_CLEAR_LBDF     LIN Break Detection Clear Flag
  843.   *            @arg @ref UART_CLEAR_CTSF     CTS Interrupt Clear Flag
  844.   *            @arg @ref UART_CLEAR_CMF      Character Match Clear Flag
  845. #if defined(USART_CR1_UESM)
  846. #if defined(USART_CR3_WUFIE)
  847.   *            @arg @ref UART_CLEAR_WUF      Wake Up from stop mode Clear Flag
  848. #endif
  849. #endif
  850.   * @retval None
  851.   */
  852. #define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__))
  853.  
  854. /** @brief  Clear the UART PE pending flag.
  855.   * @param  __HANDLE__ specifies the UART Handle.
  856.   * @retval None
  857.   */
  858. #define __HAL_UART_CLEAR_PEFLAG(__HANDLE__)   __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_PEF)
  859.  
  860. /** @brief  Clear the UART FE pending flag.
  861.   * @param  __HANDLE__ specifies the UART Handle.
  862.   * @retval None
  863.   */
  864. #define __HAL_UART_CLEAR_FEFLAG(__HANDLE__)   __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_FEF)
  865.  
  866. /** @brief  Clear the UART NE pending flag.
  867.   * @param  __HANDLE__ specifies the UART Handle.
  868.   * @retval None
  869.   */
  870. #define __HAL_UART_CLEAR_NEFLAG(__HANDLE__)  __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_NEF)
  871.  
  872. /** @brief  Clear the UART ORE pending flag.
  873.   * @param  __HANDLE__ specifies the UART Handle.
  874.   * @retval None
  875.   */
  876. #define __HAL_UART_CLEAR_OREFLAG(__HANDLE__)   __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_OREF)
  877.  
  878. /** @brief  Clear the UART IDLE pending flag.
  879.   * @param  __HANDLE__ specifies the UART Handle.
  880.   * @retval None
  881.   */
  882. #define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__)   __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_IDLEF)
  883.  
  884.  
  885. /** @brief  Check whether the specified UART flag is set or not.
  886.   * @param  __HANDLE__ specifies the UART Handle.
  887.   * @param  __FLAG__ specifies the flag to check.
  888.   *        This parameter can be one of the following values:
  889.   *            @arg @ref UART_FLAG_REACK Receive enable acknowledge flag
  890.   *            @arg @ref UART_FLAG_TEACK Transmit enable acknowledge flag
  891. #if defined(USART_CR1_UESM)
  892. #if defined(USART_CR3_WUFIE)
  893.   *            @arg @ref UART_FLAG_WUF   Wake up from stop mode flag
  894. #endif
  895. #endif
  896.   *            @arg @ref UART_FLAG_RWU   Receiver wake up flag (if the UART in mute mode)
  897.   *            @arg @ref UART_FLAG_SBKF  Send Break flag
  898.   *            @arg @ref UART_FLAG_CMF   Character match flag
  899.   *            @arg @ref UART_FLAG_BUSY  Busy flag
  900.   *            @arg @ref UART_FLAG_ABRF  Auto Baud rate detection flag
  901.   *            @arg @ref UART_FLAG_ABRE  Auto Baud rate detection error flag
  902.   *            @arg @ref UART_FLAG_CTS   CTS Change flag
  903.   *            @arg @ref UART_FLAG_LBDF  LIN Break detection flag
  904.   *            @arg @ref UART_FLAG_TXE   Transmit data register empty flag
  905.   *            @arg @ref UART_FLAG_TC    Transmission Complete flag
  906.   *            @arg @ref UART_FLAG_RXNE  Receive data register not empty flag
  907.   *            @arg @ref UART_FLAG_RTOF  Receiver Timeout flag
  908.   *            @arg @ref UART_FLAG_IDLE  Idle Line detection flag
  909.   *            @arg @ref UART_FLAG_ORE   Overrun Error flag
  910.   *            @arg @ref UART_FLAG_NE    Noise Error flag
  911.   *            @arg @ref UART_FLAG_FE    Framing Error flag
  912.   *            @arg @ref UART_FLAG_PE    Parity Error flag
  913.   * @retval The new state of __FLAG__ (TRUE or FALSE).
  914.   */
  915. #define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__))
  916.  
  917. /** @brief  Enable the specified UART interrupt.
  918.   * @param  __HANDLE__ specifies the UART Handle.
  919.   * @param  __INTERRUPT__ specifies the UART interrupt source to enable.
  920.   *          This parameter can be one of the following values:
  921. #if defined(USART_CR1_UESM)
  922. #if defined(USART_CR3_WUFIE)
  923.   *            @arg @ref UART_IT_WUF   Wakeup from stop mode interrupt
  924. #endif
  925. #endif
  926.   *            @arg @ref UART_IT_CM    Character match interrupt
  927.   *            @arg @ref UART_IT_CTS   CTS change interrupt
  928.   *            @arg @ref UART_IT_LBD   LIN Break detection interrupt
  929.   *            @arg @ref UART_IT_TXE   Transmit Data Register empty interrupt
  930.   *            @arg @ref UART_IT_TC    Transmission complete interrupt
  931.   *            @arg @ref UART_IT_RXNE  Receive Data register not empty interrupt
  932.   *            @arg @ref UART_IT_RTO   Receive Timeout interrupt
  933.   *            @arg @ref UART_IT_IDLE  Idle line detection interrupt
  934.   *            @arg @ref UART_IT_PE    Parity Error interrupt
  935.   *            @arg @ref UART_IT_ERR   Error interrupt (frame error, noise error, overrun error)
  936.   * @retval None
  937.   */
  938. #define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__)   (\
  939.                                                            ((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U)?\
  940.                                                            ((__HANDLE__)->Instance->CR1 |= (1U <<\
  941.                                                                ((__INTERRUPT__) & UART_IT_MASK))): \
  942.                                                            ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U)?\
  943.                                                            ((__HANDLE__)->Instance->CR2 |= (1U <<\
  944.                                                                ((__INTERRUPT__) & UART_IT_MASK))): \
  945.                                                            ((__HANDLE__)->Instance->CR3 |= (1U <<\
  946.                                                                ((__INTERRUPT__) & UART_IT_MASK))))
  947.  
  948. /** @brief  Disable the specified UART interrupt.
  949.   * @param  __HANDLE__ specifies the UART Handle.
  950.   * @param  __INTERRUPT__ specifies the UART interrupt source to disable.
  951.   *          This parameter can be one of the following values:
  952. #if defined(USART_CR1_UESM)
  953. #if defined(USART_CR3_WUFIE)
  954.   *            @arg @ref UART_IT_WUF   Wakeup from stop mode interrupt
  955. #endif
  956. #endif
  957.   *            @arg @ref UART_IT_CM    Character match interrupt
  958.   *            @arg @ref UART_IT_CTS   CTS change interrupt
  959.   *            @arg @ref UART_IT_LBD   LIN Break detection interrupt
  960.   *            @arg @ref UART_IT_TXE   Transmit Data Register empty interrupt
  961.   *            @arg @ref UART_IT_TC    Transmission complete interrupt
  962.   *            @arg @ref UART_IT_RXNE  Receive Data register not empty interrupt
  963.   *            @arg @ref UART_IT_RTO   Receive Timeout interrupt
  964.   *            @arg @ref UART_IT_IDLE  Idle line detection interrupt
  965.   *            @arg @ref UART_IT_PE    Parity Error interrupt
  966.   *            @arg @ref UART_IT_ERR   Error interrupt (Frame error, noise error, overrun error)
  967.   * @retval None
  968.   */
  969. #define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__)  (\
  970.                                                            ((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U)?\
  971.                                                            ((__HANDLE__)->Instance->CR1 &= ~ (1U <<\
  972.                                                                ((__INTERRUPT__) & UART_IT_MASK))): \
  973.                                                            ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U)?\
  974.                                                            ((__HANDLE__)->Instance->CR2 &= ~ (1U <<\
  975.                                                                ((__INTERRUPT__) & UART_IT_MASK))): \
  976.                                                            ((__HANDLE__)->Instance->CR3 &= ~ (1U <<\
  977.                                                                ((__INTERRUPT__) & UART_IT_MASK))))
  978.  
  979. /** @brief  Check whether the specified UART interrupt has occurred or not.
  980.   * @param  __HANDLE__ specifies the UART Handle.
  981.   * @param  __INTERRUPT__ specifies the UART interrupt to check.
  982.   *          This parameter can be one of the following values:
  983. #if defined(USART_CR1_UESM)
  984. #if defined(USART_CR3_WUFIE)
  985.   *            @arg @ref UART_IT_WUF   Wakeup from stop mode interrupt
  986. #endif
  987. #endif
  988.   *            @arg @ref UART_IT_CM    Character match interrupt
  989.   *            @arg @ref UART_IT_CTS   CTS change interrupt
  990.   *            @arg @ref UART_IT_LBD   LIN Break detection interrupt
  991.   *            @arg @ref UART_IT_TXE   Transmit Data Register empty interrupt
  992.   *            @arg @ref UART_IT_TC    Transmission complete interrupt
  993.   *            @arg @ref UART_IT_RXNE  Receive Data register not empty interrupt
  994.   *            @arg @ref UART_IT_RTO   Receive Timeout interrupt
  995.   *            @arg @ref UART_IT_IDLE  Idle line detection interrupt
  996.   *            @arg @ref UART_IT_PE    Parity Error interrupt
  997.   *            @arg @ref UART_IT_ERR   Error interrupt (Frame error, noise error, overrun error)
  998.   * @retval The new state of __INTERRUPT__ (SET or RESET).
  999.   */
  1000. #define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR\
  1001.                                                         & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET)
  1002.  
  1003. /** @brief  Check whether the specified UART interrupt source is enabled or not.
  1004.   * @param  __HANDLE__ specifies the UART Handle.
  1005.   * @param  __INTERRUPT__ specifies the UART interrupt source to check.
  1006.   *          This parameter can be one of the following values:
  1007. #if defined(USART_CR1_UESM)
  1008. #if defined(USART_CR3_WUFIE)
  1009.   *            @arg @ref UART_IT_WUF   Wakeup from stop mode interrupt
  1010. #endif
  1011. #endif
  1012.   *            @arg @ref UART_IT_CM    Character match interrupt
  1013.   *            @arg @ref UART_IT_CTS   CTS change interrupt
  1014.   *            @arg @ref UART_IT_LBD   LIN Break detection interrupt
  1015.   *            @arg @ref UART_IT_TXE   Transmit Data Register empty interrupt
  1016.   *            @arg @ref UART_IT_TC    Transmission complete interrupt
  1017.   *            @arg @ref UART_IT_RXNE  Receive Data register not empty interrupt
  1018.   *            @arg @ref UART_IT_RTO   Receive Timeout interrupt
  1019.   *            @arg @ref UART_IT_IDLE  Idle line detection interrupt
  1020.   *            @arg @ref UART_IT_PE    Parity Error interrupt
  1021.   *            @arg @ref UART_IT_ERR   Error interrupt (Frame error, noise error, overrun error)
  1022.   * @retval The new state of __INTERRUPT__ (SET or RESET).
  1023.   */
  1024. #define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U) ?\
  1025.                                                                 (__HANDLE__)->Instance->CR1 : \
  1026.                                                                 (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ?\
  1027.                                                                  (__HANDLE__)->Instance->CR2 : \
  1028.                                                                  (__HANDLE__)->Instance->CR3)) & (1U <<\
  1029.                                                                      (((uint16_t)(__INTERRUPT__)) &\
  1030.                                                                       UART_IT_MASK)))  != RESET) ? SET : RESET)
  1031.  
  1032. /** @brief  Clear the specified UART ISR flag, in setting the proper ICR register flag.
  1033.   * @param  __HANDLE__ specifies the UART Handle.
  1034.   * @param  __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set
  1035.   *                       to clear the corresponding interrupt
  1036.   *          This parameter can be one of the following values:
  1037.   *            @arg @ref UART_CLEAR_PEF    Parity Error Clear Flag
  1038.   *            @arg @ref UART_CLEAR_FEF    Framing Error Clear Flag
  1039.   *            @arg @ref UART_CLEAR_NEF    Noise detected Clear Flag
  1040.   *            @arg @ref UART_CLEAR_OREF   Overrun Error Clear Flag
  1041.   *            @arg @ref UART_CLEAR_IDLEF  IDLE line detected Clear Flag
  1042.   *            @arg @ref UART_CLEAR_RTOF   Receiver timeout clear flag
  1043.   *            @arg @ref UART_CLEAR_TCF    Transmission Complete Clear Flag
  1044.   *            @arg @ref UART_CLEAR_LBDF   LIN Break Detection Clear Flag
  1045.   *            @arg @ref UART_CLEAR_CTSF   CTS Interrupt Clear Flag
  1046.   *            @arg @ref UART_CLEAR_CMF    Character Match Clear Flag
  1047. #if defined(USART_CR1_UESM)
  1048. #if defined(USART_CR3_WUFIE)
  1049.   *            @arg @ref UART_CLEAR_WUF    Wake Up from stop mode Clear Flag
  1050. #endif
  1051. #endif
  1052.   * @retval None
  1053.   */
  1054. #define __HAL_UART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__))
  1055.  
  1056. /** @brief  Set a specific UART request flag.
  1057.   * @param  __HANDLE__ specifies the UART Handle.
  1058.   * @param  __REQ__ specifies the request flag to set
  1059.   *          This parameter can be one of the following values:
  1060.   *            @arg @ref UART_AUTOBAUD_REQUEST Auto-Baud Rate Request
  1061.   *            @arg @ref UART_SENDBREAK_REQUEST Send Break Request
  1062.   *            @arg @ref UART_MUTE_MODE_REQUEST Mute Mode Request
  1063.   *            @arg @ref UART_RXDATA_FLUSH_REQUEST Receive Data flush Request
  1064.   *            @arg @ref UART_TXDATA_FLUSH_REQUEST Transmit data flush Request
  1065.   * @retval None
  1066.   */
  1067. #define __HAL_UART_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (uint16_t)(__REQ__))
  1068.  
  1069. /** @brief  Enable the UART one bit sample method.
  1070.   * @param  __HANDLE__ specifies the UART Handle.
  1071.   * @retval None
  1072.   */
  1073. #define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT)
  1074.  
  1075. /** @brief  Disable the UART one bit sample method.
  1076.   * @param  __HANDLE__ specifies the UART Handle.
  1077.   * @retval None
  1078.   */
  1079. #define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= ~USART_CR3_ONEBIT)
  1080.  
  1081. /** @brief  Enable UART.
  1082.   * @param  __HANDLE__ specifies the UART Handle.
  1083.   * @retval None
  1084.   */
  1085. #define __HAL_UART_ENABLE(__HANDLE__)                   ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE)
  1086.  
  1087. /** @brief  Disable UART.
  1088.   * @param  __HANDLE__ specifies the UART Handle.
  1089.   * @retval None
  1090.   */
  1091. #define __HAL_UART_DISABLE(__HANDLE__)                  ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE)
  1092.  
  1093. /** @brief  Enable CTS flow control.
  1094.   * @note   This macro allows to enable CTS hardware flow control for a given UART instance,
  1095.   *         without need to call HAL_UART_Init() function.
  1096.   *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
  1097.   * @note   As macro is expected to be used for modifying CTS Hw flow control feature activation, without need
  1098.   *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
  1099.   *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
  1100.   *           - macro could only be called when corresponding UART instance is disabled
  1101.   *             (i.e. __HAL_UART_DISABLE(__HANDLE__)) and should be followed by an Enable
  1102.   *              macro (i.e. __HAL_UART_ENABLE(__HANDLE__)).
  1103.   * @param  __HANDLE__ specifies the UART Handle.
  1104.   * @retval None
  1105.   */
  1106. #define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__)               \
  1107.   do{                                                             \
  1108.     ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE);  \
  1109.     (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_CTSE;               \
  1110.   } while(0U)
  1111.  
  1112. /** @brief  Disable CTS flow control.
  1113.   * @note   This macro allows to disable CTS hardware flow control for a given UART instance,
  1114.   *         without need to call HAL_UART_Init() function.
  1115.   *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
  1116.   * @note   As macro is expected to be used for modifying CTS Hw flow control feature activation, without need
  1117.   *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
  1118.   *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
  1119.   *           - macro could only be called when corresponding UART instance is disabled
  1120.   *             (i.e. __HAL_UART_DISABLE(__HANDLE__)) and should be followed by an Enable
  1121.   *              macro (i.e. __HAL_UART_ENABLE(__HANDLE__)).
  1122.   * @param  __HANDLE__ specifies the UART Handle.
  1123.   * @retval None
  1124.   */
  1125. #define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__)               \
  1126.   do{                                                              \
  1127.     ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \
  1128.     (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_CTSE);             \
  1129.   } while(0U)
  1130.  
  1131. /** @brief  Enable RTS flow control.
  1132.   * @note   This macro allows to enable RTS hardware flow control for a given UART instance,
  1133.   *         without need to call HAL_UART_Init() function.
  1134.   *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
  1135.   * @note   As macro is expected to be used for modifying RTS Hw flow control feature activation, without need
  1136.   *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
  1137.   *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
  1138.   *           - macro could only be called when corresponding UART instance is disabled
  1139.   *             (i.e. __HAL_UART_DISABLE(__HANDLE__)) and should be followed by an Enable
  1140.   *              macro (i.e. __HAL_UART_ENABLE(__HANDLE__)).
  1141.   * @param  __HANDLE__ specifies the UART Handle.
  1142.   * @retval None
  1143.   */
  1144. #define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__)              \
  1145.   do{                                                            \
  1146.     ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE); \
  1147.     (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_RTSE;              \
  1148.   } while(0U)
  1149.  
  1150. /** @brief  Disable RTS flow control.
  1151.   * @note   This macro allows to disable RTS hardware flow control for a given UART instance,
  1152.   *         without need to call HAL_UART_Init() function.
  1153.   *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
  1154.   * @note   As macro is expected to be used for modifying RTS Hw flow control feature activation, without need
  1155.   *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
  1156.   *           - UART instance should have already been initialised (through call of HAL_UART_Init() )
  1157.   *           - macro could only be called when corresponding UART instance is disabled
  1158.   *             (i.e. __HAL_UART_DISABLE(__HANDLE__)) and should be followed by an Enable
  1159.   *              macro (i.e. __HAL_UART_ENABLE(__HANDLE__)).
  1160.   * @param  __HANDLE__ specifies the UART Handle.
  1161.   * @retval None
  1162.   */
  1163. #define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__)              \
  1164.   do{                                                             \
  1165.     ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\
  1166.     (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE);            \
  1167.   } while(0U)
  1168. /**
  1169.   * @}
  1170.   */
  1171.  
  1172. /* Private macros --------------------------------------------------------*/
  1173. /** @defgroup UART_Private_Macros   UART Private Macros
  1174.   * @{
  1175.   */
  1176.  
  1177.  
  1178. /** @brief  BRR division operation to set BRR register in 8-bit oversampling mode.
  1179.   * @param  __PCLK__ UART clock.
  1180.   * @param  __BAUD__ Baud rate set by the user.
  1181.   * @retval Division result
  1182.   */
  1183. #define UART_DIV_SAMPLING8(__PCLK__, __BAUD__)   ((((__PCLK__)*2U) + ((__BAUD__)/2U)) / (__BAUD__))
  1184.  
  1185. /** @brief  BRR division operation to set BRR register in 16-bit oversampling mode.
  1186.   * @param  __PCLK__ UART clock.
  1187.   * @param  __BAUD__ Baud rate set by the user.
  1188.   * @retval Division result
  1189.   */
  1190. #define UART_DIV_SAMPLING16(__PCLK__, __BAUD__)  (((__PCLK__) + ((__BAUD__)/2U)) / (__BAUD__))
  1191.  
  1192.  
  1193. /** @brief  Check UART Baud rate.
  1194.   * @param  __BAUDRATE__ Baudrate specified by the user.
  1195.   *         The maximum Baud Rate is derived from the maximum clock on F0 (i.e. 48 MHz)
  1196.   *         divided by the smallest oversampling used on the USART (i.e. 8)
  1197.   * @retval SET (__BAUDRATE__ is valid) or RESET (__BAUDRATE__ is invalid)
  1198.   */
  1199. #define IS_UART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 6000001U)
  1200.  
  1201. /** @brief  Check UART assertion time.
  1202.   * @param  __TIME__ 5-bit value assertion time.
  1203.   * @retval Test result (TRUE or FALSE).
  1204.   */
  1205. #define IS_UART_ASSERTIONTIME(__TIME__)    ((__TIME__) <= 0x1FU)
  1206.  
  1207. /** @brief  Check UART deassertion time.
  1208.   * @param  __TIME__ 5-bit value deassertion time.
  1209.   * @retval Test result (TRUE or FALSE).
  1210.   */
  1211. #define IS_UART_DEASSERTIONTIME(__TIME__) ((__TIME__) <= 0x1FU)
  1212.  
  1213. /**
  1214.   * @brief Ensure that UART frame number of stop bits is valid.
  1215.   * @param __STOPBITS__ UART frame number of stop bits.
  1216.   * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid)
  1217.   */
  1218. #define IS_UART_STOPBITS(__STOPBITS__) (((__STOPBITS__) == UART_STOPBITS_0_5) || \
  1219.                                         ((__STOPBITS__) == UART_STOPBITS_1)   || \
  1220.                                         ((__STOPBITS__) == UART_STOPBITS_1_5) || \
  1221.                                         ((__STOPBITS__) == UART_STOPBITS_2))
  1222.  
  1223.  
  1224. /**
  1225.   * @brief Ensure that UART frame parity is valid.
  1226.   * @param __PARITY__ UART frame parity.
  1227.   * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid)
  1228.   */
  1229. #define IS_UART_PARITY(__PARITY__) (((__PARITY__) == UART_PARITY_NONE) || \
  1230.                                     ((__PARITY__) == UART_PARITY_EVEN) || \
  1231.                                     ((__PARITY__) == UART_PARITY_ODD))
  1232.  
  1233. /**
  1234.   * @brief Ensure that UART hardware flow control is valid.
  1235.   * @param __CONTROL__ UART hardware flow control.
  1236.   * @retval SET (__CONTROL__ is valid) or RESET (__CONTROL__ is invalid)
  1237.   */
  1238. #define IS_UART_HARDWARE_FLOW_CONTROL(__CONTROL__)\
  1239.   (((__CONTROL__) == UART_HWCONTROL_NONE) || \
  1240.    ((__CONTROL__) == UART_HWCONTROL_RTS)  || \
  1241.    ((__CONTROL__) == UART_HWCONTROL_CTS)  || \
  1242.    ((__CONTROL__) == UART_HWCONTROL_RTS_CTS))
  1243.  
  1244. /**
  1245.   * @brief Ensure that UART communication mode is valid.
  1246.   * @param __MODE__ UART communication mode.
  1247.   * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid)
  1248.   */
  1249. #define IS_UART_MODE(__MODE__) ((((__MODE__) & (~((uint32_t)(UART_MODE_TX_RX)))) == 0x00U) && ((__MODE__) != 0x00U))
  1250.  
  1251. /**
  1252.   * @brief Ensure that UART state is valid.
  1253.   * @param __STATE__ UART state.
  1254.   * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid)
  1255.   */
  1256. #define IS_UART_STATE(__STATE__) (((__STATE__) == UART_STATE_DISABLE) || \
  1257.                                   ((__STATE__) == UART_STATE_ENABLE))
  1258.  
  1259. /**
  1260.   * @brief Ensure that UART oversampling is valid.
  1261.   * @param __SAMPLING__ UART oversampling.
  1262.   * @retval SET (__SAMPLING__ is valid) or RESET (__SAMPLING__ is invalid)
  1263.   */
  1264. #define IS_UART_OVERSAMPLING(__SAMPLING__) (((__SAMPLING__) == UART_OVERSAMPLING_16) || \
  1265.                                             ((__SAMPLING__) == UART_OVERSAMPLING_8))
  1266.  
  1267. /**
  1268.   * @brief Ensure that UART frame sampling is valid.
  1269.   * @param __ONEBIT__ UART frame sampling.
  1270.   * @retval SET (__ONEBIT__ is valid) or RESET (__ONEBIT__ is invalid)
  1271.   */
  1272. #define IS_UART_ONE_BIT_SAMPLE(__ONEBIT__) (((__ONEBIT__) == UART_ONE_BIT_SAMPLE_DISABLE) || \
  1273.                                             ((__ONEBIT__) == UART_ONE_BIT_SAMPLE_ENABLE))
  1274.  
  1275. /**
  1276.   * @brief Ensure that UART auto Baud rate detection mode is valid.
  1277.   * @param __MODE__ UART auto Baud rate detection mode.
  1278.   * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid)
  1279.   */
  1280. #define IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(__MODE__)  (((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT)    || \
  1281.                                                         ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE) || \
  1282.                                                         ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ON0X7FFRAME)   || \
  1283.                                                         ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ON0X55FRAME))
  1284.  
  1285. /**
  1286.   * @brief Ensure that UART receiver timeout setting is valid.
  1287.   * @param __TIMEOUT__ UART receiver timeout setting.
  1288.   * @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid)
  1289.   */
  1290. #define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__)  (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \
  1291.                                                 ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE))
  1292.  
  1293. /** @brief  Check the receiver timeout value.
  1294.   * @note   The maximum UART receiver timeout value is 0xFFFFFF.
  1295.   * @param  __TIMEOUTVALUE__ receiver timeout value.
  1296.   * @retval Test result (TRUE or FALSE)
  1297.   */
  1298. #define IS_UART_RECEIVER_TIMEOUT_VALUE(__TIMEOUTVALUE__)  ((__TIMEOUTVALUE__) <= 0xFFFFFFU)
  1299.  
  1300. /**
  1301.   * @brief Ensure that UART LIN state is valid.
  1302.   * @param __LIN__ UART LIN state.
  1303.   * @retval SET (__LIN__ is valid) or RESET (__LIN__ is invalid)
  1304.   */
  1305. #define IS_UART_LIN(__LIN__)        (((__LIN__) == UART_LIN_DISABLE) || \
  1306.                                      ((__LIN__) == UART_LIN_ENABLE))
  1307.  
  1308. /**
  1309.   * @brief Ensure that UART LIN break detection length is valid.
  1310.   * @param __LENGTH__ UART LIN break detection length.
  1311.   * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
  1312.   */
  1313. #define IS_UART_LIN_BREAK_DETECT_LENGTH(__LENGTH__) (((__LENGTH__) == UART_LINBREAKDETECTLENGTH_10B) || \
  1314.                                                      ((__LENGTH__) == UART_LINBREAKDETECTLENGTH_11B))
  1315.  
  1316. /**
  1317.   * @brief Ensure that UART DMA TX state is valid.
  1318.   * @param __DMATX__ UART DMA TX state.
  1319.   * @retval SET (__DMATX__ is valid) or RESET (__DMATX__ is invalid)
  1320.   */
  1321. #define IS_UART_DMA_TX(__DMATX__)     (((__DMATX__) == UART_DMA_TX_DISABLE) || \
  1322.                                        ((__DMATX__) == UART_DMA_TX_ENABLE))
  1323.  
  1324. /**
  1325.   * @brief Ensure that UART DMA RX state is valid.
  1326.   * @param __DMARX__ UART DMA RX state.
  1327.   * @retval SET (__DMARX__ is valid) or RESET (__DMARX__ is invalid)
  1328.   */
  1329. #define IS_UART_DMA_RX(__DMARX__)     (((__DMARX__) == UART_DMA_RX_DISABLE) || \
  1330.                                        ((__DMARX__) == UART_DMA_RX_ENABLE))
  1331.  
  1332. /**
  1333.   * @brief Ensure that UART half-duplex state is valid.
  1334.   * @param __HDSEL__ UART half-duplex state.
  1335.   * @retval SET (__HDSEL__ is valid) or RESET (__HDSEL__ is invalid)
  1336.   */
  1337. #define IS_UART_HALF_DUPLEX(__HDSEL__)     (((__HDSEL__) == UART_HALF_DUPLEX_DISABLE) || \
  1338.                                             ((__HDSEL__) == UART_HALF_DUPLEX_ENABLE))
  1339.  
  1340. /**
  1341.   * @brief Ensure that UART wake-up method is valid.
  1342.   * @param __WAKEUP__ UART wake-up method .
  1343.   * @retval SET (__WAKEUP__ is valid) or RESET (__WAKEUP__ is invalid)
  1344.   */
  1345. #define IS_UART_WAKEUPMETHOD(__WAKEUP__) (((__WAKEUP__) == UART_WAKEUPMETHOD_IDLELINE) || \
  1346.                                           ((__WAKEUP__) == UART_WAKEUPMETHOD_ADDRESSMARK))
  1347.  
  1348. /**
  1349.   * @brief Ensure that UART request parameter is valid.
  1350.   * @param __PARAM__ UART request parameter.
  1351.   * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid)
  1352.   */
  1353. #define IS_UART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == UART_AUTOBAUD_REQUEST)     || \
  1354.                                               ((__PARAM__) == UART_SENDBREAK_REQUEST)    || \
  1355.                                               ((__PARAM__) == UART_MUTE_MODE_REQUEST)    || \
  1356.                                               ((__PARAM__) == UART_RXDATA_FLUSH_REQUEST) || \
  1357.                                               ((__PARAM__) == UART_TXDATA_FLUSH_REQUEST))
  1358.  
  1359. /**
  1360.   * @brief Ensure that UART advanced features initialization is valid.
  1361.   * @param __INIT__ UART advanced features initialization.
  1362.   * @retval SET (__INIT__ is valid) or RESET (__INIT__ is invalid)
  1363.   */
  1364. #define IS_UART_ADVFEATURE_INIT(__INIT__)   ((__INIT__) <= (UART_ADVFEATURE_NO_INIT                | \
  1365.                                                             UART_ADVFEATURE_TXINVERT_INIT          | \
  1366.                                                             UART_ADVFEATURE_RXINVERT_INIT          | \
  1367.                                                             UART_ADVFEATURE_DATAINVERT_INIT        | \
  1368.                                                             UART_ADVFEATURE_SWAP_INIT              | \
  1369.                                                             UART_ADVFEATURE_RXOVERRUNDISABLE_INIT  | \
  1370.                                                             UART_ADVFEATURE_DMADISABLEONERROR_INIT | \
  1371.                                                             UART_ADVFEATURE_AUTOBAUDRATE_INIT      | \
  1372.                                                             UART_ADVFEATURE_MSBFIRST_INIT))
  1373.  
  1374. /**
  1375.   * @brief Ensure that UART frame TX inversion setting is valid.
  1376.   * @param __TXINV__ UART frame TX inversion setting.
  1377.   * @retval SET (__TXINV__ is valid) or RESET (__TXINV__ is invalid)
  1378.   */
  1379. #define IS_UART_ADVFEATURE_TXINV(__TXINV__) (((__TXINV__) == UART_ADVFEATURE_TXINV_DISABLE) || \
  1380.                                              ((__TXINV__) == UART_ADVFEATURE_TXINV_ENABLE))
  1381.  
  1382. /**
  1383.   * @brief Ensure that UART frame RX inversion setting is valid.
  1384.   * @param __RXINV__ UART frame RX inversion setting.
  1385.   * @retval SET (__RXINV__ is valid) or RESET (__RXINV__ is invalid)
  1386.   */
  1387. #define IS_UART_ADVFEATURE_RXINV(__RXINV__) (((__RXINV__) == UART_ADVFEATURE_RXINV_DISABLE) || \
  1388.                                              ((__RXINV__) == UART_ADVFEATURE_RXINV_ENABLE))
  1389.  
  1390. /**
  1391.   * @brief Ensure that UART frame data inversion setting is valid.
  1392.   * @param __DATAINV__ UART frame data inversion setting.
  1393.   * @retval SET (__DATAINV__ is valid) or RESET (__DATAINV__ is invalid)
  1394.   */
  1395. #define IS_UART_ADVFEATURE_DATAINV(__DATAINV__) (((__DATAINV__) == UART_ADVFEATURE_DATAINV_DISABLE) || \
  1396.                                                  ((__DATAINV__) == UART_ADVFEATURE_DATAINV_ENABLE))
  1397.  
  1398. /**
  1399.   * @brief Ensure that UART frame RX/TX pins swap setting is valid.
  1400.   * @param __SWAP__ UART frame RX/TX pins swap setting.
  1401.   * @retval SET (__SWAP__ is valid) or RESET (__SWAP__ is invalid)
  1402.   */
  1403. #define IS_UART_ADVFEATURE_SWAP(__SWAP__) (((__SWAP__) == UART_ADVFEATURE_SWAP_DISABLE) || \
  1404.                                            ((__SWAP__) == UART_ADVFEATURE_SWAP_ENABLE))
  1405.  
  1406. /**
  1407.   * @brief Ensure that UART frame overrun setting is valid.
  1408.   * @param __OVERRUN__ UART frame overrun setting.
  1409.   * @retval SET (__OVERRUN__ is valid) or RESET (__OVERRUN__ is invalid)
  1410.   */
  1411. #define IS_UART_OVERRUN(__OVERRUN__)     (((__OVERRUN__) == UART_ADVFEATURE_OVERRUN_ENABLE) || \
  1412.                                           ((__OVERRUN__) == UART_ADVFEATURE_OVERRUN_DISABLE))
  1413.  
  1414. /**
  1415.   * @brief Ensure that UART auto Baud rate state is valid.
  1416.   * @param __AUTOBAUDRATE__ UART auto Baud rate state.
  1417.   * @retval SET (__AUTOBAUDRATE__ is valid) or RESET (__AUTOBAUDRATE__ is invalid)
  1418.   */
  1419. #define IS_UART_ADVFEATURE_AUTOBAUDRATE(__AUTOBAUDRATE__) (((__AUTOBAUDRATE__) == \
  1420.                                                             UART_ADVFEATURE_AUTOBAUDRATE_DISABLE) || \
  1421.                                                            ((__AUTOBAUDRATE__) == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE))
  1422.  
  1423. /**
  1424.   * @brief Ensure that UART DMA enabling or disabling on error setting is valid.
  1425.   * @param __DMA__ UART DMA enabling or disabling on error setting.
  1426.   * @retval SET (__DMA__ is valid) or RESET (__DMA__ is invalid)
  1427.   */
  1428. #define IS_UART_ADVFEATURE_DMAONRXERROR(__DMA__)  (((__DMA__) == UART_ADVFEATURE_DMA_ENABLEONRXERROR) || \
  1429.                                                    ((__DMA__) == UART_ADVFEATURE_DMA_DISABLEONRXERROR))
  1430.  
  1431. /**
  1432.   * @brief Ensure that UART frame MSB first setting is valid.
  1433.   * @param __MSBFIRST__ UART frame MSB first setting.
  1434.   * @retval SET (__MSBFIRST__ is valid) or RESET (__MSBFIRST__ is invalid)
  1435.   */
  1436. #define IS_UART_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_DISABLE) || \
  1437.                                                    ((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_ENABLE))
  1438.  
  1439. #if defined(USART_CR1_UESM)
  1440. /**
  1441.   * @brief Ensure that UART stop mode state is valid.
  1442.   * @param __STOPMODE__ UART stop mode state.
  1443.   * @retval SET (__STOPMODE__ is valid) or RESET (__STOPMODE__ is invalid)
  1444.   */
  1445. #define IS_UART_ADVFEATURE_STOPMODE(__STOPMODE__) (((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_DISABLE) || \
  1446.                                                    ((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_ENABLE))
  1447.  
  1448. #endif /* USART_CR1_UESM */
  1449. /**
  1450.   * @brief Ensure that UART mute mode state is valid.
  1451.   * @param __MUTE__ UART mute mode state.
  1452.   * @retval SET (__MUTE__ is valid) or RESET (__MUTE__ is invalid)
  1453.   */
  1454. #define IS_UART_MUTE_MODE(__MUTE__)       (((__MUTE__) == UART_ADVFEATURE_MUTEMODE_DISABLE) || \
  1455.                                            ((__MUTE__) == UART_ADVFEATURE_MUTEMODE_ENABLE))
  1456. #if defined(USART_CR1_UESM)
  1457.  
  1458. /**
  1459.   * @brief Ensure that UART wake-up selection is valid.
  1460.   * @param __WAKE__ UART wake-up selection.
  1461.   * @retval SET (__WAKE__ is valid) or RESET (__WAKE__ is invalid)
  1462.   */
  1463. #if defined(USART_CR3_WUFIE)
  1464. #define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS)           || \
  1465.                                             ((__WAKE__) == UART_WAKEUP_ON_STARTBIT)          || \
  1466.                                             ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY))
  1467. #else
  1468. #define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS)           || \
  1469.                                             ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY))
  1470. #endif /* USART_CR3_WUFIE */
  1471. #endif /* USART_CR1_UESM */
  1472.  
  1473. /**
  1474.   * @brief Ensure that UART driver enable polarity is valid.
  1475.   * @param __POLARITY__ UART driver enable polarity.
  1476.   * @retval SET (__POLARITY__ is valid) or RESET (__POLARITY__ is invalid)
  1477.   */
  1478. #define IS_UART_DE_POLARITY(__POLARITY__)    (((__POLARITY__) == UART_DE_POLARITY_HIGH) || \
  1479.                                               ((__POLARITY__) == UART_DE_POLARITY_LOW))
  1480.  
  1481.  
  1482. /**
  1483.   * @}
  1484.   */
  1485.  
  1486. /* Include UART HAL Extended module */
  1487. #include "stm32f0xx_hal_uart_ex.h"
  1488.  
  1489. /* Exported functions --------------------------------------------------------*/
  1490. /** @addtogroup UART_Exported_Functions UART Exported Functions
  1491.   * @{
  1492.   */
  1493.  
  1494. /** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions
  1495.   * @{
  1496.   */
  1497.  
  1498. /* Initialization and de-initialization functions  ****************************/
  1499. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
  1500. HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart);
  1501. #if   defined(USART_CR2_LINEN)
  1502. HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength);
  1503. #endif /* USART_CR2_LINEN */
  1504. HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod);
  1505. HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart);
  1506. void HAL_UART_MspInit(UART_HandleTypeDef *huart);
  1507. void HAL_UART_MspDeInit(UART_HandleTypeDef *huart);
  1508.  
  1509. /* Callbacks Register/UnRegister functions  ***********************************/
  1510. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  1511. HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
  1512.                                             pUART_CallbackTypeDef pCallback);
  1513. HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID);
  1514.  
  1515. HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback);
  1516. HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart);
  1517. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  1518.  
  1519. /**
  1520.   * @}
  1521.   */
  1522.  
  1523. /** @addtogroup UART_Exported_Functions_Group2 IO operation functions
  1524.   * @{
  1525.   */
  1526.  
  1527. /* IO operation functions *****************************************************/
  1528. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  1529. HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  1530. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  1531. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  1532. HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  1533. HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  1534. HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart);
  1535. HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart);
  1536. HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart);
  1537. /* Transfer Abort functions */
  1538. HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart);
  1539. HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart);
  1540. HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart);
  1541. HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart);
  1542. HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart);
  1543. HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart);
  1544.  
  1545. void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
  1546. void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);
  1547. void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
  1548. void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);
  1549. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
  1550. void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);
  1551. void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart);
  1552. void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart);
  1553. void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);
  1554.  
  1555. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size);
  1556.  
  1557. /**
  1558.   * @}
  1559.   */
  1560.  
  1561. /** @addtogroup UART_Exported_Functions_Group3 Peripheral Control functions
  1562.   * @{
  1563.   */
  1564.  
  1565. /* Peripheral Control functions  ************************************************/
  1566. void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue);
  1567. HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart);
  1568. HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart);
  1569.  
  1570. #if   defined(USART_CR2_LINEN)
  1571. HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);
  1572. #endif /* USART_CR2_LINEN */
  1573. HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart);
  1574. HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart);
  1575. void HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart);
  1576. HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart);
  1577. HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart);
  1578.  
  1579. /**
  1580.   * @}
  1581.   */
  1582.  
  1583. /** @addtogroup UART_Exported_Functions_Group4 Peripheral State and Error functions
  1584.   * @{
  1585.   */
  1586.  
  1587. /* Peripheral State and Errors functions  **************************************************/
  1588. HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart);
  1589. uint32_t              HAL_UART_GetError(UART_HandleTypeDef *huart);
  1590.  
  1591. /**
  1592.   * @}
  1593.   */
  1594.  
  1595. /**
  1596.   * @}
  1597.   */
  1598.  
  1599. /* Private functions -----------------------------------------------------------*/
  1600. /** @addtogroup UART_Private_Functions UART Private Functions
  1601.   * @{
  1602.   */
  1603. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  1604. void              UART_InitCallbacksToDefault(UART_HandleTypeDef *huart);
  1605. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  1606. HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart);
  1607. HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart);
  1608. HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
  1609.                                               uint32_t Tickstart, uint32_t Timeout);
  1610. void              UART_AdvFeatureConfig(UART_HandleTypeDef *huart);
  1611. HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  1612. HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  1613.  
  1614. /**
  1615.   * @}
  1616.   */
  1617.  
  1618. /* Private variables -----------------------------------------------------------*/
  1619. /**
  1620.   * @}
  1621.   */
  1622.  
  1623. /**
  1624.   * @}
  1625.   */
  1626.  
  1627. #ifdef __cplusplus
  1628. }
  1629. #endif
  1630.  
  1631. #endif /* STM32F0xx_HAL_UART_H */
  1632.  
  1633. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  1634.