STM32L486xx HAL User Manual
stm32l4xx_hal_usart.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32l4xx_hal_usart.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of USART HAL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
00010   *
00011   * Redistribution and use in source and binary forms, with or without modification,
00012   * are permitted provided that the following conditions are met:
00013   *   1. Redistributions of source code must retain the above copyright notice,
00014   *      this list of conditions and the following disclaimer.
00015   *   2. Redistributions in binary form must reproduce the above copyright notice,
00016   *      this list of conditions and the following disclaimer in the documentation
00017   *      and/or other materials provided with the distribution.
00018   *   3. Neither the name of STMicroelectronics nor the names of its contributors
00019   *      may be used to endorse or promote products derived from this software
00020   *      without specific prior written permission.
00021   *
00022   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00023   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00024   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00025   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
00026   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00027   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00028   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00030   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00031   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00032   *
00033   ******************************************************************************
00034   */
00035 
00036 /* Define to prevent recursive inclusion -------------------------------------*/
00037 #ifndef __STM32L4xx_HAL_USART_H
00038 #define __STM32L4xx_HAL_USART_H
00039 
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043 
00044 /* Includes ------------------------------------------------------------------*/
00045 #include "stm32l4xx_hal_def.h"
00046 
00047 /** @addtogroup STM32L4xx_HAL_Driver
00048   * @{
00049   */
00050 
00051 /** @addtogroup USART
00052   * @{
00053   */
00054 
00055 /* Exported types ------------------------------------------------------------*/
00056 /** @defgroup USART_Exported_Types USART Exported Types
00057   * @{
00058   */
00059 
00060 /**
00061   * @brief USART Init Structure definition
00062   */
00063 typedef struct
00064 {
00065   uint32_t BaudRate;                  /*!< This member configures the Usart communication baud rate.
00066                                            The baud rate is computed using the following formula:
00067                                               Baud Rate Register[15:4] = ((2 * fclk_pres) / ((huart->Init.BaudRate)))[15:4]
00068                                               Baud Rate Register[3]    = 0
00069                                               Baud Rate Register[2:0]  =  (((2 * fclk_pres) / ((huart->Init.BaudRate)))[3:0]) >> 1
00070                                               where fclk_pres is the USART input clock frequency (fclk) divided by a prescaler.
00071                                            @note  Oversampling by 8 is systematically applied to achieve high baud rates. */
00072 
00073   uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.
00074                                            This parameter can be a value of @ref USARTEx_Word_Length. */
00075 
00076   uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.
00077                                            This parameter can be a value of @ref USART_Stop_Bits. */
00078 
00079   uint32_t Parity;                   /*!< Specifies the parity mode.
00080                                            This parameter can be a value of @ref USART_Parity
00081                                            @note When parity is enabled, the computed parity is inserted
00082                                                  at the MSB position of the transmitted data (9th bit when
00083                                                  the word length is set to 9 data bits; 8th bit when the
00084                                                  word length is set to 8 data bits). */
00085 
00086   uint32_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
00087                                            This parameter can be a value of @ref USART_Mode. */
00088 
00089   uint32_t CLKPolarity;               /*!< Specifies the steady state of the serial clock.
00090                                            This parameter can be a value of @ref USART_Clock_Polarity. */
00091 
00092   uint32_t CLKPhase;                  /*!< Specifies the clock transition on which the bit capture is made.
00093                                            This parameter can be a value of @ref USART_Clock_Phase. */
00094 
00095   uint32_t CLKLastBit;                /*!< Specifies whether the clock pulse corresponding to the last transmitted
00096                                            data bit (MSB) has to be output on the SCLK pin in synchronous mode.
00097                                            This parameter can be a value of @ref USART_Last_Bit. */
00098 
00099 #if defined(USART_PRESC_PRESCALER)
00100   uint32_t ClockPrescaler;            /*!< Specifies the prescaler value used to divide the USART clock source.
00101                                            This parameter can be a value of @ref USART_ClockPrescaler. */
00102 #endif
00103 } USART_InitTypeDef;
00104 
00105 /**
00106   * @brief HAL USART State structures definition
00107   */
00108 typedef enum
00109 {
00110   HAL_USART_STATE_RESET             = 0x00U,    /*!< Peripheral is not initialized                  */
00111   HAL_USART_STATE_READY             = 0x01U,    /*!< Peripheral Initialized and ready for use       */
00112   HAL_USART_STATE_BUSY              = 0x02U,    /*!< an internal process is ongoing                 */
00113   HAL_USART_STATE_BUSY_TX           = 0x12U,    /*!< Data Transmission process is ongoing           */
00114   HAL_USART_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoing              */
00115   HAL_USART_STATE_BUSY_TX_RX        = 0x32U,    /*!< Data Transmission Reception process is ongoing */
00116   HAL_USART_STATE_TIMEOUT           = 0x03U,    /*!< Timeout state                                  */
00117   HAL_USART_STATE_ERROR             = 0x04U     /*!< Error                                          */
00118 } HAL_USART_StateTypeDef;
00119 
00120 /**
00121   * @brief  USART clock sources definitions
00122   */
00123 typedef enum
00124 {
00125   USART_CLOCKSOURCE_PCLK1      = 0x00U,    /*!< PCLK1 clock source     */
00126   USART_CLOCKSOURCE_PCLK2      = 0x01U,    /*!< PCLK2 clock source     */
00127   USART_CLOCKSOURCE_HSI        = 0x02U,    /*!< HSI clock source       */
00128   USART_CLOCKSOURCE_SYSCLK     = 0x04U,    /*!< SYSCLK clock source    */
00129   USART_CLOCKSOURCE_LSE        = 0x08U,    /*!< LSE clock source       */
00130   USART_CLOCKSOURCE_UNDEFINED  = 0x10U     /*!< Undefined clock source */
00131 } USART_ClockSourceTypeDef;
00132 
00133 
00134 /**
00135   * @brief  USART handle Structure definition
00136   */
00137 typedef struct __USART_HandleTypeDef
00138 {
00139   USART_TypeDef                 *Instance;               /*!<  USART registers base address       */
00140 
00141   USART_InitTypeDef             Init;                    /*!< USART communication parameters      */
00142 
00143   uint8_t                       *pTxBuffPtr;             /*!< Pointer to USART Tx transfer Buffer */
00144 
00145   uint16_t                      TxXferSize;              /*!< USART Tx Transfer size              */
00146 
00147   __IO uint16_t                 TxXferCount;             /*!< USART Tx Transfer Counter           */
00148 
00149   uint8_t                       *pRxBuffPtr;             /*!< Pointer to USART Rx transfer Buffer */
00150 
00151   uint16_t                      RxXferSize;              /*!< USART Rx Transfer size              */
00152 
00153   __IO uint16_t                 RxXferCount;             /*!< USART Rx Transfer Counter           */
00154 
00155   uint16_t                      Mask;                    /*!< USART Rx RDR register mask          */
00156 
00157 #if defined(USART_CR1_FIFOEN)
00158   uint16_t                      NbRxDataToProcess;       /*!< Number of data to process during RX ISR execution */
00159 
00160   uint16_t                      NbTxDataToProcess;       /*!< Number of data to process during TX ISR execution */
00161 #endif
00162 
00163 #if defined(USART_CR2_SLVEN)
00164   uint32_t                      SlaveMode;               /*!< Enable/Disable UART SPI Slave Mode. This parameter can be a value
00165                                                               of @ref USARTEx_Slave_Mode */
00166 #endif
00167 
00168 #if defined(USART_CR1_FIFOEN)
00169   uint32_t                      FifoMode;                /*!< Specifies if the FIFO mode will be used. This parameter can be a value
00170                                                               of @ref USARTEx_FIFO_mode. */
00171 #endif
00172 
00173   void (*RxISR)(struct __USART_HandleTypeDef *husart);   /*!< Function pointer on Rx IRQ handler   */
00174 
00175   void (*TxISR)(struct __USART_HandleTypeDef *husart);   /*!< Function pointer on Tx IRQ handler   */
00176 
00177   DMA_HandleTypeDef             *hdmatx;                 /*!< USART Tx DMA Handle parameters       */
00178 
00179   DMA_HandleTypeDef             *hdmarx;                 /*!< USART Rx DMA Handle parameters       */
00180 
00181   HAL_LockTypeDef               Lock;                    /*!<  Locking object                      */
00182 
00183   __IO HAL_USART_StateTypeDef   State;                   /*!< USART communication state            */
00184 
00185   __IO uint32_t                 ErrorCode;               /*!< USART Error code                     */
00186 
00187 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1)
00188   void (* TxHalfCpltCallback)(struct __USART_HandleTypeDef *husart);        /*!< USART Tx Half Complete Callback        */
00189   void (* TxCpltCallback)(struct __USART_HandleTypeDef *husart);            /*!< USART Tx Complete Callback             */
00190   void (* RxHalfCpltCallback)(struct __USART_HandleTypeDef *husart);        /*!< USART Rx Half Complete Callback        */
00191   void (* RxCpltCallback)(struct __USART_HandleTypeDef *husart);            /*!< USART Rx Complete Callback             */
00192   void (* TxRxCpltCallback)(struct __USART_HandleTypeDef *husart);          /*!< USART Tx Rx Complete Callback          */
00193   void (* ErrorCallback)(struct __USART_HandleTypeDef *husart);             /*!< USART Error Callback                   */
00194   void (* AbortCpltCallback)(struct __USART_HandleTypeDef *husart);         /*!< USART Abort Complete Callback          */
00195 #if defined(USART_CR1_FIFOEN)
00196   void (* RxFifoFullCallback)(struct __USART_HandleTypeDef *husart);        /*!< USART Rx Fifo Full Callback            */
00197   void (* TxFifoEmptyCallback)(struct __USART_HandleTypeDef *husart);       /*!< USART Tx Fifo Empty Callback           */
00198 #endif
00199 
00200   void (* MspInitCallback)(struct __USART_HandleTypeDef *husart);           /*!< USART Msp Init callback                */
00201   void (* MspDeInitCallback)(struct __USART_HandleTypeDef *husart);         /*!< USART Msp DeInit callback              */
00202 #endif  /* USE_HAL_USART_REGISTER_CALLBACKS */
00203 
00204 } USART_HandleTypeDef;
00205 
00206 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1)
00207 /**
00208   * @brief  HAL USART Callback ID enumeration definition
00209   */
00210 typedef enum
00211 {
00212   HAL_USART_TX_HALFCOMPLETE_CB_ID         = 0x00U,    /*!< USART Tx Half Complete Callback ID        */
00213   HAL_USART_TX_COMPLETE_CB_ID             = 0x01U,    /*!< USART Tx Complete Callback ID             */
00214   HAL_USART_RX_HALFCOMPLETE_CB_ID         = 0x02U,    /*!< USART Rx Half Complete Callback ID        */
00215   HAL_USART_RX_COMPLETE_CB_ID             = 0x03U,    /*!< USART Rx Complete Callback ID             */
00216   HAL_USART_TX_RX_COMPLETE_CB_ID          = 0x04U,    /*!< USART Tx Rx Complete Callback ID          */
00217   HAL_USART_ERROR_CB_ID                   = 0x05U,    /*!< USART Error Callback ID                   */
00218   HAL_USART_ABORT_COMPLETE_CB_ID          = 0x06U,    /*!< USART Abort Complete Callback ID          */
00219 #if defined(USART_CR1_FIFOEN)
00220   HAL_USART_RX_FIFO_FULL_CB_ID            = 0x07U,    /*!< USART Rx Fifo Full Callback ID            */
00221   HAL_USART_TX_FIFO_EMPTY_CB_ID           = 0x08U,    /*!< USART Tx Fifo Empty Callback ID           */
00222 #endif
00223 
00224   HAL_USART_MSPINIT_CB_ID                 = 0x09U,    /*!< USART MspInit callback ID                 */
00225   HAL_USART_MSPDEINIT_CB_ID               = 0x0AU     /*!< USART MspDeInit callback ID               */
00226 
00227 } HAL_USART_CallbackIDTypeDef;
00228 
00229 /**
00230   * @brief  HAL USART Callback pointer definition
00231   */
00232 typedef  void (*pUSART_CallbackTypeDef)(USART_HandleTypeDef *husart);  /*!< pointer to an USART callback function */
00233 
00234 #endif /* USE_HAL_USART_REGISTER_CALLBACKS */
00235 
00236 /**
00237   * @}
00238   */
00239 
00240 /* Exported constants --------------------------------------------------------*/
00241 /** @defgroup USART_Exported_Constants USART Exported Constants
00242   * @{
00243   */
00244 
00245 /** @defgroup USART_Error_Definition   USART Error Definition
00246   * @{
00247   */
00248 #define HAL_USART_ERROR_NONE             ((uint32_t)0x00000000U)    /*!< No error                  */
00249 #define HAL_USART_ERROR_PE               ((uint32_t)0x00000001U)    /*!< Parity error              */
00250 #define HAL_USART_ERROR_NE               ((uint32_t)0x00000002U)    /*!< Noise error               */
00251 #define HAL_USART_ERROR_FE               ((uint32_t)0x00000004U)    /*!< frame error               */
00252 #define HAL_USART_ERROR_ORE              ((uint32_t)0x00000008U)    /*!< Overrun error             */
00253 #define HAL_USART_ERROR_DMA              ((uint32_t)0x00000010U)    /*!< DMA transfer error        */
00254 #if defined(USART_CR2_SLVEN)
00255 #define HAL_USART_ERROR_UDR              ((uint32_t)0x00000020U)    /*!< SPI slave underrun error  */
00256 #endif
00257 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1)
00258 #define HAL_USART_ERROR_INVALID_CALLBACK ((uint32_t)0x00000040U)    /*!< Invalid Callback error    */
00259 #endif /* USE_HAL_USART_REGISTER_CALLBACKS */
00260 /**
00261   * @}
00262   */
00263 
00264 /** @defgroup USART_Stop_Bits  USART Number of Stop Bits
00265   * @{
00266   */
00267 #define USART_STOPBITS_0_5                   USART_CR2_STOP_0                     /*!< USART frame with 0.5 stop bit  */
00268 #define USART_STOPBITS_1                     0x00000000U                          /*!< USART frame with 1 stop bit    */
00269 #define USART_STOPBITS_1_5                  (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< USART frame with 1.5 stop bits */
00270 #define USART_STOPBITS_2                     USART_CR2_STOP_1                     /*!< USART frame with 2 stop bits   */
00271 /**
00272   * @}
00273   */
00274 
00275 /** @defgroup USART_Parity    USART Parity
00276   * @{
00277   */
00278 #define USART_PARITY_NONE                   0x00000000U                      /*!< No parity   */
00279 #define USART_PARITY_EVEN                   USART_CR1_PCE                    /*!< Even parity */
00280 #define USART_PARITY_ODD                    (USART_CR1_PCE | USART_CR1_PS)   /*!< Odd parity  */
00281 /**
00282   * @}
00283   */
00284 
00285 /** @defgroup USART_Mode   USART Mode
00286   * @{
00287   */
00288 #define USART_MODE_RX                       USART_CR1_RE                    /*!< RX mode        */
00289 #define USART_MODE_TX                       USART_CR1_TE                    /*!< TX mode        */
00290 #define USART_MODE_TX_RX                    (USART_CR1_TE |USART_CR1_RE)    /*!< RX and TX mode */
00291 /**
00292   * @}
00293   */
00294 
00295 /** @defgroup USART_Over_Sampling USART Over Sampling
00296   * @{
00297   */
00298 #define USART_OVERSAMPLING_16               0x00000000U         /*!< Oversampling by 16 */
00299 #define USART_OVERSAMPLING_8                USART_CR1_OVER8     /*!< Oversampling by 8  */
00300 /**
00301   * @}
00302   */
00303 
00304 /** @defgroup USART_Clock  USART Clock
00305   * @{
00306   */
00307 #define USART_CLOCK_DISABLE                 0x00000000U       /*!< USART clock disable */
00308 #define USART_CLOCK_ENABLE                  USART_CR2_CLKEN   /*!< USART clock enable  */
00309 /**
00310   * @}
00311   */
00312 
00313 /** @defgroup USART_Clock_Polarity  USART Clock Polarity
00314   * @{
00315   */
00316 #define USART_POLARITY_LOW                  0x00000000U      /*!< Driver enable signal is active high */
00317 #define USART_POLARITY_HIGH                 USART_CR2_CPOL   /*!< Driver enable signal is active low  */
00318 /**
00319   * @}
00320   */
00321 
00322 /** @defgroup USART_Clock_Phase   USART Clock Phase
00323   * @{
00324   */
00325 #define USART_PHASE_1EDGE                   0x00000000U      /*!< USART frame phase on first clock transition  */
00326 #define USART_PHASE_2EDGE                   USART_CR2_CPHA   /*!< USART frame phase on second clock transition */
00327 /**
00328   * @}
00329   */
00330 
00331 /** @defgroup USART_Last_Bit  USART Last Bit
00332   * @{
00333   */
00334 #define USART_LASTBIT_DISABLE               0x00000000U      /*!< USART frame last data bit clock pulse not output to SCLK pin */
00335 #define USART_LASTBIT_ENABLE                USART_CR2_LBCL   /*!< USART frame last data bit clock pulse output to SCLK pin     */
00336 /**
00337   * @}
00338   */
00339 
00340 #if defined(USART_PRESC_PRESCALER)
00341 /** @defgroup USART_ClockPrescaler  USART Clock Prescaler
00342   * @{
00343   */
00344 #define USART_PRESCALER_DIV1    0x00000000U  /*!< fclk_pres = fclk     */
00345 #define USART_PRESCALER_DIV2    0x00000001U  /*!< fclk_pres = fclk/2   */
00346 #define USART_PRESCALER_DIV4    0x00000002U  /*!< fclk_pres = fclk/4   */
00347 #define USART_PRESCALER_DIV6    0x00000003U  /*!< fclk_pres = fclk/6   */
00348 #define USART_PRESCALER_DIV8    0x00000004U  /*!< fclk_pres = fclk/8   */
00349 #define USART_PRESCALER_DIV10   0x00000005U  /*!< fclk_pres = fclk/10  */
00350 #define USART_PRESCALER_DIV12   0x00000006U  /*!< fclk_pres = fclk/12  */
00351 #define USART_PRESCALER_DIV16   0x00000007U  /*!< fclk_pres = fclk/16  */
00352 #define USART_PRESCALER_DIV32   0x00000008U  /*!< fclk_pres = fclk/32  */
00353 #define USART_PRESCALER_DIV64   0x00000009U  /*!< fclk_pres = fclk/64  */
00354 #define USART_PRESCALER_DIV128  0x0000000AU  /*!< fclk_pres = fclk/128 */
00355 #define USART_PRESCALER_DIV256  0x0000000BU  /*!< fclk_pres = fclk/256 */
00356 
00357 /**
00358   * @}
00359   */
00360 #endif
00361 
00362 /** @defgroup USART_Request_Parameters  USART Request Parameters
00363   * @{
00364   */
00365 #define USART_RXDATA_FLUSH_REQUEST        USART_RQR_RXFRQ        /*!< Receive Data flush Request  */
00366 #define USART_TXDATA_FLUSH_REQUEST        USART_RQR_TXFRQ        /*!< Transmit data flush Request */
00367 /**
00368   * @}
00369   */
00370 
00371 /** @defgroup USART_Flags      USART Flags
00372   *        Elements values convention: 0xXXXX
00373   *           - 0xXXXX  : Flag mask in the ISR register
00374   * @{
00375   */
00376 #if defined(USART_CR1_FIFOEN)
00377 #define USART_FLAG_TXFT                     USART_ISR_TXFT          /*!< USART TXFIFO threshold flag                */
00378 #define USART_FLAG_RXFT                     USART_ISR_RXFT          /*!< USART RXFIFO threshold flag                */
00379 #define USART_FLAG_RXFF                     USART_ISR_RXFF          /*!< USART RXFIFO Full flag                     */
00380 #define USART_FLAG_TXFE                     USART_ISR_TXFE          /*!< USART TXFIFO Empty flag                    */
00381 #endif
00382 #define USART_FLAG_REACK                    USART_ISR_REACK         /*!< USART receive enable acknowledge flag      */
00383 #define USART_FLAG_TEACK                    USART_ISR_TEACK         /*!< USART transmit enable acknowledge flag     */
00384 #define USART_FLAG_BUSY                     USART_ISR_BUSY          /*!< USART busy flag                            */
00385 #if defined(USART_CR2_SLVEN)
00386 #define USART_FLAG_UDR                      USART_ISR_UDR           /*!< SPI slave underrun error flag              */
00387 #endif
00388 #if defined(USART_CR1_FIFOEN)
00389 #define USART_FLAG_TXE                      USART_ISR_TXE_TXFNF     /*!< USART transmit data register empty         */
00390 #define USART_FLAG_TXFNF                    USART_ISR_TXE_TXFNF     /*!< USART TXFIFO not full                      */
00391 #else
00392 #define USART_FLAG_TXE                      USART_ISR_TXE           /*!< USART transmit data register empty         */
00393 #endif
00394 #define USART_FLAG_TC                       USART_ISR_TC            /*!< USART transmission complete                */
00395 #if defined(USART_CR1_FIFOEN)
00396 #define USART_FLAG_RXNE                     USART_ISR_RXNE_RXFNE    /*!< USART read data register not empty         */
00397 #define USART_FLAG_RXFNE                    USART_ISR_RXNE_RXFNE    /*!< USART RXFIFO not empty                     */
00398 #else
00399 #define USART_FLAG_RXNE                     USART_ISR_RXNE          /*!< USART read data register not empty         */
00400 #endif
00401 #define USART_FLAG_IDLE                     USART_ISR_IDLE          /*!< USART idle flag                            */
00402 #define USART_FLAG_ORE                      USART_ISR_ORE           /*!< USART overrun error                        */
00403 #define USART_FLAG_NE                       USART_ISR_NE            /*!< USART noise error                          */
00404 #define USART_FLAG_FE                       USART_ISR_FE            /*!< USART frame error                          */
00405 #define USART_FLAG_PE                       USART_ISR_PE            /*!< USART parity error                         */
00406 /**
00407   * @}
00408   */
00409 
00410 /** @defgroup USART_Interrupt_definition USART Interrupts Definition
00411   *        Elements values convention: 0000ZZZZ0XXYYYYYb
00412   *           - YYYYY  : Interrupt source position in the XX register (5bits)
00413   *           - XX  : Interrupt source register (2bits)
00414   *                 - 01: CR1 register
00415   *                 - 10: CR2 register
00416   *                 - 11: CR3 register
00417   *           - ZZZZ  : Flag position in the ISR register(4bits)
00418   * @{
00419   */
00420 
00421 #define USART_IT_PE                          0x0028U     /*!< USART parity error interruption                 */
00422 #define USART_IT_TXE                         0x0727U     /*!< USART transmit data register empty interruption */
00423 #if defined(USART_CR1_FIFOEN)
00424 #define USART_IT_TXFNF                       0x0727U     /*!< USART TX FIFO not full interruption             */
00425 #endif
00426 #define USART_IT_TC                          0x0626U     /*!< USART transmission complete interruption        */
00427 #define USART_IT_RXNE                        0x0525U     /*!< USART read data register not empty interruption */
00428 #if defined(USART_CR1_FIFOEN)
00429 #define USART_IT_RXFNE                       0x0525U     /*!< USART RXFIFO not empty interruption             */
00430 #endif
00431 #define USART_IT_IDLE                        0x0424U     /*!< USART idle interruption                         */
00432 #define USART_IT_ERR                         0x0060U     /*!< USART error interruption                        */
00433 #define USART_IT_ORE                         0x0300U     /*!< USART overrun error interruption                */
00434 #define USART_IT_NE                          0x0200U     /*!< USART noise error interruption                  */
00435 #define USART_IT_FE                          0x0100U     /*!< USART frame error interruption                  */
00436 #if defined(USART_CR1_FIFOEN)
00437 #define USART_IT_RXFF                        0x183FU     /*!< USART RXFIFO full interruption                  */
00438 #define USART_IT_TXFE                        0x173EU     /*!< USART TXFIFO empty interruption                 */
00439 #define USART_IT_RXFT                        0x1A7CU     /*!< USART RXFIFO threshold reached interruption     */
00440 #define USART_IT_TXFT                        0x1B77U     /*!< USART TXFIFO threshold reached interruption     */
00441 #endif
00442 
00443 /**
00444   * @}
00445   */
00446 
00447 /** @defgroup USART_IT_CLEAR_Flags    USART Interruption Clear Flags
00448   * @{
00449   */
00450 #define USART_CLEAR_PEF                       USART_ICR_PECF            /*!< Parity Error Clear Flag             */
00451 #define USART_CLEAR_FEF                       USART_ICR_FECF            /*!< Framing Error Clear Flag            */
00452 #define USART_CLEAR_NEF                       USART_ICR_NECF            /*!< Noise Error detected Clear Flag     */
00453 #define USART_CLEAR_OREF                      USART_ICR_ORECF           /*!< OverRun Error Clear Flag            */
00454 #define USART_CLEAR_IDLEF                     USART_ICR_IDLECF          /*!< IDLE line detected Clear Flag       */
00455 #define USART_CLEAR_TCF                       USART_ICR_TCCF            /*!< Transmission Complete Clear Flag    */
00456 #if defined(USART_CR2_SLVEN)
00457 #define USART_CLEAR_UDRF                      USART_ICR_UDRCF           /*!< SPI slave underrun error Clear Flag */
00458 #endif
00459 #if defined(USART_CR1_FIFOEN)
00460 #define USART_CLEAR_TXFECF                    USART_ICR_TXFECF          /*!< TXFIFO Empty Clear Flag             */
00461 #endif
00462 /**
00463   * @}
00464   */
00465 
00466 /** @defgroup USART_Interruption_Mask    USART Interruption Flags Mask
00467   * @{
00468   */
00469 #define USART_IT_MASK                             0x001FU     /*!< USART interruptions flags mask */
00470 /**
00471   * @}
00472   */
00473 
00474 /**
00475   * @}
00476   */
00477 
00478 /* Exported macros -----------------------------------------------------------*/
00479 /** @defgroup USART_Exported_Macros USART Exported Macros
00480   * @{
00481   */
00482 
00483 /** @brief Reset USART handle state.
00484   * @param  __HANDLE__ USART handle.
00485   * @retval None
00486   */
00487 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1)
00488 #define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__)  do{                                            \
00489                                                       (__HANDLE__)->State = HAL_USART_STATE_RESET; \
00490                                                       (__HANDLE__)->MspInitCallback = NULL;        \
00491                                                       (__HANDLE__)->MspDeInitCallback = NULL;      \
00492                                                     } while(0U)
00493 #else
00494 #define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__)  ((__HANDLE__)->State = HAL_USART_STATE_RESET)
00495 #endif /* USE_HAL_USART_REGISTER_CALLBACKS */
00496 
00497 /** @brief  Check whether the specified USART flag is set or not.
00498   * @param  __HANDLE__ specifies the USART Handle
00499   * @param  __FLAG__ specifies the flag to check.
00500   *        This parameter can be one of the following values:
00501   *            @arg @ref USART_FLAG_TXFT  TXFIFO threshold flag
00502   *            @arg @ref USART_FLAG_RXFT  RXFIFO threshold flag
00503   *            @arg @ref USART_FLAG_RXFF  RXFIFO Full flag
00504   *            @arg @ref USART_FLAG_TXFE  TXFIFO Empty flag
00505   *            @arg @ref USART_FLAG_REACK Receive enable acknowledge flag
00506   *            @arg @ref USART_FLAG_TEACK Transmit enable acknowledge flag
00507   *            @arg @ref USART_FLAG_BUSY  Busy flag
00508   *            @arg @ref USART_FLAG_UDR   SPI slave underrun error flag
00509   *            @arg @ref USART_FLAG_TXE   Transmit data register empty flag
00510   *            @arg @ref USART_FLAG_TXFNF TXFIFO not full flag
00511   *            @arg @ref USART_FLAG_TC    Transmission Complete flag
00512   *            @arg @ref USART_FLAG_RXNE  Receive data register not empty flag
00513   *            @arg @ref USART_FLAG_RXFNE RXFIFO not empty flag
00514   *            @arg @ref USART_FLAG_IDLE  Idle Line detection flag
00515   *            @arg @ref USART_FLAG_ORE   OverRun Error flag
00516   *            @arg @ref USART_FLAG_NE    Noise Error flag
00517   *            @arg @ref USART_FLAG_FE    Framing Error flag
00518   *            @arg @ref USART_FLAG_PE    Parity Error flag
00519   * @retval The new state of __FLAG__ (TRUE or FALSE).
00520   */
00521 #define __HAL_USART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__))
00522 
00523 /** @brief  Clear the specified USART pending flag.
00524   * @param  __HANDLE__ specifies the USART Handle.
00525   * @param  __FLAG__ specifies the flag to check.
00526   *          This parameter can be any combination of the following values:
00527   *            @arg @ref USART_CLEAR_PEF      Parity Error Clear Flag
00528   *            @arg @ref USART_CLEAR_FEF      Framing Error Clear Flag
00529   *            @arg @ref USART_CLEAR_NEF      Noise detected Clear Flag
00530   *            @arg @ref USART_CLEAR_OREF     Overrun Error Clear Flag
00531   *            @arg @ref USART_CLEAR_IDLEF    IDLE line detected Clear Flag
00532   *            @arg @ref USART_CLEAR_TXFECF   TXFIFO empty clear Flag
00533   *            @arg @ref USART_CLEAR_TCF      Transmission Complete Clear Flag
00534   *            @arg @ref USART_CLEAR_UDRF     SPI slave underrun error Clear Flag
00535   * @retval None
00536   */
00537 #define __HAL_USART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__))
00538 
00539 /** @brief  Clear the USART PE pending flag.
00540   * @param  __HANDLE__ specifies the USART Handle.
00541   * @retval None
00542   */
00543 #define __HAL_USART_CLEAR_PEFLAG(__HANDLE__)   __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_PEF)
00544 
00545 /** @brief  Clear the USART FE pending flag.
00546   * @param  __HANDLE__ specifies the USART Handle.
00547   * @retval None
00548   */
00549 #define __HAL_USART_CLEAR_FEFLAG(__HANDLE__)   __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_FEF)
00550 
00551 /** @brief  Clear the USART NE pending flag.
00552   * @param  __HANDLE__ specifies the USART Handle.
00553   * @retval None
00554   */
00555 #define __HAL_USART_CLEAR_NEFLAG(__HANDLE__)  __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_NEF)
00556 
00557 /** @brief  Clear the USART ORE pending flag.
00558   * @param  __HANDLE__ specifies the USART Handle.
00559   * @retval None
00560   */
00561 #define __HAL_USART_CLEAR_OREFLAG(__HANDLE__)   __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_OREF)
00562 
00563 /** @brief  Clear the USART IDLE pending flag.
00564   * @param  __HANDLE__ specifies the USART Handle.
00565   * @retval None
00566   */
00567 #define __HAL_USART_CLEAR_IDLEFLAG(__HANDLE__)   __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_IDLEF)
00568 
00569 #if defined(USART_CR1_FIFOEN)
00570 /** @brief  Clear the USART TX FIFO empty clear flag.
00571   * @param  __HANDLE__ specifies the USART Handle.
00572   * @retval None
00573   */
00574 #define __HAL_USART_CLEAR_TXFECF(__HANDLE__)   __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_TXFECF)
00575 #endif
00576 
00577 #if defined(USART_CR2_SLVEN)
00578 /** @brief  Clear SPI slave underrun error flag.
00579   * @param  __HANDLE__ specifies the USART Handle.
00580   * @retval None
00581   */
00582 #define __HAL_USART_CLEAR_UDRFLAG(__HANDLE__)   __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_UDRF)
00583 #endif
00584 
00585 /** @brief  Enable the specified USART interrupt.
00586   * @param  __HANDLE__ specifies the USART Handle.
00587   * @param  __INTERRUPT__ specifies the USART interrupt source to enable.
00588   *          This parameter can be one of the following values:
00589   *            @arg @ref USART_IT_RXFF  RXFIFO Full interrupt
00590   *            @arg @ref USART_IT_TXFE  TXFIFO Empty interrupt
00591   *            @arg @ref USART_IT_RXFT  RXFIFO threshold interrupt
00592   *            @arg @ref USART_IT_TXFT  TXFIFO threshold interrupt
00593   *            @arg @ref USART_IT_TXE   Transmit Data Register empty interrupt
00594   *            @arg @ref USART_IT_TXFNF TX FIFO not full interrupt
00595   *            @arg @ref USART_IT_TC    Transmission complete interrupt
00596   *            @arg @ref USART_IT_RXNE  Receive Data register not empty interrupt
00597   *            @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt
00598   *            @arg @ref USART_IT_IDLE  Idle line detection interrupt
00599   *            @arg @ref USART_IT_PE    Parity Error interrupt
00600   *            @arg @ref USART_IT_ERR   Error interrupt(Frame error, noise error, overrun error)
00601   * @retval None
00602   */
00603 #define __HAL_USART_ENABLE_IT(__HANDLE__, __INTERRUPT__)   (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \
00604                                                             ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \
00605                                                             ((__HANDLE__)->Instance->CR3 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))))
00606 
00607 /** @brief  Disable the specified USART interrupt.
00608   * @param  __HANDLE__ specifies the USART Handle.
00609   * @param  __INTERRUPT__ specifies the USART interrupt source to disable.
00610   *          This parameter can be one of the following values:
00611   *            @arg @ref USART_IT_RXFF  RXFIFO Full interrupt
00612   *            @arg @ref USART_IT_TXFE  TXFIFO Empty interrupt
00613   *            @arg @ref USART_IT_RXFT  RXFIFO threshold interrupt
00614   *            @arg @ref USART_IT_TXFT  TXFIFO threshold interrupt
00615   *            @arg @ref USART_IT_TXE   Transmit Data Register empty interrupt
00616   *            @arg @ref USART_IT_TXFNF TX FIFO not full interrupt
00617   *            @arg @ref USART_IT_TC    Transmission complete interrupt
00618   *            @arg @ref USART_IT_RXNE  Receive Data register not empty interrupt
00619   *            @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt
00620   *            @arg @ref USART_IT_IDLE  Idle line detection interrupt
00621   *            @arg @ref USART_IT_PE    Parity Error interrupt
00622   *            @arg @ref USART_IT_ERR   Error interrupt(Frame error, noise error, overrun error)
00623   * @retval None
00624   */
00625 #define __HAL_USART_DISABLE_IT(__HANDLE__, __INTERRUPT__)  (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \
00626                                                             ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \
00627                                                             ((__HANDLE__)->Instance->CR3 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))))
00628 
00629 
00630 /** @brief  Check whether the specified USART interrupt has occurred or not.
00631   * @param  __HANDLE__ specifies the USART Handle.
00632   * @param  __INTERRUPT__ specifies the USART interrupt source to check.
00633   *          This parameter can be one of the following values:
00634   *            @arg @ref USART_IT_RXFF  RXFIFO Full interrupt
00635   *            @arg @ref USART_IT_TXFE  TXFIFO Empty interrupt
00636   *            @arg @ref USART_IT_RXFT  RXFIFO threshold interrupt
00637   *            @arg @ref USART_IT_TXFT  TXFIFO threshold interrupt
00638   *            @arg @ref USART_IT_TXE   Transmit Data Register empty interrupt
00639   *            @arg @ref USART_IT_TXFNF TX FIFO not full interrupt
00640   *            @arg @ref USART_IT_TC    Transmission complete interrupt
00641   *            @arg @ref USART_IT_RXNE  Receive Data register not empty interrupt
00642   *            @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt
00643   *            @arg @ref USART_IT_IDLE  Idle line detection interrupt
00644   *            @arg @ref USART_IT_ORE   OverRun Error interrupt
00645   *            @arg @ref USART_IT_NE    Noise Error interrupt
00646   *            @arg @ref USART_IT_FE    Framing Error interrupt
00647   *            @arg @ref USART_IT_PE    Parity Error interrupt
00648   * @retval The new state of __INTERRUPT__ (SET or RESET).
00649   */
00650 #define __HAL_USART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR & ((uint32_t)1 << ((__INTERRUPT__)>> 0x08))) != RESET) ? SET : RESET)
00651 
00652 /** @brief  Check whether the specified USART interrupt source is enabled or not.
00653   * @param  __HANDLE__ specifies the USART Handle.
00654   * @param  __INTERRUPT__ specifies the USART interrupt source to check.
00655   *          This parameter can be one of the following values:
00656   *            @arg @ref USART_IT_RXFF  RXFIFO Full interrupt
00657   *            @arg @ref USART_IT_TXFE  TXFIFO Empty interrupt
00658   *            @arg @ref USART_IT_RXFT  RXFIFO threshold interrupt
00659   *            @arg @ref USART_IT_TXFT  TXFIFO threshold interrupt
00660   *            @arg @ref USART_IT_TXE   Transmit Data Register empty interrupt
00661   *            @arg @ref USART_IT_TXFNF TX FIFO not full interrupt
00662   *            @arg @ref USART_IT_TC    Transmission complete interrupt
00663   *            @arg @ref USART_IT_RXNE  Receive Data register not empty interrupt
00664   *            @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt
00665   *            @arg @ref USART_IT_IDLE  Idle line detection interrupt
00666   *            @arg @ref USART_IT_ORE   OverRun Error interrupt
00667   *            @arg @ref USART_IT_NE    Noise Error interrupt
00668   *            @arg @ref USART_IT_FE    Framing Error interrupt
00669   *            @arg @ref USART_IT_PE    Parity Error interrupt
00670   * @retval The new state of __INTERRUPT__ (SET or RESET).
00671   */
00672 #define __HAL_USART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x01U) ? (__HANDLE__)->Instance->CR1 : \
00673                                                                 (((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x02U) ? (__HANDLE__)->Instance->CR2 : \
00674                                                                 (__HANDLE__)->Instance->CR3)) & (0x01U << (((uint16_t)(__INTERRUPT__)) & USART_IT_MASK)))  != RESET) ? SET : RESET)
00675 
00676 
00677 /** @brief  Clear the specified USART ISR flag, in setting the proper ICR register flag.
00678   * @param  __HANDLE__ specifies the USART Handle.
00679   * @param  __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set
00680   *                       to clear the corresponding interrupt.
00681   *          This parameter can be one of the following values:
00682   *            @arg @ref USART_CLEAR_PEF      Parity Error Clear Flag
00683   *            @arg @ref USART_CLEAR_FEF      Framing Error Clear Flag
00684   *            @arg @ref USART_CLEAR_NEF      Noise detected Clear Flag
00685   *            @arg @ref USART_CLEAR_OREF     Overrun Error Clear Flag
00686   *            @arg @ref USART_CLEAR_IDLEF    IDLE line detected Clear Flag
00687   *            @arg @ref USART_CLEAR_TXFECF   TXFIFO empty clear Flag
00688   *            @arg @ref USART_CLEAR_TCF      Transmission Complete Clear Flag
00689   * @retval None
00690   */
00691 #define __HAL_USART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__))
00692 
00693 /** @brief  Set a specific USART request flag.
00694   * @param  __HANDLE__ specifies the USART Handle.
00695   * @param  __REQ__ specifies the request flag to set.
00696   *          This parameter can be one of the following values:
00697   *            @arg @ref USART_RXDATA_FLUSH_REQUEST Receive Data flush Request
00698   *            @arg @ref USART_TXDATA_FLUSH_REQUEST Transmit data flush Request
00699   *
00700   * @retval None
00701   */
00702 #define __HAL_USART_SEND_REQ(__HANDLE__, __REQ__)      ((__HANDLE__)->Instance->RQR |= (__REQ__))
00703 
00704 /** @brief  Enable the USART one bit sample method.
00705   * @param  __HANDLE__ specifies the USART Handle.
00706   * @retval None
00707   */
00708 #define __HAL_USART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT)
00709 
00710 /** @brief  Disable the USART one bit sample method.
00711   * @param  __HANDLE__ specifies the USART Handle.
00712   * @retval None
00713   */
00714 #define __HAL_USART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= ~USART_CR3_ONEBIT)
00715 
00716 /** @brief  Enable USART.
00717   * @param  __HANDLE__ specifies the USART Handle.
00718   * @retval None
00719   */
00720 #define __HAL_USART_ENABLE(__HANDLE__)                 ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE)
00721 
00722 /** @brief  Disable USART.
00723   * @param  __HANDLE__ specifies the USART Handle.
00724   * @retval None
00725   */
00726 #define __HAL_USART_DISABLE(__HANDLE__)                ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE)
00727 
00728 /**
00729   * @}
00730   */
00731 
00732 /* Private macros --------------------------------------------------------*/
00733 /** @defgroup USART_Private_Macros   USART Private Macros
00734   * @{
00735   */
00736 
00737 #if defined(USART_PRESC_PRESCALER)
00738 /** @brief  Get USART clock division factor from clock prescaler value.
00739   * @param  __CLOCKPRESCALER__ USART prescaler value.
00740   * @retval USART clock division factor
00741   */
00742 #define USART_GET_DIV_FACTOR(__CLOCKPRESCALER__) \
00743   (((__CLOCKPRESCALER__) == USART_PRESCALER_DIV1)   ? 1U :       \
00744    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV2)   ? 2U :       \
00745    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV4)   ? 4U :       \
00746    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV6)   ? 6U :       \
00747    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV8)   ? 8U :       \
00748    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV10)  ? 10U :      \
00749    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV12)  ? 12U :      \
00750    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV16)  ? 16U :      \
00751    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV32)  ? 32U :      \
00752    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV64)  ? 64U :      \
00753    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV128) ? 128U :     \
00754    ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV256) ? 256U : 1U)
00755 
00756 /** @brief  BRR division operation to set BRR register in 8-bit oversampling mode.
00757   * @param  __PCLK__ USART clock.
00758   * @param  __BAUD__ Baud rate set by the user.
00759   * @param  __CLOCKPRESCALER__ UART prescaler value.
00760   * @retval Division result
00761   */
00762 #define USART_DIV_SAMPLING8(__PCLK__, __BAUD__, __CLOCKPRESCALER__)   (((((__PCLK__)/USART_GET_DIV_FACTOR(__CLOCKPRESCALER__))*2U) + ((__BAUD__)/2U)) / (__BAUD__))
00763 #else
00764 /** @brief  BRR division operation to set BRR register in 8-bit oversampling mode.
00765   * @param  __PCLK__ USART clock.
00766   * @param  __BAUD__ Baud rate set by the user.
00767   * @retval Division result
00768   */
00769 #define USART_DIV_SAMPLING8(__PCLK__, __BAUD__)   ((((__PCLK__)*2U) + ((__BAUD__)/2U)) / (__BAUD__))
00770 #endif
00771 
00772 /** @brief  Check USART Baud rate.
00773   * @param  __BAUDRATE__ Baudrate specified by the user.
00774   *         The maximum Baud Rate is derived from the maximum clock on L4
00775   *         divided by the smallest oversampling used on the USART (i.e. 8)
00776   *          (i.e. 120 MHz on STM32L4Rx/L4Sx, 80 Mhz otherwise)
00777   * @retval SET (__BAUDRATE__ is valid) or RESET (__BAUDRATE__ is invalid)
00778   */
00779 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
00780 #define IS_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 15000000U)
00781 #else
00782 #define IS_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 10000000U)
00783 #endif
00784 
00785 /**
00786   * @brief Ensure that USART frame number of stop bits is valid.
00787   * @param __STOPBITS__ USART frame number of stop bits.
00788   * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid)
00789   */
00790 #define IS_USART_STOPBITS(__STOPBITS__) (((__STOPBITS__) == USART_STOPBITS_0_5) || \
00791                                          ((__STOPBITS__) == USART_STOPBITS_1)   || \
00792                                          ((__STOPBITS__) == USART_STOPBITS_1_5) || \
00793                                          ((__STOPBITS__) == USART_STOPBITS_2))
00794 
00795 /**
00796   * @brief Ensure that USART frame parity is valid.
00797   * @param __PARITY__ USART frame parity.
00798   * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid)
00799   */
00800 #define IS_USART_PARITY(__PARITY__) (((__PARITY__) == USART_PARITY_NONE) || \
00801                                      ((__PARITY__) == USART_PARITY_EVEN) || \
00802                                      ((__PARITY__) == USART_PARITY_ODD))
00803 
00804 /**
00805   * @brief Ensure that USART communication mode is valid.
00806   * @param __MODE__ USART communication mode.
00807   * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid)
00808   */
00809 #define IS_USART_MODE(__MODE__) ((((__MODE__) & 0xFFFFFFF3U) == 0x00U) && ((__MODE__) != 0x00U))
00810 
00811 /**
00812   * @brief Ensure that USART oversampling is valid.
00813   * @param __SAMPLING__ USART oversampling.
00814   * @retval SET (__SAMPLING__ is valid) or RESET (__SAMPLING__ is invalid)
00815   */
00816 #define IS_USART_OVERSAMPLING(__SAMPLING__) (((__SAMPLING__) == USART_OVERSAMPLING_16) || \
00817                                              ((__SAMPLING__) == USART_OVERSAMPLING_8))
00818 
00819 /**
00820   * @brief Ensure that USART clock state is valid.
00821   * @param __CLOCK__ USART clock state.
00822   * @retval SET (__CLOCK__ is valid) or RESET (__CLOCK__ is invalid)
00823   */
00824 #define IS_USART_CLOCK(__CLOCK__) (((__CLOCK__) == USART_CLOCK_DISABLE) || \
00825                                    ((__CLOCK__) == USART_CLOCK_ENABLE))
00826 
00827 /**
00828   * @brief Ensure that USART frame polarity is valid.
00829   * @param __CPOL__ USART frame polarity.
00830   * @retval SET (__CPOL__ is valid) or RESET (__CPOL__ is invalid)
00831   */
00832 #define IS_USART_POLARITY(__CPOL__) (((__CPOL__) == USART_POLARITY_LOW) || ((__CPOL__) == USART_POLARITY_HIGH))
00833 
00834 /**
00835   * @brief Ensure that USART frame phase is valid.
00836   * @param __CPHA__ USART frame phase.
00837   * @retval SET (__CPHA__ is valid) or RESET (__CPHA__ is invalid)
00838   */
00839 #define IS_USART_PHASE(__CPHA__) (((__CPHA__) == USART_PHASE_1EDGE) || ((__CPHA__) == USART_PHASE_2EDGE))
00840 
00841 /**
00842   * @brief Ensure that USART frame last bit clock pulse setting is valid.
00843   * @param __LASTBIT__ USART frame last bit clock pulse setting.
00844   * @retval SET (__LASTBIT__ is valid) or RESET (__LASTBIT__ is invalid)
00845   */
00846 #define IS_USART_LASTBIT(__LASTBIT__) (((__LASTBIT__) == USART_LASTBIT_DISABLE) || \
00847                                        ((__LASTBIT__) == USART_LASTBIT_ENABLE))
00848 
00849 /**
00850   * @brief Ensure that USART request parameter is valid.
00851   * @param __PARAM__ USART request parameter.
00852   * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid)
00853   */
00854 #define IS_USART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == USART_RXDATA_FLUSH_REQUEST) || \
00855                                                ((__PARAM__) == USART_TXDATA_FLUSH_REQUEST))
00856 
00857 #if defined(USART_PRESC_PRESCALER)
00858 /**
00859   * @brief Ensure that USART Prescaler is valid.
00860   * @param __CLOCKPRESCALER__ USART Prescaler value.
00861   * @retval SET (__CLOCKPRESCALER__ is valid) or RESET (__CLOCKPRESCALER__ is invalid)
00862   */
00863 #define IS_USART_PRESCALER(__CLOCKPRESCALER__) (((__CLOCKPRESCALER__) == USART_PRESCALER_DIV1) || \
00864                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV2) || \
00865                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV4) || \
00866                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV6) || \
00867                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV8) || \
00868                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV10) || \
00869                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV12) || \
00870                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV16) || \
00871                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV32) || \
00872                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV64) || \
00873                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV128) || \
00874                                                 ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV256))
00875 
00876 #endif
00877 /**
00878   * @}
00879   */
00880 
00881 /* Include USART HAL Extended module */
00882 #include "stm32l4xx_hal_usart_ex.h"
00883 
00884 /* Exported functions --------------------------------------------------------*/
00885 /** @addtogroup USART_Exported_Functions USART Exported Functions
00886   * @{
00887   */
00888 
00889 /** @addtogroup USART_Exported_Functions_Group1 Initialization and de-initialization functions
00890   * @{
00891   */
00892 
00893 /* Initialization and de-initialization functions  ****************************/
00894 HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart);
00895 HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart);
00896 void HAL_USART_MspInit(USART_HandleTypeDef *husart);
00897 void HAL_USART_MspDeInit(USART_HandleTypeDef *husart);
00898 
00899 /* Callbacks Register/UnRegister functions  ***********************************/
00900 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1)
00901 HAL_StatusTypeDef HAL_USART_RegisterCallback(USART_HandleTypeDef *husart, HAL_USART_CallbackIDTypeDef CallbackID, pUSART_CallbackTypeDef pCallback);
00902 HAL_StatusTypeDef HAL_USART_UnRegisterCallback(USART_HandleTypeDef *husart, HAL_USART_CallbackIDTypeDef CallbackID);
00903 #endif /* USE_HAL_USART_REGISTER_CALLBACKS */
00904 
00905 /**
00906   * @}
00907   */
00908 
00909 /** @addtogroup USART_Exported_Functions_Group2 IO operation functions
00910   * @{
00911   */
00912 
00913 /* IO operation functions *****************************************************/
00914 HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size, uint32_t Timeout);
00915 HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
00916 HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
00917 HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
00918 HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
00919 HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData,  uint16_t Size);
00920 HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
00921 HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
00922 HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
00923 HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart);
00924 HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart);
00925 HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart);
00926 /* Transfer Abort functions */
00927 HAL_StatusTypeDef HAL_USART_Abort(USART_HandleTypeDef *husart);
00928 HAL_StatusTypeDef HAL_USART_Abort_IT(USART_HandleTypeDef *husart);
00929 
00930 void HAL_USART_IRQHandler(USART_HandleTypeDef *husart);
00931 void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart);
00932 void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart);
00933 void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart);
00934 void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart);
00935 void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart);
00936 void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart);
00937 void HAL_USART_AbortCpltCallback(USART_HandleTypeDef *husart);
00938 
00939 /**
00940   * @}
00941   */
00942 
00943 /** @addtogroup USART_Exported_Functions_Group4 Peripheral State and Error functions
00944   * @{
00945   */
00946 
00947 /* Peripheral State and Error functions ***************************************/
00948 HAL_USART_StateTypeDef HAL_USART_GetState(USART_HandleTypeDef *husart);
00949 uint32_t               HAL_USART_GetError(USART_HandleTypeDef *husart);
00950 
00951 /**
00952   * @}
00953   */
00954 
00955 /**
00956   * @}
00957   */
00958 
00959 /**
00960   * @}
00961   */
00962 
00963 /**
00964   * @}
00965   */
00966 
00967 #ifdef __cplusplus
00968 }
00969 #endif
00970 
00971 #endif /* __STM32L4xx_HAL_USART_H */
00972 
00973 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/