xref: /btstack/port/stm32-f4discovery-usb/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h (revision a8f7f3fcbcd51f8d2e92aca076b6a9f812db358c)
1 /**
2   ******************************************************************************
3   * @file    stm32f4xx_ll_usart.h
4   * @author  MCD Application Team
5   * @brief   Header file of USART LL 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 __STM32F4xx_LL_USART_H
22 #define __STM32F4xx_LL_USART_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32f4xx.h"
30 
31 /** @addtogroup STM32F4xx_LL_Driver
32   * @{
33   */
34 
35 #if defined (USART1) || defined (USART2) || defined (USART3) || defined (USART6) || defined (UART4) || defined (UART5) || defined (UART7) || defined (UART8) || defined (UART9) || defined (UART10)
36 
37 /** @defgroup USART_LL USART
38   * @{
39   */
40 
41 /* Private types -------------------------------------------------------------*/
42 /* Private variables ---------------------------------------------------------*/
43 
44 /* Private constants ---------------------------------------------------------*/
45 /** @defgroup USART_LL_Private_Constants USART Private Constants
46   * @{
47   */
48 
49 /* Defines used for the bit position in the register and perform offsets*/
50 #define USART_POSITION_GTPR_GT                  USART_GTPR_GT_Pos
51 /**
52   * @}
53   */
54 
55 /* Private macros ------------------------------------------------------------*/
56 #if defined(USE_FULL_LL_DRIVER)
57 /** @defgroup USART_LL_Private_Macros USART Private Macros
58   * @{
59   */
60 /**
61   * @}
62   */
63 #endif /*USE_FULL_LL_DRIVER*/
64 
65 /* Exported types ------------------------------------------------------------*/
66 #if defined(USE_FULL_LL_DRIVER)
67 /** @defgroup USART_LL_ES_INIT USART Exported Init structures
68   * @{
69   */
70 
71 /**
72   * @brief LL USART Init Structure definition
73   */
74 typedef struct
75 {
76   uint32_t BaudRate;                  /*!< This field defines expected Usart communication baud rate.
77 
78                                            This feature can be modified afterwards using unitary function @ref LL_USART_SetBaudRate().*/
79 
80   uint32_t DataWidth;                 /*!< Specifies the number of data bits transmitted or received in a frame.
81                                            This parameter can be a value of @ref USART_LL_EC_DATAWIDTH.
82 
83                                            This feature can be modified afterwards using unitary function @ref LL_USART_SetDataWidth().*/
84 
85   uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.
86                                            This parameter can be a value of @ref USART_LL_EC_STOPBITS.
87 
88                                            This feature can be modified afterwards using unitary function @ref LL_USART_SetStopBitsLength().*/
89 
90   uint32_t Parity;                    /*!< Specifies the parity mode.
91                                            This parameter can be a value of @ref USART_LL_EC_PARITY.
92 
93                                            This feature can be modified afterwards using unitary function @ref LL_USART_SetParity().*/
94 
95   uint32_t TransferDirection;         /*!< Specifies whether the Receive and/or Transmit mode is enabled or disabled.
96                                            This parameter can be a value of @ref USART_LL_EC_DIRECTION.
97 
98                                            This feature can be modified afterwards using unitary function @ref LL_USART_SetTransferDirection().*/
99 
100   uint32_t HardwareFlowControl;       /*!< Specifies whether the hardware flow control mode is enabled or disabled.
101                                            This parameter can be a value of @ref USART_LL_EC_HWCONTROL.
102 
103                                            This feature can be modified afterwards using unitary function @ref LL_USART_SetHWFlowCtrl().*/
104 
105   uint32_t OverSampling;              /*!< Specifies whether USART oversampling mode is 16 or 8.
106                                            This parameter can be a value of @ref USART_LL_EC_OVERSAMPLING.
107 
108                                            This feature can be modified afterwards using unitary function @ref LL_USART_SetOverSampling().*/
109 
110 } LL_USART_InitTypeDef;
111 
112 /**
113   * @brief LL USART Clock Init Structure definition
114   */
115 typedef struct
116 {
117   uint32_t ClockOutput;               /*!< Specifies whether the USART clock is enabled or disabled.
118                                            This parameter can be a value of @ref USART_LL_EC_CLOCK.
119 
120                                            USART HW configuration can be modified afterwards using unitary functions
121                                            @ref LL_USART_EnableSCLKOutput() or @ref LL_USART_DisableSCLKOutput().
122                                            For more details, refer to description of this function. */
123 
124   uint32_t ClockPolarity;             /*!< Specifies the steady state of the serial clock.
125                                            This parameter can be a value of @ref USART_LL_EC_POLARITY.
126 
127                                            USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetClockPolarity().
128                                            For more details, refer to description of this function. */
129 
130   uint32_t ClockPhase;                /*!< Specifies the clock transition on which the bit capture is made.
131                                            This parameter can be a value of @ref USART_LL_EC_PHASE.
132 
133                                            USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetClockPhase().
134                                            For more details, refer to description of this function. */
135 
136   uint32_t LastBitClockPulse;         /*!< Specifies whether the clock pulse corresponding to the last transmitted
137                                            data bit (MSB) has to be output on the SCLK pin in synchronous mode.
138                                            This parameter can be a value of @ref USART_LL_EC_LASTCLKPULSE.
139 
140                                            USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetLastClkPulseOutput().
141                                            For more details, refer to description of this function. */
142 
143 } LL_USART_ClockInitTypeDef;
144 
145 /**
146   * @}
147   */
148 #endif /* USE_FULL_LL_DRIVER */
149 
150 /* Exported constants --------------------------------------------------------*/
151 /** @defgroup USART_LL_Exported_Constants USART Exported Constants
152   * @{
153   */
154 
155 /** @defgroup USART_LL_EC_GET_FLAG Get Flags Defines
156   * @brief    Flags defines which can be used with LL_USART_ReadReg function
157   * @{
158   */
159 #define LL_USART_SR_PE                          USART_SR_PE                   /*!< Parity error flag */
160 #define LL_USART_SR_FE                          USART_SR_FE                   /*!< Framing error flag */
161 #define LL_USART_SR_NE                          USART_SR_NE                   /*!< Noise detected flag */
162 #define LL_USART_SR_ORE                         USART_SR_ORE                  /*!< Overrun error flag */
163 #define LL_USART_SR_IDLE                        USART_SR_IDLE                 /*!< Idle line detected flag */
164 #define LL_USART_SR_RXNE                        USART_SR_RXNE                 /*!< Read data register not empty flag */
165 #define LL_USART_SR_TC                          USART_SR_TC                   /*!< Transmission complete flag */
166 #define LL_USART_SR_TXE                         USART_SR_TXE                  /*!< Transmit data register empty flag */
167 #define LL_USART_SR_LBD                         USART_SR_LBD                  /*!< LIN break detection flag */
168 #define LL_USART_SR_CTS                         USART_SR_CTS                  /*!< CTS flag */
169 /**
170   * @}
171   */
172 
173 /** @defgroup USART_LL_EC_IT IT Defines
174   * @brief    IT defines which can be used with LL_USART_ReadReg and  LL_USART_WriteReg functions
175   * @{
176   */
177 #define LL_USART_CR1_IDLEIE                     USART_CR1_IDLEIE              /*!< IDLE interrupt enable */
178 #define LL_USART_CR1_RXNEIE                     USART_CR1_RXNEIE              /*!< Read data register not empty interrupt enable */
179 #define LL_USART_CR1_TCIE                       USART_CR1_TCIE                /*!< Transmission complete interrupt enable */
180 #define LL_USART_CR1_TXEIE                      USART_CR1_TXEIE               /*!< Transmit data register empty interrupt enable */
181 #define LL_USART_CR1_PEIE                       USART_CR1_PEIE                /*!< Parity error */
182 #define LL_USART_CR2_LBDIE                      USART_CR2_LBDIE               /*!< LIN break detection interrupt enable */
183 #define LL_USART_CR3_EIE                        USART_CR3_EIE                 /*!< Error interrupt enable */
184 #define LL_USART_CR3_CTSIE                      USART_CR3_CTSIE               /*!< CTS interrupt enable */
185 /**
186   * @}
187   */
188 
189 /** @defgroup USART_LL_EC_DIRECTION Communication Direction
190   * @{
191   */
192 #define LL_USART_DIRECTION_NONE                 0x00000000U                        /*!< Transmitter and Receiver are disabled */
193 #define LL_USART_DIRECTION_RX                   USART_CR1_RE                       /*!< Transmitter is disabled and Receiver is enabled */
194 #define LL_USART_DIRECTION_TX                   USART_CR1_TE                       /*!< Transmitter is enabled and Receiver is disabled */
195 #define LL_USART_DIRECTION_TX_RX                (USART_CR1_TE |USART_CR1_RE)       /*!< Transmitter and Receiver are enabled */
196 /**
197   * @}
198   */
199 
200 /** @defgroup USART_LL_EC_PARITY Parity Control
201   * @{
202   */
203 #define LL_USART_PARITY_NONE                    0x00000000U                          /*!< Parity control disabled */
204 #define LL_USART_PARITY_EVEN                    USART_CR1_PCE                        /*!< Parity control enabled and Even Parity is selected */
205 #define LL_USART_PARITY_ODD                     (USART_CR1_PCE | USART_CR1_PS)       /*!< Parity control enabled and Odd Parity is selected */
206 /**
207   * @}
208   */
209 
210 /** @defgroup USART_LL_EC_WAKEUP Wakeup
211   * @{
212   */
213 #define LL_USART_WAKEUP_IDLELINE                0x00000000U           /*!<  USART wake up from Mute mode on Idle Line */
214 #define LL_USART_WAKEUP_ADDRESSMARK             USART_CR1_WAKE        /*!<  USART wake up from Mute mode on Address Mark */
215 /**
216   * @}
217   */
218 
219 /** @defgroup USART_LL_EC_DATAWIDTH Datawidth
220   * @{
221   */
222 #define LL_USART_DATAWIDTH_8B                   0x00000000U             /*!< 8 bits word length : Start bit, 8 data bits, n stop bits */
223 #define LL_USART_DATAWIDTH_9B                   USART_CR1_M             /*!< 9 bits word length : Start bit, 9 data bits, n stop bits */
224 /**
225   * @}
226   */
227 
228 /** @defgroup USART_LL_EC_OVERSAMPLING Oversampling
229   * @{
230   */
231 #define LL_USART_OVERSAMPLING_16                0x00000000U            /*!< Oversampling by 16 */
232 #define LL_USART_OVERSAMPLING_8                 USART_CR1_OVER8        /*!< Oversampling by 8 */
233 /**
234   * @}
235   */
236 
237 #if defined(USE_FULL_LL_DRIVER)
238 /** @defgroup USART_LL_EC_CLOCK Clock Signal
239   * @{
240   */
241 
242 #define LL_USART_CLOCK_DISABLE                  0x00000000U            /*!< Clock signal not provided */
243 #define LL_USART_CLOCK_ENABLE                   USART_CR2_CLKEN        /*!< Clock signal provided */
244 /**
245   * @}
246   */
247 #endif /*USE_FULL_LL_DRIVER*/
248 
249 /** @defgroup USART_LL_EC_LASTCLKPULSE Last Clock Pulse
250   * @{
251   */
252 #define LL_USART_LASTCLKPULSE_NO_OUTPUT         0x00000000U           /*!< The clock pulse of the last data bit is not output to the SCLK pin */
253 #define LL_USART_LASTCLKPULSE_OUTPUT            USART_CR2_LBCL        /*!< The clock pulse of the last data bit is output to the SCLK pin */
254 /**
255   * @}
256   */
257 
258 /** @defgroup USART_LL_EC_PHASE Clock Phase
259   * @{
260   */
261 #define LL_USART_PHASE_1EDGE                    0x00000000U           /*!< The first clock transition is the first data capture edge */
262 #define LL_USART_PHASE_2EDGE                    USART_CR2_CPHA        /*!< The second clock transition is the first data capture edge */
263 /**
264   * @}
265   */
266 
267 /** @defgroup USART_LL_EC_POLARITY Clock Polarity
268   * @{
269   */
270 #define LL_USART_POLARITY_LOW                   0x00000000U           /*!< Steady low value on SCLK pin outside transmission window*/
271 #define LL_USART_POLARITY_HIGH                  USART_CR2_CPOL        /*!< Steady high value on SCLK pin outside transmission window */
272 /**
273   * @}
274   */
275 
276 /** @defgroup USART_LL_EC_STOPBITS Stop Bits
277   * @{
278   */
279 #define LL_USART_STOPBITS_0_5                   USART_CR2_STOP_0                           /*!< 0.5 stop bit */
280 #define LL_USART_STOPBITS_1                     0x00000000U                                /*!< 1 stop bit */
281 #define LL_USART_STOPBITS_1_5                   (USART_CR2_STOP_0 | USART_CR2_STOP_1)      /*!< 1.5 stop bits */
282 #define LL_USART_STOPBITS_2                     USART_CR2_STOP_1                           /*!< 2 stop bits */
283 /**
284   * @}
285   */
286 
287 /** @defgroup USART_LL_EC_HWCONTROL Hardware Control
288   * @{
289   */
290 #define LL_USART_HWCONTROL_NONE                 0x00000000U                          /*!< CTS and RTS hardware flow control disabled */
291 #define LL_USART_HWCONTROL_RTS                  USART_CR3_RTSE                       /*!< RTS output enabled, data is only requested when there is space in the receive buffer */
292 #define LL_USART_HWCONTROL_CTS                  USART_CR3_CTSE                       /*!< CTS mode enabled, data is only transmitted when the nCTS input is asserted (tied to 0) */
293 #define LL_USART_HWCONTROL_RTS_CTS              (USART_CR3_RTSE | USART_CR3_CTSE)    /*!< CTS and RTS hardware flow control enabled */
294 /**
295   * @}
296   */
297 
298 /** @defgroup USART_LL_EC_IRDA_POWER IrDA Power
299   * @{
300   */
301 #define LL_USART_IRDA_POWER_NORMAL              0x00000000U           /*!< IrDA normal power mode */
302 #define LL_USART_IRDA_POWER_LOW                 USART_CR3_IRLP        /*!< IrDA low power mode */
303 /**
304   * @}
305   */
306 
307 /** @defgroup USART_LL_EC_LINBREAK_DETECT LIN Break Detection Length
308   * @{
309   */
310 #define LL_USART_LINBREAK_DETECT_10B            0x00000000U           /*!< 10-bit break detection method selected */
311 #define LL_USART_LINBREAK_DETECT_11B            USART_CR2_LBDL        /*!< 11-bit break detection method selected */
312 /**
313   * @}
314   */
315 
316 /**
317   * @}
318   */
319 
320 /* Exported macro ------------------------------------------------------------*/
321 /** @defgroup USART_LL_Exported_Macros USART Exported Macros
322   * @{
323   */
324 
325 /** @defgroup USART_LL_EM_WRITE_READ Common Write and read registers Macros
326   * @{
327   */
328 
329 /**
330   * @brief  Write a value in USART register
331   * @param  __INSTANCE__ USART Instance
332   * @param  __REG__ Register to be written
333   * @param  __VALUE__ Value to be written in the register
334   * @retval None
335   */
336 #define LL_USART_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
337 
338 /**
339   * @brief  Read a value in USART register
340   * @param  __INSTANCE__ USART Instance
341   * @param  __REG__ Register to be read
342   * @retval Register value
343   */
344 #define LL_USART_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
345 /**
346   * @}
347   */
348 
349 /** @defgroup USART_LL_EM_Exported_Macros_Helper Exported_Macros_Helper
350   * @{
351   */
352 
353 /**
354   * @brief  Compute USARTDIV value according to Peripheral Clock and
355   *         expected Baud Rate in 8 bits sampling mode (32 bits value of USARTDIV is returned)
356   * @param  __PERIPHCLK__ Peripheral Clock frequency used for USART instance
357   * @param  __BAUDRATE__ Baud rate value to achieve
358   * @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case
359   */
360 #define __LL_USART_DIV_SAMPLING8_100(__PERIPHCLK__, __BAUDRATE__)      ((uint32_t)((((uint64_t)(__PERIPHCLK__))*25)/(2*((uint64_t)(__BAUDRATE__)))))
361 #define __LL_USART_DIVMANT_SAMPLING8(__PERIPHCLK__, __BAUDRATE__)      (__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__))/100)
362 #define __LL_USART_DIVFRAQ_SAMPLING8(__PERIPHCLK__, __BAUDRATE__)      ((((__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 8) + 50) / 100)
363 /* UART BRR = mantissa + overflow + fraction
364             = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07) */
365 #define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__)             (((__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \
366                                                                            ((__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0xF8) << 1)) + \
367                                                                            (__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0x07))
368 
369 /**
370   * @brief  Compute USARTDIV value according to Peripheral Clock and
371   *         expected Baud Rate in 16 bits sampling mode (32 bits value of USARTDIV is returned)
372   * @param  __PERIPHCLK__ Peripheral Clock frequency used for USART instance
373   * @param  __BAUDRATE__ Baud rate value to achieve
374   * @retval USARTDIV value to be used for BRR register filling in OverSampling_16 case
375   */
376 #define __LL_USART_DIV_SAMPLING16_100(__PERIPHCLK__, __BAUDRATE__)     ((uint32_t)((((uint64_t)(__PERIPHCLK__))*25)/(4*((uint64_t)(__BAUDRATE__)))))
377 #define __LL_USART_DIVMANT_SAMPLING16(__PERIPHCLK__, __BAUDRATE__)     (__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__))/100)
378 #define __LL_USART_DIVFRAQ_SAMPLING16(__PERIPHCLK__, __BAUDRATE__)     ((((__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 16) + 50) / 100)
379 /* USART BRR = mantissa + overflow + fraction
380             = (USART DIVMANT << 4) + (USART DIVFRAQ & 0xF0) + (USART DIVFRAQ & 0x0F) */
381 #define __LL_USART_DIV_SAMPLING16(__PERIPHCLK__, __BAUDRATE__)            (((__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \
382                                                                            (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0xF0)) + \
383                                                                            (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0x0F))
384 
385 /**
386   * @}
387   */
388 
389 /**
390   * @}
391   */
392 
393 /* Exported functions --------------------------------------------------------*/
394 
395 /** @defgroup USART_LL_Exported_Functions USART Exported Functions
396   * @{
397   */
398 
399 /** @defgroup USART_LL_EF_Configuration Configuration functions
400   * @{
401   */
402 
403 /**
404   * @brief  USART Enable
405   * @rmtoll CR1          UE            LL_USART_Enable
406   * @param  USARTx USART Instance
407   * @retval None
408   */
LL_USART_Enable(USART_TypeDef * USARTx)409 __STATIC_INLINE void LL_USART_Enable(USART_TypeDef *USARTx)
410 {
411   SET_BIT(USARTx->CR1, USART_CR1_UE);
412 }
413 
414 /**
415   * @brief  USART Disable (all USART prescalers and outputs are disabled)
416   * @note   When USART is disabled, USART prescalers and outputs are stopped immediately,
417   *         and current operations are discarded. The configuration of the USART is kept, but all the status
418   *         flags, in the USARTx_SR are set to their default values.
419   * @rmtoll CR1          UE            LL_USART_Disable
420   * @param  USARTx USART Instance
421   * @retval None
422   */
LL_USART_Disable(USART_TypeDef * USARTx)423 __STATIC_INLINE void LL_USART_Disable(USART_TypeDef *USARTx)
424 {
425   CLEAR_BIT(USARTx->CR1, USART_CR1_UE);
426 }
427 
428 /**
429   * @brief  Indicate if USART is enabled
430   * @rmtoll CR1          UE            LL_USART_IsEnabled
431   * @param  USARTx USART Instance
432   * @retval State of bit (1 or 0).
433   */
LL_USART_IsEnabled(USART_TypeDef * USARTx)434 __STATIC_INLINE uint32_t LL_USART_IsEnabled(USART_TypeDef *USARTx)
435 {
436   return (READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE));
437 }
438 
439 /**
440   * @brief  Receiver Enable (Receiver is enabled and begins searching for a start bit)
441   * @rmtoll CR1          RE            LL_USART_EnableDirectionRx
442   * @param  USARTx USART Instance
443   * @retval None
444   */
LL_USART_EnableDirectionRx(USART_TypeDef * USARTx)445 __STATIC_INLINE void LL_USART_EnableDirectionRx(USART_TypeDef *USARTx)
446 {
447   SET_BIT(USARTx->CR1, USART_CR1_RE);
448 }
449 
450 /**
451   * @brief  Receiver Disable
452   * @rmtoll CR1          RE            LL_USART_DisableDirectionRx
453   * @param  USARTx USART Instance
454   * @retval None
455   */
LL_USART_DisableDirectionRx(USART_TypeDef * USARTx)456 __STATIC_INLINE void LL_USART_DisableDirectionRx(USART_TypeDef *USARTx)
457 {
458   CLEAR_BIT(USARTx->CR1, USART_CR1_RE);
459 }
460 
461 /**
462   * @brief  Transmitter Enable
463   * @rmtoll CR1          TE            LL_USART_EnableDirectionTx
464   * @param  USARTx USART Instance
465   * @retval None
466   */
LL_USART_EnableDirectionTx(USART_TypeDef * USARTx)467 __STATIC_INLINE void LL_USART_EnableDirectionTx(USART_TypeDef *USARTx)
468 {
469   SET_BIT(USARTx->CR1, USART_CR1_TE);
470 }
471 
472 /**
473   * @brief  Transmitter Disable
474   * @rmtoll CR1          TE            LL_USART_DisableDirectionTx
475   * @param  USARTx USART Instance
476   * @retval None
477   */
LL_USART_DisableDirectionTx(USART_TypeDef * USARTx)478 __STATIC_INLINE void LL_USART_DisableDirectionTx(USART_TypeDef *USARTx)
479 {
480   CLEAR_BIT(USARTx->CR1, USART_CR1_TE);
481 }
482 
483 /**
484   * @brief  Configure simultaneously enabled/disabled states
485   *         of Transmitter and Receiver
486   * @rmtoll CR1          RE            LL_USART_SetTransferDirection\n
487   *         CR1          TE            LL_USART_SetTransferDirection
488   * @param  USARTx USART Instance
489   * @param  TransferDirection This parameter can be one of the following values:
490   *         @arg @ref LL_USART_DIRECTION_NONE
491   *         @arg @ref LL_USART_DIRECTION_RX
492   *         @arg @ref LL_USART_DIRECTION_TX
493   *         @arg @ref LL_USART_DIRECTION_TX_RX
494   * @retval None
495   */
LL_USART_SetTransferDirection(USART_TypeDef * USARTx,uint32_t TransferDirection)496 __STATIC_INLINE void LL_USART_SetTransferDirection(USART_TypeDef *USARTx, uint32_t TransferDirection)
497 {
498   MODIFY_REG(USARTx->CR1, USART_CR1_RE | USART_CR1_TE, TransferDirection);
499 }
500 
501 /**
502   * @brief  Return enabled/disabled states of Transmitter and Receiver
503   * @rmtoll CR1          RE            LL_USART_GetTransferDirection\n
504   *         CR1          TE            LL_USART_GetTransferDirection
505   * @param  USARTx USART Instance
506   * @retval Returned value can be one of the following values:
507   *         @arg @ref LL_USART_DIRECTION_NONE
508   *         @arg @ref LL_USART_DIRECTION_RX
509   *         @arg @ref LL_USART_DIRECTION_TX
510   *         @arg @ref LL_USART_DIRECTION_TX_RX
511   */
LL_USART_GetTransferDirection(USART_TypeDef * USARTx)512 __STATIC_INLINE uint32_t LL_USART_GetTransferDirection(USART_TypeDef *USARTx)
513 {
514   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_RE | USART_CR1_TE));
515 }
516 
517 /**
518   * @brief  Configure Parity (enabled/disabled and parity mode if enabled).
519   * @note   This function selects if hardware parity control (generation and detection) is enabled or disabled.
520   *         When the parity control is enabled (Odd or Even), computed parity bit is inserted at the MSB position
521   *         (9th or 8th bit depending on data width) and parity is checked on the received data.
522   * @rmtoll CR1          PS            LL_USART_SetParity\n
523   *         CR1          PCE           LL_USART_SetParity
524   * @param  USARTx USART Instance
525   * @param  Parity This parameter can be one of the following values:
526   *         @arg @ref LL_USART_PARITY_NONE
527   *         @arg @ref LL_USART_PARITY_EVEN
528   *         @arg @ref LL_USART_PARITY_ODD
529   * @retval None
530   */
LL_USART_SetParity(USART_TypeDef * USARTx,uint32_t Parity)531 __STATIC_INLINE void LL_USART_SetParity(USART_TypeDef *USARTx, uint32_t Parity)
532 {
533   MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE, Parity);
534 }
535 
536 /**
537   * @brief  Return Parity configuration (enabled/disabled and parity mode if enabled)
538   * @rmtoll CR1          PS            LL_USART_GetParity\n
539   *         CR1          PCE           LL_USART_GetParity
540   * @param  USARTx USART Instance
541   * @retval Returned value can be one of the following values:
542   *         @arg @ref LL_USART_PARITY_NONE
543   *         @arg @ref LL_USART_PARITY_EVEN
544   *         @arg @ref LL_USART_PARITY_ODD
545   */
LL_USART_GetParity(USART_TypeDef * USARTx)546 __STATIC_INLINE uint32_t LL_USART_GetParity(USART_TypeDef *USARTx)
547 {
548   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE));
549 }
550 
551 /**
552   * @brief  Set Receiver Wake Up method from Mute mode.
553   * @rmtoll CR1          WAKE          LL_USART_SetWakeUpMethod
554   * @param  USARTx USART Instance
555   * @param  Method This parameter can be one of the following values:
556   *         @arg @ref LL_USART_WAKEUP_IDLELINE
557   *         @arg @ref LL_USART_WAKEUP_ADDRESSMARK
558   * @retval None
559   */
LL_USART_SetWakeUpMethod(USART_TypeDef * USARTx,uint32_t Method)560 __STATIC_INLINE void LL_USART_SetWakeUpMethod(USART_TypeDef *USARTx, uint32_t Method)
561 {
562   MODIFY_REG(USARTx->CR1, USART_CR1_WAKE, Method);
563 }
564 
565 /**
566   * @brief  Return Receiver Wake Up method from Mute mode
567   * @rmtoll CR1          WAKE          LL_USART_GetWakeUpMethod
568   * @param  USARTx USART Instance
569   * @retval Returned value can be one of the following values:
570   *         @arg @ref LL_USART_WAKEUP_IDLELINE
571   *         @arg @ref LL_USART_WAKEUP_ADDRESSMARK
572   */
LL_USART_GetWakeUpMethod(USART_TypeDef * USARTx)573 __STATIC_INLINE uint32_t LL_USART_GetWakeUpMethod(USART_TypeDef *USARTx)
574 {
575   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_WAKE));
576 }
577 
578 /**
579   * @brief  Set Word length (i.e. nb of data bits, excluding start and stop bits)
580   * @rmtoll CR1          M             LL_USART_SetDataWidth
581   * @param  USARTx USART Instance
582   * @param  DataWidth This parameter can be one of the following values:
583   *         @arg @ref LL_USART_DATAWIDTH_8B
584   *         @arg @ref LL_USART_DATAWIDTH_9B
585   * @retval None
586   */
LL_USART_SetDataWidth(USART_TypeDef * USARTx,uint32_t DataWidth)587 __STATIC_INLINE void LL_USART_SetDataWidth(USART_TypeDef *USARTx, uint32_t DataWidth)
588 {
589   MODIFY_REG(USARTx->CR1, USART_CR1_M, DataWidth);
590 }
591 
592 /**
593   * @brief  Return Word length (i.e. nb of data bits, excluding start and stop bits)
594   * @rmtoll CR1          M             LL_USART_GetDataWidth
595   * @param  USARTx USART Instance
596   * @retval Returned value can be one of the following values:
597   *         @arg @ref LL_USART_DATAWIDTH_8B
598   *         @arg @ref LL_USART_DATAWIDTH_9B
599   */
LL_USART_GetDataWidth(USART_TypeDef * USARTx)600 __STATIC_INLINE uint32_t LL_USART_GetDataWidth(USART_TypeDef *USARTx)
601 {
602   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_M));
603 }
604 
605 /**
606   * @brief  Set Oversampling to 8-bit or 16-bit mode
607   * @rmtoll CR1          OVER8         LL_USART_SetOverSampling
608   * @param  USARTx USART Instance
609   * @param  OverSampling This parameter can be one of the following values:
610   *         @arg @ref LL_USART_OVERSAMPLING_16
611   *         @arg @ref LL_USART_OVERSAMPLING_8
612   * @retval None
613   */
LL_USART_SetOverSampling(USART_TypeDef * USARTx,uint32_t OverSampling)614 __STATIC_INLINE void LL_USART_SetOverSampling(USART_TypeDef *USARTx, uint32_t OverSampling)
615 {
616   MODIFY_REG(USARTx->CR1, USART_CR1_OVER8, OverSampling);
617 }
618 
619 /**
620   * @brief  Return Oversampling mode
621   * @rmtoll CR1          OVER8         LL_USART_GetOverSampling
622   * @param  USARTx USART Instance
623   * @retval Returned value can be one of the following values:
624   *         @arg @ref LL_USART_OVERSAMPLING_16
625   *         @arg @ref LL_USART_OVERSAMPLING_8
626   */
LL_USART_GetOverSampling(USART_TypeDef * USARTx)627 __STATIC_INLINE uint32_t LL_USART_GetOverSampling(USART_TypeDef *USARTx)
628 {
629   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_OVER8));
630 }
631 
632 /**
633   * @brief  Configure if Clock pulse of the last data bit is output to the SCLK pin or not
634   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
635   *         Synchronous mode is supported by the USARTx instance.
636   * @rmtoll CR2          LBCL          LL_USART_SetLastClkPulseOutput
637   * @param  USARTx USART Instance
638   * @param  LastBitClockPulse This parameter can be one of the following values:
639   *         @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT
640   *         @arg @ref LL_USART_LASTCLKPULSE_OUTPUT
641   * @retval None
642   */
LL_USART_SetLastClkPulseOutput(USART_TypeDef * USARTx,uint32_t LastBitClockPulse)643 __STATIC_INLINE void LL_USART_SetLastClkPulseOutput(USART_TypeDef *USARTx, uint32_t LastBitClockPulse)
644 {
645   MODIFY_REG(USARTx->CR2, USART_CR2_LBCL, LastBitClockPulse);
646 }
647 
648 /**
649   * @brief  Retrieve Clock pulse of the last data bit output configuration
650   *         (Last bit Clock pulse output to the SCLK pin or not)
651   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
652   *         Synchronous mode is supported by the USARTx instance.
653   * @rmtoll CR2          LBCL          LL_USART_GetLastClkPulseOutput
654   * @param  USARTx USART Instance
655   * @retval Returned value can be one of the following values:
656   *         @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT
657   *         @arg @ref LL_USART_LASTCLKPULSE_OUTPUT
658   */
LL_USART_GetLastClkPulseOutput(USART_TypeDef * USARTx)659 __STATIC_INLINE uint32_t LL_USART_GetLastClkPulseOutput(USART_TypeDef *USARTx)
660 {
661   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBCL));
662 }
663 
664 /**
665   * @brief  Select the phase of the clock output on the SCLK pin in synchronous mode
666   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
667   *         Synchronous mode is supported by the USARTx instance.
668   * @rmtoll CR2          CPHA          LL_USART_SetClockPhase
669   * @param  USARTx USART Instance
670   * @param  ClockPhase This parameter can be one of the following values:
671   *         @arg @ref LL_USART_PHASE_1EDGE
672   *         @arg @ref LL_USART_PHASE_2EDGE
673   * @retval None
674   */
LL_USART_SetClockPhase(USART_TypeDef * USARTx,uint32_t ClockPhase)675 __STATIC_INLINE void LL_USART_SetClockPhase(USART_TypeDef *USARTx, uint32_t ClockPhase)
676 {
677   MODIFY_REG(USARTx->CR2, USART_CR2_CPHA, ClockPhase);
678 }
679 
680 /**
681   * @brief  Return phase of the clock output on the SCLK pin in synchronous mode
682   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
683   *         Synchronous mode is supported by the USARTx instance.
684   * @rmtoll CR2          CPHA          LL_USART_GetClockPhase
685   * @param  USARTx USART Instance
686   * @retval Returned value can be one of the following values:
687   *         @arg @ref LL_USART_PHASE_1EDGE
688   *         @arg @ref LL_USART_PHASE_2EDGE
689   */
LL_USART_GetClockPhase(USART_TypeDef * USARTx)690 __STATIC_INLINE uint32_t LL_USART_GetClockPhase(USART_TypeDef *USARTx)
691 {
692   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPHA));
693 }
694 
695 /**
696   * @brief  Select the polarity of the clock output on the SCLK pin in synchronous mode
697   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
698   *         Synchronous mode is supported by the USARTx instance.
699   * @rmtoll CR2          CPOL          LL_USART_SetClockPolarity
700   * @param  USARTx USART Instance
701   * @param  ClockPolarity This parameter can be one of the following values:
702   *         @arg @ref LL_USART_POLARITY_LOW
703   *         @arg @ref LL_USART_POLARITY_HIGH
704   * @retval None
705   */
LL_USART_SetClockPolarity(USART_TypeDef * USARTx,uint32_t ClockPolarity)706 __STATIC_INLINE void LL_USART_SetClockPolarity(USART_TypeDef *USARTx, uint32_t ClockPolarity)
707 {
708   MODIFY_REG(USARTx->CR2, USART_CR2_CPOL, ClockPolarity);
709 }
710 
711 /**
712   * @brief  Return polarity of the clock output on the SCLK pin in synchronous mode
713   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
714   *         Synchronous mode is supported by the USARTx instance.
715   * @rmtoll CR2          CPOL          LL_USART_GetClockPolarity
716   * @param  USARTx USART Instance
717   * @retval Returned value can be one of the following values:
718   *         @arg @ref LL_USART_POLARITY_LOW
719   *         @arg @ref LL_USART_POLARITY_HIGH
720   */
LL_USART_GetClockPolarity(USART_TypeDef * USARTx)721 __STATIC_INLINE uint32_t LL_USART_GetClockPolarity(USART_TypeDef *USARTx)
722 {
723   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPOL));
724 }
725 
726 /**
727   * @brief  Configure Clock signal format (Phase Polarity and choice about output of last bit clock pulse)
728   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
729   *         Synchronous mode is supported by the USARTx instance.
730   * @note   Call of this function is equivalent to following function call sequence :
731   *         - Clock Phase configuration using @ref LL_USART_SetClockPhase() function
732   *         - Clock Polarity configuration using @ref LL_USART_SetClockPolarity() function
733   *         - Output of Last bit Clock pulse configuration using @ref LL_USART_SetLastClkPulseOutput() function
734   * @rmtoll CR2          CPHA          LL_USART_ConfigClock\n
735   *         CR2          CPOL          LL_USART_ConfigClock\n
736   *         CR2          LBCL          LL_USART_ConfigClock
737   * @param  USARTx USART Instance
738   * @param  Phase This parameter can be one of the following values:
739   *         @arg @ref LL_USART_PHASE_1EDGE
740   *         @arg @ref LL_USART_PHASE_2EDGE
741   * @param  Polarity This parameter can be one of the following values:
742   *         @arg @ref LL_USART_POLARITY_LOW
743   *         @arg @ref LL_USART_POLARITY_HIGH
744   * @param  LBCPOutput This parameter can be one of the following values:
745   *         @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT
746   *         @arg @ref LL_USART_LASTCLKPULSE_OUTPUT
747   * @retval None
748   */
LL_USART_ConfigClock(USART_TypeDef * USARTx,uint32_t Phase,uint32_t Polarity,uint32_t LBCPOutput)749 __STATIC_INLINE void LL_USART_ConfigClock(USART_TypeDef *USARTx, uint32_t Phase, uint32_t Polarity, uint32_t LBCPOutput)
750 {
751   MODIFY_REG(USARTx->CR2, USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_LBCL, Phase | Polarity | LBCPOutput);
752 }
753 
754 /**
755   * @brief  Enable Clock output on SCLK pin
756   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
757   *         Synchronous mode is supported by the USARTx instance.
758   * @rmtoll CR2          CLKEN         LL_USART_EnableSCLKOutput
759   * @param  USARTx USART Instance
760   * @retval None
761   */
LL_USART_EnableSCLKOutput(USART_TypeDef * USARTx)762 __STATIC_INLINE void LL_USART_EnableSCLKOutput(USART_TypeDef *USARTx)
763 {
764   SET_BIT(USARTx->CR2, USART_CR2_CLKEN);
765 }
766 
767 /**
768   * @brief  Disable Clock output on SCLK pin
769   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
770   *         Synchronous mode is supported by the USARTx instance.
771   * @rmtoll CR2          CLKEN         LL_USART_DisableSCLKOutput
772   * @param  USARTx USART Instance
773   * @retval None
774   */
LL_USART_DisableSCLKOutput(USART_TypeDef * USARTx)775 __STATIC_INLINE void LL_USART_DisableSCLKOutput(USART_TypeDef *USARTx)
776 {
777   CLEAR_BIT(USARTx->CR2, USART_CR2_CLKEN);
778 }
779 
780 /**
781   * @brief  Indicate if Clock output on SCLK pin is enabled
782   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
783   *         Synchronous mode is supported by the USARTx instance.
784   * @rmtoll CR2          CLKEN         LL_USART_IsEnabledSCLKOutput
785   * @param  USARTx USART Instance
786   * @retval State of bit (1 or 0).
787   */
LL_USART_IsEnabledSCLKOutput(USART_TypeDef * USARTx)788 __STATIC_INLINE uint32_t LL_USART_IsEnabledSCLKOutput(USART_TypeDef *USARTx)
789 {
790   return (READ_BIT(USARTx->CR2, USART_CR2_CLKEN) == (USART_CR2_CLKEN));
791 }
792 
793 /**
794   * @brief  Set the length of the stop bits
795   * @rmtoll CR2          STOP          LL_USART_SetStopBitsLength
796   * @param  USARTx USART Instance
797   * @param  StopBits This parameter can be one of the following values:
798   *         @arg @ref LL_USART_STOPBITS_0_5
799   *         @arg @ref LL_USART_STOPBITS_1
800   *         @arg @ref LL_USART_STOPBITS_1_5
801   *         @arg @ref LL_USART_STOPBITS_2
802   * @retval None
803   */
LL_USART_SetStopBitsLength(USART_TypeDef * USARTx,uint32_t StopBits)804 __STATIC_INLINE void LL_USART_SetStopBitsLength(USART_TypeDef *USARTx, uint32_t StopBits)
805 {
806   MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits);
807 }
808 
809 /**
810   * @brief  Retrieve the length of the stop bits
811   * @rmtoll CR2          STOP          LL_USART_GetStopBitsLength
812   * @param  USARTx USART Instance
813   * @retval Returned value can be one of the following values:
814   *         @arg @ref LL_USART_STOPBITS_0_5
815   *         @arg @ref LL_USART_STOPBITS_1
816   *         @arg @ref LL_USART_STOPBITS_1_5
817   *         @arg @ref LL_USART_STOPBITS_2
818   */
LL_USART_GetStopBitsLength(USART_TypeDef * USARTx)819 __STATIC_INLINE uint32_t LL_USART_GetStopBitsLength(USART_TypeDef *USARTx)
820 {
821   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_STOP));
822 }
823 
824 /**
825   * @brief  Configure Character frame format (Datawidth, Parity control, Stop Bits)
826   * @note   Call of this function is equivalent to following function call sequence :
827   *         - Data Width configuration using @ref LL_USART_SetDataWidth() function
828   *         - Parity Control and mode configuration using @ref LL_USART_SetParity() function
829   *         - Stop bits configuration using @ref LL_USART_SetStopBitsLength() function
830   * @rmtoll CR1          PS            LL_USART_ConfigCharacter\n
831   *         CR1          PCE           LL_USART_ConfigCharacter\n
832   *         CR1          M             LL_USART_ConfigCharacter\n
833   *         CR2          STOP          LL_USART_ConfigCharacter
834   * @param  USARTx USART Instance
835   * @param  DataWidth This parameter can be one of the following values:
836   *         @arg @ref LL_USART_DATAWIDTH_8B
837   *         @arg @ref LL_USART_DATAWIDTH_9B
838   * @param  Parity This parameter can be one of the following values:
839   *         @arg @ref LL_USART_PARITY_NONE
840   *         @arg @ref LL_USART_PARITY_EVEN
841   *         @arg @ref LL_USART_PARITY_ODD
842   * @param  StopBits This parameter can be one of the following values:
843   *         @arg @ref LL_USART_STOPBITS_0_5
844   *         @arg @ref LL_USART_STOPBITS_1
845   *         @arg @ref LL_USART_STOPBITS_1_5
846   *         @arg @ref LL_USART_STOPBITS_2
847   * @retval None
848   */
LL_USART_ConfigCharacter(USART_TypeDef * USARTx,uint32_t DataWidth,uint32_t Parity,uint32_t StopBits)849 __STATIC_INLINE void LL_USART_ConfigCharacter(USART_TypeDef *USARTx, uint32_t DataWidth, uint32_t Parity,
850                                               uint32_t StopBits)
851 {
852   MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE | USART_CR1_M, Parity | DataWidth);
853   MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits);
854 }
855 
856 /**
857   * @brief  Set Address of the USART node.
858   * @note   This is used in multiprocessor communication during Mute mode or Stop mode,
859   *         for wake up with address mark detection.
860   * @rmtoll CR2          ADD           LL_USART_SetNodeAddress
861   * @param  USARTx USART Instance
862   * @param  NodeAddress 4 bit Address of the USART node.
863   * @retval None
864   */
LL_USART_SetNodeAddress(USART_TypeDef * USARTx,uint32_t NodeAddress)865 __STATIC_INLINE void LL_USART_SetNodeAddress(USART_TypeDef *USARTx, uint32_t NodeAddress)
866 {
867   MODIFY_REG(USARTx->CR2, USART_CR2_ADD, (NodeAddress & USART_CR2_ADD));
868 }
869 
870 /**
871   * @brief  Return 4 bit Address of the USART node as set in ADD field of CR2.
872   * @note   only 4bits (b3-b0) of returned value are relevant (b31-b4 are not relevant)
873   * @rmtoll CR2          ADD           LL_USART_GetNodeAddress
874   * @param  USARTx USART Instance
875   * @retval Address of the USART node (Value between Min_Data=0 and Max_Data=255)
876   */
LL_USART_GetNodeAddress(USART_TypeDef * USARTx)877 __STATIC_INLINE uint32_t LL_USART_GetNodeAddress(USART_TypeDef *USARTx)
878 {
879   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ADD));
880 }
881 
882 /**
883   * @brief  Enable RTS HW Flow Control
884   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
885   *         Hardware Flow control feature is supported by the USARTx instance.
886   * @rmtoll CR3          RTSE          LL_USART_EnableRTSHWFlowCtrl
887   * @param  USARTx USART Instance
888   * @retval None
889   */
LL_USART_EnableRTSHWFlowCtrl(USART_TypeDef * USARTx)890 __STATIC_INLINE void LL_USART_EnableRTSHWFlowCtrl(USART_TypeDef *USARTx)
891 {
892   SET_BIT(USARTx->CR3, USART_CR3_RTSE);
893 }
894 
895 /**
896   * @brief  Disable RTS HW Flow Control
897   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
898   *         Hardware Flow control feature is supported by the USARTx instance.
899   * @rmtoll CR3          RTSE          LL_USART_DisableRTSHWFlowCtrl
900   * @param  USARTx USART Instance
901   * @retval None
902   */
LL_USART_DisableRTSHWFlowCtrl(USART_TypeDef * USARTx)903 __STATIC_INLINE void LL_USART_DisableRTSHWFlowCtrl(USART_TypeDef *USARTx)
904 {
905   CLEAR_BIT(USARTx->CR3, USART_CR3_RTSE);
906 }
907 
908 /**
909   * @brief  Enable CTS HW Flow Control
910   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
911   *         Hardware Flow control feature is supported by the USARTx instance.
912   * @rmtoll CR3          CTSE          LL_USART_EnableCTSHWFlowCtrl
913   * @param  USARTx USART Instance
914   * @retval None
915   */
LL_USART_EnableCTSHWFlowCtrl(USART_TypeDef * USARTx)916 __STATIC_INLINE void LL_USART_EnableCTSHWFlowCtrl(USART_TypeDef *USARTx)
917 {
918   SET_BIT(USARTx->CR3, USART_CR3_CTSE);
919 }
920 
921 /**
922   * @brief  Disable CTS HW Flow Control
923   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
924   *         Hardware Flow control feature is supported by the USARTx instance.
925   * @rmtoll CR3          CTSE          LL_USART_DisableCTSHWFlowCtrl
926   * @param  USARTx USART Instance
927   * @retval None
928   */
LL_USART_DisableCTSHWFlowCtrl(USART_TypeDef * USARTx)929 __STATIC_INLINE void LL_USART_DisableCTSHWFlowCtrl(USART_TypeDef *USARTx)
930 {
931   CLEAR_BIT(USARTx->CR3, USART_CR3_CTSE);
932 }
933 
934 /**
935   * @brief  Configure HW Flow Control mode (both CTS and RTS)
936   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
937   *         Hardware Flow control feature is supported by the USARTx instance.
938   * @rmtoll CR3          RTSE          LL_USART_SetHWFlowCtrl\n
939   *         CR3          CTSE          LL_USART_SetHWFlowCtrl
940   * @param  USARTx USART Instance
941   * @param  HardwareFlowControl This parameter can be one of the following values:
942   *         @arg @ref LL_USART_HWCONTROL_NONE
943   *         @arg @ref LL_USART_HWCONTROL_RTS
944   *         @arg @ref LL_USART_HWCONTROL_CTS
945   *         @arg @ref LL_USART_HWCONTROL_RTS_CTS
946   * @retval None
947   */
LL_USART_SetHWFlowCtrl(USART_TypeDef * USARTx,uint32_t HardwareFlowControl)948 __STATIC_INLINE void LL_USART_SetHWFlowCtrl(USART_TypeDef *USARTx, uint32_t HardwareFlowControl)
949 {
950   MODIFY_REG(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE, HardwareFlowControl);
951 }
952 
953 /**
954   * @brief  Return HW Flow Control configuration (both CTS and RTS)
955   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
956   *         Hardware Flow control feature is supported by the USARTx instance.
957   * @rmtoll CR3          RTSE          LL_USART_GetHWFlowCtrl\n
958   *         CR3          CTSE          LL_USART_GetHWFlowCtrl
959   * @param  USARTx USART Instance
960   * @retval Returned value can be one of the following values:
961   *         @arg @ref LL_USART_HWCONTROL_NONE
962   *         @arg @ref LL_USART_HWCONTROL_RTS
963   *         @arg @ref LL_USART_HWCONTROL_CTS
964   *         @arg @ref LL_USART_HWCONTROL_RTS_CTS
965   */
LL_USART_GetHWFlowCtrl(USART_TypeDef * USARTx)966 __STATIC_INLINE uint32_t LL_USART_GetHWFlowCtrl(USART_TypeDef *USARTx)
967 {
968   return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE));
969 }
970 
971 /**
972   * @brief  Enable One bit sampling method
973   * @rmtoll CR3          ONEBIT        LL_USART_EnableOneBitSamp
974   * @param  USARTx USART Instance
975   * @retval None
976   */
LL_USART_EnableOneBitSamp(USART_TypeDef * USARTx)977 __STATIC_INLINE void LL_USART_EnableOneBitSamp(USART_TypeDef *USARTx)
978 {
979   SET_BIT(USARTx->CR3, USART_CR3_ONEBIT);
980 }
981 
982 /**
983   * @brief  Disable One bit sampling method
984   * @rmtoll CR3          ONEBIT        LL_USART_DisableOneBitSamp
985   * @param  USARTx USART Instance
986   * @retval None
987   */
LL_USART_DisableOneBitSamp(USART_TypeDef * USARTx)988 __STATIC_INLINE void LL_USART_DisableOneBitSamp(USART_TypeDef *USARTx)
989 {
990   CLEAR_BIT(USARTx->CR3, USART_CR3_ONEBIT);
991 }
992 
993 /**
994   * @brief  Indicate if One bit sampling method is enabled
995   * @rmtoll CR3          ONEBIT        LL_USART_IsEnabledOneBitSamp
996   * @param  USARTx USART Instance
997   * @retval State of bit (1 or 0).
998   */
LL_USART_IsEnabledOneBitSamp(USART_TypeDef * USARTx)999 __STATIC_INLINE uint32_t LL_USART_IsEnabledOneBitSamp(USART_TypeDef *USARTx)
1000 {
1001   return (READ_BIT(USARTx->CR3, USART_CR3_ONEBIT) == (USART_CR3_ONEBIT));
1002 }
1003 
1004 /**
1005   * @brief  Configure USART BRR register for achieving expected Baud Rate value.
1006   * @note   Compute and set USARTDIV value in BRR Register (full BRR content)
1007   *         according to used Peripheral Clock, Oversampling mode, and expected Baud Rate values
1008   * @note   Peripheral clock and Baud rate values provided as function parameters should be valid
1009   *         (Baud rate value != 0)
1010   * @rmtoll BRR          BRR           LL_USART_SetBaudRate
1011   * @param  USARTx USART Instance
1012   * @param  PeriphClk Peripheral Clock
1013   * @param  OverSampling This parameter can be one of the following values:
1014   *         @arg @ref LL_USART_OVERSAMPLING_16
1015   *         @arg @ref LL_USART_OVERSAMPLING_8
1016   * @param  BaudRate Baud Rate
1017   * @retval None
1018   */
LL_USART_SetBaudRate(USART_TypeDef * USARTx,uint32_t PeriphClk,uint32_t OverSampling,uint32_t BaudRate)1019 __STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling,
1020                                           uint32_t BaudRate)
1021 {
1022   if (OverSampling == LL_USART_OVERSAMPLING_8)
1023   {
1024     USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING8(PeriphClk, BaudRate));
1025   }
1026   else
1027   {
1028     USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, BaudRate));
1029   }
1030 }
1031 
1032 /**
1033   * @brief  Return current Baud Rate value, according to USARTDIV present in BRR register
1034   *         (full BRR content), and to used Peripheral Clock and Oversampling mode values
1035   * @note   In case of non-initialized or invalid value stored in BRR register, value 0 will be returned.
1036   * @rmtoll BRR          BRR           LL_USART_GetBaudRate
1037   * @param  USARTx USART Instance
1038   * @param  PeriphClk Peripheral Clock
1039   * @param  OverSampling This parameter can be one of the following values:
1040   *         @arg @ref LL_USART_OVERSAMPLING_16
1041   *         @arg @ref LL_USART_OVERSAMPLING_8
1042   * @retval Baud Rate
1043   */
LL_USART_GetBaudRate(USART_TypeDef * USARTx,uint32_t PeriphClk,uint32_t OverSampling)1044 __STATIC_INLINE uint32_t LL_USART_GetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling)
1045 {
1046   register uint32_t usartdiv = 0x0U;
1047   register uint32_t brrresult = 0x0U;
1048 
1049   usartdiv = USARTx->BRR;
1050 
1051   if (OverSampling == LL_USART_OVERSAMPLING_8)
1052   {
1053     if ((usartdiv & 0xFFF7U) != 0U)
1054     {
1055       usartdiv = (uint16_t)((usartdiv & 0xFFF0U) | ((usartdiv & 0x0007U) << 1U)) ;
1056       brrresult = (PeriphClk * 2U) / usartdiv;
1057     }
1058   }
1059   else
1060   {
1061     if ((usartdiv & 0xFFFFU) != 0U)
1062     {
1063       brrresult = PeriphClk / usartdiv;
1064     }
1065   }
1066   return (brrresult);
1067 }
1068 
1069 /**
1070   * @}
1071   */
1072 
1073 /** @defgroup USART_LL_EF_Configuration_IRDA Configuration functions related to Irda feature
1074   * @{
1075   */
1076 
1077 /**
1078   * @brief  Enable IrDA mode
1079   * @note   Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
1080   *         IrDA feature is supported by the USARTx instance.
1081   * @rmtoll CR3          IREN          LL_USART_EnableIrda
1082   * @param  USARTx USART Instance
1083   * @retval None
1084   */
LL_USART_EnableIrda(USART_TypeDef * USARTx)1085 __STATIC_INLINE void LL_USART_EnableIrda(USART_TypeDef *USARTx)
1086 {
1087   SET_BIT(USARTx->CR3, USART_CR3_IREN);
1088 }
1089 
1090 /**
1091   * @brief  Disable IrDA mode
1092   * @note   Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
1093   *         IrDA feature is supported by the USARTx instance.
1094   * @rmtoll CR3          IREN          LL_USART_DisableIrda
1095   * @param  USARTx USART Instance
1096   * @retval None
1097   */
LL_USART_DisableIrda(USART_TypeDef * USARTx)1098 __STATIC_INLINE void LL_USART_DisableIrda(USART_TypeDef *USARTx)
1099 {
1100   CLEAR_BIT(USARTx->CR3, USART_CR3_IREN);
1101 }
1102 
1103 /**
1104   * @brief  Indicate if IrDA mode is enabled
1105   * @note   Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
1106   *         IrDA feature is supported by the USARTx instance.
1107   * @rmtoll CR3          IREN          LL_USART_IsEnabledIrda
1108   * @param  USARTx USART Instance
1109   * @retval State of bit (1 or 0).
1110   */
LL_USART_IsEnabledIrda(USART_TypeDef * USARTx)1111 __STATIC_INLINE uint32_t LL_USART_IsEnabledIrda(USART_TypeDef *USARTx)
1112 {
1113   return (READ_BIT(USARTx->CR3, USART_CR3_IREN) == (USART_CR3_IREN));
1114 }
1115 
1116 /**
1117   * @brief  Configure IrDA Power Mode (Normal or Low Power)
1118   * @note   Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
1119   *         IrDA feature is supported by the USARTx instance.
1120   * @rmtoll CR3          IRLP          LL_USART_SetIrdaPowerMode
1121   * @param  USARTx USART Instance
1122   * @param  PowerMode This parameter can be one of the following values:
1123   *         @arg @ref LL_USART_IRDA_POWER_NORMAL
1124   *         @arg @ref LL_USART_IRDA_POWER_LOW
1125   * @retval None
1126   */
LL_USART_SetIrdaPowerMode(USART_TypeDef * USARTx,uint32_t PowerMode)1127 __STATIC_INLINE void LL_USART_SetIrdaPowerMode(USART_TypeDef *USARTx, uint32_t PowerMode)
1128 {
1129   MODIFY_REG(USARTx->CR3, USART_CR3_IRLP, PowerMode);
1130 }
1131 
1132 /**
1133   * @brief  Retrieve IrDA Power Mode configuration (Normal or Low Power)
1134   * @note   Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
1135   *         IrDA feature is supported by the USARTx instance.
1136   * @rmtoll CR3          IRLP          LL_USART_GetIrdaPowerMode
1137   * @param  USARTx USART Instance
1138   * @retval Returned value can be one of the following values:
1139   *         @arg @ref LL_USART_IRDA_POWER_NORMAL
1140   *         @arg @ref LL_USART_PHASE_2EDGE
1141   */
LL_USART_GetIrdaPowerMode(USART_TypeDef * USARTx)1142 __STATIC_INLINE uint32_t LL_USART_GetIrdaPowerMode(USART_TypeDef *USARTx)
1143 {
1144   return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_IRLP));
1145 }
1146 
1147 /**
1148   * @brief  Set Irda prescaler value, used for dividing the USART clock source
1149   *         to achieve the Irda Low Power frequency (8 bits value)
1150   * @note   Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
1151   *         IrDA feature is supported by the USARTx instance.
1152   * @rmtoll GTPR         PSC           LL_USART_SetIrdaPrescaler
1153   * @param  USARTx USART Instance
1154   * @param  PrescalerValue Value between Min_Data=0x00 and Max_Data=0xFF
1155   * @retval None
1156   */
LL_USART_SetIrdaPrescaler(USART_TypeDef * USARTx,uint32_t PrescalerValue)1157 __STATIC_INLINE void LL_USART_SetIrdaPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue)
1158 {
1159   MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, PrescalerValue);
1160 }
1161 
1162 /**
1163   * @brief  Return Irda prescaler value, used for dividing the USART clock source
1164   *         to achieve the Irda Low Power frequency (8 bits value)
1165   * @note   Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
1166   *         IrDA feature is supported by the USARTx instance.
1167   * @rmtoll GTPR         PSC           LL_USART_GetIrdaPrescaler
1168   * @param  USARTx USART Instance
1169   * @retval Irda prescaler value (Value between Min_Data=0x00 and Max_Data=0xFF)
1170   */
LL_USART_GetIrdaPrescaler(USART_TypeDef * USARTx)1171 __STATIC_INLINE uint32_t LL_USART_GetIrdaPrescaler(USART_TypeDef *USARTx)
1172 {
1173   return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC));
1174 }
1175 
1176 /**
1177   * @}
1178   */
1179 
1180 /** @defgroup USART_LL_EF_Configuration_Smartcard Configuration functions related to Smartcard feature
1181   * @{
1182   */
1183 
1184 /**
1185   * @brief  Enable Smartcard NACK transmission
1186   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1187   *         Smartcard feature is supported by the USARTx instance.
1188   * @rmtoll CR3          NACK          LL_USART_EnableSmartcardNACK
1189   * @param  USARTx USART Instance
1190   * @retval None
1191   */
LL_USART_EnableSmartcardNACK(USART_TypeDef * USARTx)1192 __STATIC_INLINE void LL_USART_EnableSmartcardNACK(USART_TypeDef *USARTx)
1193 {
1194   SET_BIT(USARTx->CR3, USART_CR3_NACK);
1195 }
1196 
1197 /**
1198   * @brief  Disable Smartcard NACK transmission
1199   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1200   *         Smartcard feature is supported by the USARTx instance.
1201   * @rmtoll CR3          NACK          LL_USART_DisableSmartcardNACK
1202   * @param  USARTx USART Instance
1203   * @retval None
1204   */
LL_USART_DisableSmartcardNACK(USART_TypeDef * USARTx)1205 __STATIC_INLINE void LL_USART_DisableSmartcardNACK(USART_TypeDef *USARTx)
1206 {
1207   CLEAR_BIT(USARTx->CR3, USART_CR3_NACK);
1208 }
1209 
1210 /**
1211   * @brief  Indicate if Smartcard NACK transmission is enabled
1212   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1213   *         Smartcard feature is supported by the USARTx instance.
1214   * @rmtoll CR3          NACK          LL_USART_IsEnabledSmartcardNACK
1215   * @param  USARTx USART Instance
1216   * @retval State of bit (1 or 0).
1217   */
LL_USART_IsEnabledSmartcardNACK(USART_TypeDef * USARTx)1218 __STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcardNACK(USART_TypeDef *USARTx)
1219 {
1220   return (READ_BIT(USARTx->CR3, USART_CR3_NACK) == (USART_CR3_NACK));
1221 }
1222 
1223 /**
1224   * @brief  Enable Smartcard mode
1225   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1226   *         Smartcard feature is supported by the USARTx instance.
1227   * @rmtoll CR3          SCEN          LL_USART_EnableSmartcard
1228   * @param  USARTx USART Instance
1229   * @retval None
1230   */
LL_USART_EnableSmartcard(USART_TypeDef * USARTx)1231 __STATIC_INLINE void LL_USART_EnableSmartcard(USART_TypeDef *USARTx)
1232 {
1233   SET_BIT(USARTx->CR3, USART_CR3_SCEN);
1234 }
1235 
1236 /**
1237   * @brief  Disable Smartcard mode
1238   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1239   *         Smartcard feature is supported by the USARTx instance.
1240   * @rmtoll CR3          SCEN          LL_USART_DisableSmartcard
1241   * @param  USARTx USART Instance
1242   * @retval None
1243   */
LL_USART_DisableSmartcard(USART_TypeDef * USARTx)1244 __STATIC_INLINE void LL_USART_DisableSmartcard(USART_TypeDef *USARTx)
1245 {
1246   CLEAR_BIT(USARTx->CR3, USART_CR3_SCEN);
1247 }
1248 
1249 /**
1250   * @brief  Indicate if Smartcard mode is enabled
1251   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1252   *         Smartcard feature is supported by the USARTx instance.
1253   * @rmtoll CR3          SCEN          LL_USART_IsEnabledSmartcard
1254   * @param  USARTx USART Instance
1255   * @retval State of bit (1 or 0).
1256   */
LL_USART_IsEnabledSmartcard(USART_TypeDef * USARTx)1257 __STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcard(USART_TypeDef *USARTx)
1258 {
1259   return (READ_BIT(USARTx->CR3, USART_CR3_SCEN) == (USART_CR3_SCEN));
1260 }
1261 
1262 /**
1263   * @brief  Set Smartcard prescaler value, used for dividing the USART clock
1264   *         source to provide the SMARTCARD Clock (5 bits value)
1265   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1266   *         Smartcard feature is supported by the USARTx instance.
1267   * @rmtoll GTPR         PSC           LL_USART_SetSmartcardPrescaler
1268   * @param  USARTx USART Instance
1269   * @param  PrescalerValue Value between Min_Data=0 and Max_Data=31
1270   * @retval None
1271   */
LL_USART_SetSmartcardPrescaler(USART_TypeDef * USARTx,uint32_t PrescalerValue)1272 __STATIC_INLINE void LL_USART_SetSmartcardPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue)
1273 {
1274   MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, PrescalerValue);
1275 }
1276 
1277 /**
1278   * @brief  Return Smartcard prescaler value, used for dividing the USART clock
1279   *         source to provide the SMARTCARD Clock (5 bits value)
1280   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1281   *         Smartcard feature is supported by the USARTx instance.
1282   * @rmtoll GTPR         PSC           LL_USART_GetSmartcardPrescaler
1283   * @param  USARTx USART Instance
1284   * @retval Smartcard prescaler value (Value between Min_Data=0 and Max_Data=31)
1285   */
LL_USART_GetSmartcardPrescaler(USART_TypeDef * USARTx)1286 __STATIC_INLINE uint32_t LL_USART_GetSmartcardPrescaler(USART_TypeDef *USARTx)
1287 {
1288   return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC));
1289 }
1290 
1291 /**
1292   * @brief  Set Smartcard Guard time value, expressed in nb of baud clocks periods
1293   *         (GT[7:0] bits : Guard time value)
1294   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1295   *         Smartcard feature is supported by the USARTx instance.
1296   * @rmtoll GTPR         GT            LL_USART_SetSmartcardGuardTime
1297   * @param  USARTx USART Instance
1298   * @param  GuardTime Value between Min_Data=0x00 and Max_Data=0xFF
1299   * @retval None
1300   */
LL_USART_SetSmartcardGuardTime(USART_TypeDef * USARTx,uint32_t GuardTime)1301 __STATIC_INLINE void LL_USART_SetSmartcardGuardTime(USART_TypeDef *USARTx, uint32_t GuardTime)
1302 {
1303   MODIFY_REG(USARTx->GTPR, USART_GTPR_GT, GuardTime << USART_POSITION_GTPR_GT);
1304 }
1305 
1306 /**
1307   * @brief  Return Smartcard Guard time value, expressed in nb of baud clocks periods
1308   *         (GT[7:0] bits : Guard time value)
1309   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1310   *         Smartcard feature is supported by the USARTx instance.
1311   * @rmtoll GTPR         GT            LL_USART_GetSmartcardGuardTime
1312   * @param  USARTx USART Instance
1313   * @retval Smartcard Guard time value (Value between Min_Data=0x00 and Max_Data=0xFF)
1314   */
LL_USART_GetSmartcardGuardTime(USART_TypeDef * USARTx)1315 __STATIC_INLINE uint32_t LL_USART_GetSmartcardGuardTime(USART_TypeDef *USARTx)
1316 {
1317   return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_GT) >> USART_POSITION_GTPR_GT);
1318 }
1319 
1320 /**
1321   * @}
1322   */
1323 
1324 /** @defgroup USART_LL_EF_Configuration_HalfDuplex Configuration functions related to Half Duplex feature
1325   * @{
1326   */
1327 
1328 /**
1329   * @brief  Enable Single Wire Half-Duplex mode
1330   * @note   Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not
1331   *         Half-Duplex mode is supported by the USARTx instance.
1332   * @rmtoll CR3          HDSEL         LL_USART_EnableHalfDuplex
1333   * @param  USARTx USART Instance
1334   * @retval None
1335   */
LL_USART_EnableHalfDuplex(USART_TypeDef * USARTx)1336 __STATIC_INLINE void LL_USART_EnableHalfDuplex(USART_TypeDef *USARTx)
1337 {
1338   SET_BIT(USARTx->CR3, USART_CR3_HDSEL);
1339 }
1340 
1341 /**
1342   * @brief  Disable Single Wire Half-Duplex mode
1343   * @note   Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not
1344   *         Half-Duplex mode is supported by the USARTx instance.
1345   * @rmtoll CR3          HDSEL         LL_USART_DisableHalfDuplex
1346   * @param  USARTx USART Instance
1347   * @retval None
1348   */
LL_USART_DisableHalfDuplex(USART_TypeDef * USARTx)1349 __STATIC_INLINE void LL_USART_DisableHalfDuplex(USART_TypeDef *USARTx)
1350 {
1351   CLEAR_BIT(USARTx->CR3, USART_CR3_HDSEL);
1352 }
1353 
1354 /**
1355   * @brief  Indicate if Single Wire Half-Duplex mode is enabled
1356   * @note   Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not
1357   *         Half-Duplex mode is supported by the USARTx instance.
1358   * @rmtoll CR3          HDSEL         LL_USART_IsEnabledHalfDuplex
1359   * @param  USARTx USART Instance
1360   * @retval State of bit (1 or 0).
1361   */
LL_USART_IsEnabledHalfDuplex(USART_TypeDef * USARTx)1362 __STATIC_INLINE uint32_t LL_USART_IsEnabledHalfDuplex(USART_TypeDef *USARTx)
1363 {
1364   return (READ_BIT(USARTx->CR3, USART_CR3_HDSEL) == (USART_CR3_HDSEL));
1365 }
1366 
1367 /**
1368   * @}
1369   */
1370 
1371 /** @defgroup USART_LL_EF_Configuration_LIN Configuration functions related to LIN feature
1372   * @{
1373   */
1374 
1375 /**
1376   * @brief  Set LIN Break Detection Length
1377   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
1378   *         LIN feature is supported by the USARTx instance.
1379   * @rmtoll CR2          LBDL          LL_USART_SetLINBrkDetectionLen
1380   * @param  USARTx USART Instance
1381   * @param  LINBDLength This parameter can be one of the following values:
1382   *         @arg @ref LL_USART_LINBREAK_DETECT_10B
1383   *         @arg @ref LL_USART_LINBREAK_DETECT_11B
1384   * @retval None
1385   */
LL_USART_SetLINBrkDetectionLen(USART_TypeDef * USARTx,uint32_t LINBDLength)1386 __STATIC_INLINE void LL_USART_SetLINBrkDetectionLen(USART_TypeDef *USARTx, uint32_t LINBDLength)
1387 {
1388   MODIFY_REG(USARTx->CR2, USART_CR2_LBDL, LINBDLength);
1389 }
1390 
1391 /**
1392   * @brief  Return LIN Break Detection Length
1393   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
1394   *         LIN feature is supported by the USARTx instance.
1395   * @rmtoll CR2          LBDL          LL_USART_GetLINBrkDetectionLen
1396   * @param  USARTx USART Instance
1397   * @retval Returned value can be one of the following values:
1398   *         @arg @ref LL_USART_LINBREAK_DETECT_10B
1399   *         @arg @ref LL_USART_LINBREAK_DETECT_11B
1400   */
LL_USART_GetLINBrkDetectionLen(USART_TypeDef * USARTx)1401 __STATIC_INLINE uint32_t LL_USART_GetLINBrkDetectionLen(USART_TypeDef *USARTx)
1402 {
1403   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBDL));
1404 }
1405 
1406 /**
1407   * @brief  Enable LIN mode
1408   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
1409   *         LIN feature is supported by the USARTx instance.
1410   * @rmtoll CR2          LINEN         LL_USART_EnableLIN
1411   * @param  USARTx USART Instance
1412   * @retval None
1413   */
LL_USART_EnableLIN(USART_TypeDef * USARTx)1414 __STATIC_INLINE void LL_USART_EnableLIN(USART_TypeDef *USARTx)
1415 {
1416   SET_BIT(USARTx->CR2, USART_CR2_LINEN);
1417 }
1418 
1419 /**
1420   * @brief  Disable LIN mode
1421   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
1422   *         LIN feature is supported by the USARTx instance.
1423   * @rmtoll CR2          LINEN         LL_USART_DisableLIN
1424   * @param  USARTx USART Instance
1425   * @retval None
1426   */
LL_USART_DisableLIN(USART_TypeDef * USARTx)1427 __STATIC_INLINE void LL_USART_DisableLIN(USART_TypeDef *USARTx)
1428 {
1429   CLEAR_BIT(USARTx->CR2, USART_CR2_LINEN);
1430 }
1431 
1432 /**
1433   * @brief  Indicate if LIN mode is enabled
1434   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
1435   *         LIN feature is supported by the USARTx instance.
1436   * @rmtoll CR2          LINEN         LL_USART_IsEnabledLIN
1437   * @param  USARTx USART Instance
1438   * @retval State of bit (1 or 0).
1439   */
LL_USART_IsEnabledLIN(USART_TypeDef * USARTx)1440 __STATIC_INLINE uint32_t LL_USART_IsEnabledLIN(USART_TypeDef *USARTx)
1441 {
1442   return (READ_BIT(USARTx->CR2, USART_CR2_LINEN) == (USART_CR2_LINEN));
1443 }
1444 
1445 /**
1446   * @}
1447   */
1448 
1449 /** @defgroup USART_LL_EF_AdvancedConfiguration Advanced Configurations services
1450   * @{
1451   */
1452 
1453 /**
1454   * @brief  Perform basic configuration of USART for enabling use in Asynchronous Mode (UART)
1455   * @note   In UART mode, the following bits must be kept cleared:
1456   *           - LINEN bit in the USART_CR2 register,
1457   *           - CLKEN bit in the USART_CR2 register,
1458   *           - SCEN bit in the USART_CR3 register,
1459   *           - IREN bit in the USART_CR3 register,
1460   *           - HDSEL bit in the USART_CR3 register.
1461   * @note   Call of this function is equivalent to following function call sequence :
1462   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
1463   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
1464   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
1465   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
1466   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
1467   * @note   Other remaining configurations items related to Asynchronous Mode
1468   *         (as Baud Rate, Word length, Parity, ...) should be set using
1469   *         dedicated functions
1470   * @rmtoll CR2          LINEN         LL_USART_ConfigAsyncMode\n
1471   *         CR2          CLKEN         LL_USART_ConfigAsyncMode\n
1472   *         CR3          SCEN          LL_USART_ConfigAsyncMode\n
1473   *         CR3          IREN          LL_USART_ConfigAsyncMode\n
1474   *         CR3          HDSEL         LL_USART_ConfigAsyncMode
1475   * @param  USARTx USART Instance
1476   * @retval None
1477   */
LL_USART_ConfigAsyncMode(USART_TypeDef * USARTx)1478 __STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx)
1479 {
1480   /* In Asynchronous mode, the following bits must be kept cleared:
1481   - LINEN, CLKEN bits in the USART_CR2 register,
1482   - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
1483   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
1484   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
1485 }
1486 
1487 /**
1488   * @brief  Perform basic configuration of USART for enabling use in Synchronous Mode
1489   * @note   In Synchronous mode, the following bits must be kept cleared:
1490   *           - LINEN bit in the USART_CR2 register,
1491   *           - SCEN bit in the USART_CR3 register,
1492   *           - IREN bit in the USART_CR3 register,
1493   *           - HDSEL bit in the USART_CR3 register.
1494   *         This function also sets the USART in Synchronous mode.
1495   * @note   Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not
1496   *         Synchronous mode is supported by the USARTx instance.
1497   * @note   Call of this function is equivalent to following function call sequence :
1498   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
1499   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
1500   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
1501   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
1502   *         - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function
1503   * @note   Other remaining configurations items related to Synchronous Mode
1504   *         (as Baud Rate, Word length, Parity, Clock Polarity, ...) should be set using
1505   *         dedicated functions
1506   * @rmtoll CR2          LINEN         LL_USART_ConfigSyncMode\n
1507   *         CR2          CLKEN         LL_USART_ConfigSyncMode\n
1508   *         CR3          SCEN          LL_USART_ConfigSyncMode\n
1509   *         CR3          IREN          LL_USART_ConfigSyncMode\n
1510   *         CR3          HDSEL         LL_USART_ConfigSyncMode
1511   * @param  USARTx USART Instance
1512   * @retval None
1513   */
LL_USART_ConfigSyncMode(USART_TypeDef * USARTx)1514 __STATIC_INLINE void LL_USART_ConfigSyncMode(USART_TypeDef *USARTx)
1515 {
1516   /* In Synchronous mode, the following bits must be kept cleared:
1517   - LINEN bit in the USART_CR2 register,
1518   - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
1519   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
1520   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
1521   /* set the UART/USART in Synchronous mode */
1522   SET_BIT(USARTx->CR2, USART_CR2_CLKEN);
1523 }
1524 
1525 /**
1526   * @brief  Perform basic configuration of USART for enabling use in LIN Mode
1527   * @note   In LIN mode, the following bits must be kept cleared:
1528   *           - STOP and CLKEN bits in the USART_CR2 register,
1529   *           - SCEN bit in the USART_CR3 register,
1530   *           - IREN bit in the USART_CR3 register,
1531   *           - HDSEL bit in the USART_CR3 register.
1532   *         This function also set the UART/USART in LIN mode.
1533   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
1534   *         LIN feature is supported by the USARTx instance.
1535   * @note   Call of this function is equivalent to following function call sequence :
1536   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
1537   *         - Clear STOP in CR2 using @ref LL_USART_SetStopBitsLength() function
1538   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
1539   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
1540   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
1541   *         - Set LINEN in CR2 using @ref LL_USART_EnableLIN() function
1542   * @note   Other remaining configurations items related to LIN Mode
1543   *         (as Baud Rate, Word length, LIN Break Detection Length, ...) should be set using
1544   *         dedicated functions
1545   * @rmtoll CR2          CLKEN         LL_USART_ConfigLINMode\n
1546   *         CR2          STOP          LL_USART_ConfigLINMode\n
1547   *         CR2          LINEN         LL_USART_ConfigLINMode\n
1548   *         CR3          IREN          LL_USART_ConfigLINMode\n
1549   *         CR3          SCEN          LL_USART_ConfigLINMode\n
1550   *         CR3          HDSEL         LL_USART_ConfigLINMode
1551   * @param  USARTx USART Instance
1552   * @retval None
1553   */
LL_USART_ConfigLINMode(USART_TypeDef * USARTx)1554 __STATIC_INLINE void LL_USART_ConfigLINMode(USART_TypeDef *USARTx)
1555 {
1556   /* In LIN mode, the following bits must be kept cleared:
1557   - STOP and CLKEN bits in the USART_CR2 register,
1558   - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
1559   CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP));
1560   CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL));
1561   /* Set the UART/USART in LIN mode */
1562   SET_BIT(USARTx->CR2, USART_CR2_LINEN);
1563 }
1564 
1565 /**
1566   * @brief  Perform basic configuration of USART for enabling use in Half Duplex Mode
1567   * @note   In Half Duplex mode, the following bits must be kept cleared:
1568   *           - LINEN bit in the USART_CR2 register,
1569   *           - CLKEN bit in the USART_CR2 register,
1570   *           - SCEN bit in the USART_CR3 register,
1571   *           - IREN bit in the USART_CR3 register,
1572   *         This function also sets the UART/USART in Half Duplex mode.
1573   * @note   Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not
1574   *         Half-Duplex mode is supported by the USARTx instance.
1575   * @note   Call of this function is equivalent to following function call sequence :
1576   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
1577   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
1578   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
1579   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
1580   *         - Set HDSEL in CR3 using @ref LL_USART_EnableHalfDuplex() function
1581   * @note   Other remaining configurations items related to Half Duplex Mode
1582   *         (as Baud Rate, Word length, Parity, ...) should be set using
1583   *         dedicated functions
1584   * @rmtoll CR2          LINEN         LL_USART_ConfigHalfDuplexMode\n
1585   *         CR2          CLKEN         LL_USART_ConfigHalfDuplexMode\n
1586   *         CR3          HDSEL         LL_USART_ConfigHalfDuplexMode\n
1587   *         CR3          SCEN          LL_USART_ConfigHalfDuplexMode\n
1588   *         CR3          IREN          LL_USART_ConfigHalfDuplexMode
1589   * @param  USARTx USART Instance
1590   * @retval None
1591   */
LL_USART_ConfigHalfDuplexMode(USART_TypeDef * USARTx)1592 __STATIC_INLINE void LL_USART_ConfigHalfDuplexMode(USART_TypeDef *USARTx)
1593 {
1594   /* In Half Duplex mode, the following bits must be kept cleared:
1595   - LINEN and CLKEN bits in the USART_CR2 register,
1596   - SCEN and IREN bits in the USART_CR3 register.*/
1597   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
1598   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN));
1599   /* set the UART/USART in Half Duplex mode */
1600   SET_BIT(USARTx->CR3, USART_CR3_HDSEL);
1601 }
1602 
1603 /**
1604   * @brief  Perform basic configuration of USART for enabling use in Smartcard Mode
1605   * @note   In Smartcard mode, the following bits must be kept cleared:
1606   *           - LINEN bit in the USART_CR2 register,
1607   *           - IREN bit in the USART_CR3 register,
1608   *           - HDSEL bit in the USART_CR3 register.
1609   *         This function also configures Stop bits to 1.5 bits and
1610   *         sets the USART in Smartcard mode (SCEN bit).
1611   *         Clock Output is also enabled (CLKEN).
1612   * @note   Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
1613   *         Smartcard feature is supported by the USARTx instance.
1614   * @note   Call of this function is equivalent to following function call sequence :
1615   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
1616   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
1617   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
1618   *         - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function
1619   *         - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function
1620   *         - Set SCEN in CR3 using @ref LL_USART_EnableSmartcard() function
1621   * @note   Other remaining configurations items related to Smartcard Mode
1622   *         (as Baud Rate, Word length, Parity, ...) should be set using
1623   *         dedicated functions
1624   * @rmtoll CR2          LINEN         LL_USART_ConfigSmartcardMode\n
1625   *         CR2          STOP          LL_USART_ConfigSmartcardMode\n
1626   *         CR2          CLKEN         LL_USART_ConfigSmartcardMode\n
1627   *         CR3          HDSEL         LL_USART_ConfigSmartcardMode\n
1628   *         CR3          SCEN          LL_USART_ConfigSmartcardMode
1629   * @param  USARTx USART Instance
1630   * @retval None
1631   */
LL_USART_ConfigSmartcardMode(USART_TypeDef * USARTx)1632 __STATIC_INLINE void LL_USART_ConfigSmartcardMode(USART_TypeDef *USARTx)
1633 {
1634   /* In Smartcard mode, the following bits must be kept cleared:
1635   - LINEN bit in the USART_CR2 register,
1636   - IREN and HDSEL bits in the USART_CR3 register.*/
1637   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
1638   CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL));
1639   /* Configure Stop bits to 1.5 bits */
1640   /* Synchronous mode is activated by default */
1641   SET_BIT(USARTx->CR2, (USART_CR2_STOP_0 | USART_CR2_STOP_1 | USART_CR2_CLKEN));
1642   /* set the UART/USART in Smartcard mode */
1643   SET_BIT(USARTx->CR3, USART_CR3_SCEN);
1644 }
1645 
1646 /**
1647   * @brief  Perform basic configuration of USART for enabling use in Irda Mode
1648   * @note   In IRDA mode, the following bits must be kept cleared:
1649   *           - LINEN bit in the USART_CR2 register,
1650   *           - STOP and CLKEN bits in the USART_CR2 register,
1651   *           - SCEN bit in the USART_CR3 register,
1652   *           - HDSEL bit in the USART_CR3 register.
1653   *         This function also sets the UART/USART in IRDA mode (IREN bit).
1654   * @note   Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
1655   *         IrDA feature is supported by the USARTx instance.
1656   * @note   Call of this function is equivalent to following function call sequence :
1657   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
1658   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
1659   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
1660   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
1661   *         - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function
1662   *         - Set IREN in CR3 using @ref LL_USART_EnableIrda() function
1663   * @note   Other remaining configurations items related to Irda Mode
1664   *         (as Baud Rate, Word length, Power mode, ...) should be set using
1665   *         dedicated functions
1666   * @rmtoll CR2          LINEN         LL_USART_ConfigIrdaMode\n
1667   *         CR2          CLKEN         LL_USART_ConfigIrdaMode\n
1668   *         CR2          STOP          LL_USART_ConfigIrdaMode\n
1669   *         CR3          SCEN          LL_USART_ConfigIrdaMode\n
1670   *         CR3          HDSEL         LL_USART_ConfigIrdaMode\n
1671   *         CR3          IREN          LL_USART_ConfigIrdaMode
1672   * @param  USARTx USART Instance
1673   * @retval None
1674   */
LL_USART_ConfigIrdaMode(USART_TypeDef * USARTx)1675 __STATIC_INLINE void LL_USART_ConfigIrdaMode(USART_TypeDef *USARTx)
1676 {
1677   /* In IRDA mode, the following bits must be kept cleared:
1678   - LINEN, STOP and CLKEN bits in the USART_CR2 register,
1679   - SCEN and HDSEL bits in the USART_CR3 register.*/
1680   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP));
1681   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL));
1682   /* set the UART/USART in IRDA mode */
1683   SET_BIT(USARTx->CR3, USART_CR3_IREN);
1684 }
1685 
1686 /**
1687   * @brief  Perform basic configuration of USART for enabling use in Multi processor Mode
1688   *         (several USARTs connected in a network, one of the USARTs can be the master,
1689   *         its TX output connected to the RX inputs of the other slaves USARTs).
1690   * @note   In MultiProcessor mode, the following bits must be kept cleared:
1691   *           - LINEN bit in the USART_CR2 register,
1692   *           - CLKEN bit in the USART_CR2 register,
1693   *           - SCEN bit in the USART_CR3 register,
1694   *           - IREN bit in the USART_CR3 register,
1695   *           - HDSEL bit in the USART_CR3 register.
1696   * @note   Call of this function is equivalent to following function call sequence :
1697   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
1698   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
1699   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
1700   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
1701   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
1702   * @note   Other remaining configurations items related to Multi processor Mode
1703   *         (as Baud Rate, Wake Up Method, Node address, ...) should be set using
1704   *         dedicated functions
1705   * @rmtoll CR2          LINEN         LL_USART_ConfigMultiProcessMode\n
1706   *         CR2          CLKEN         LL_USART_ConfigMultiProcessMode\n
1707   *         CR3          SCEN          LL_USART_ConfigMultiProcessMode\n
1708   *         CR3          HDSEL         LL_USART_ConfigMultiProcessMode\n
1709   *         CR3          IREN          LL_USART_ConfigMultiProcessMode
1710   * @param  USARTx USART Instance
1711   * @retval None
1712   */
LL_USART_ConfigMultiProcessMode(USART_TypeDef * USARTx)1713 __STATIC_INLINE void LL_USART_ConfigMultiProcessMode(USART_TypeDef *USARTx)
1714 {
1715   /* In Multi Processor mode, the following bits must be kept cleared:
1716   - LINEN and CLKEN bits in the USART_CR2 register,
1717   - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
1718   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
1719   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
1720 }
1721 
1722 /**
1723   * @}
1724   */
1725 
1726 /** @defgroup USART_LL_EF_FLAG_Management FLAG_Management
1727   * @{
1728   */
1729 
1730 /**
1731   * @brief  Check if the USART Parity Error Flag is set or not
1732   * @rmtoll SR           PE            LL_USART_IsActiveFlag_PE
1733   * @param  USARTx USART Instance
1734   * @retval State of bit (1 or 0).
1735   */
LL_USART_IsActiveFlag_PE(USART_TypeDef * USARTx)1736 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_PE(USART_TypeDef *USARTx)
1737 {
1738   return (READ_BIT(USARTx->SR, USART_SR_PE) == (USART_SR_PE));
1739 }
1740 
1741 /**
1742   * @brief  Check if the USART Framing Error Flag is set or not
1743   * @rmtoll SR           FE            LL_USART_IsActiveFlag_FE
1744   * @param  USARTx USART Instance
1745   * @retval State of bit (1 or 0).
1746   */
LL_USART_IsActiveFlag_FE(USART_TypeDef * USARTx)1747 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_FE(USART_TypeDef *USARTx)
1748 {
1749   return (READ_BIT(USARTx->SR, USART_SR_FE) == (USART_SR_FE));
1750 }
1751 
1752 /**
1753   * @brief  Check if the USART Noise error detected Flag is set or not
1754   * @rmtoll SR           NF            LL_USART_IsActiveFlag_NE
1755   * @param  USARTx USART Instance
1756   * @retval State of bit (1 or 0).
1757   */
LL_USART_IsActiveFlag_NE(USART_TypeDef * USARTx)1758 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_NE(USART_TypeDef *USARTx)
1759 {
1760   return (READ_BIT(USARTx->SR, USART_SR_NE) == (USART_SR_NE));
1761 }
1762 
1763 /**
1764   * @brief  Check if the USART OverRun Error Flag is set or not
1765   * @rmtoll SR           ORE           LL_USART_IsActiveFlag_ORE
1766   * @param  USARTx USART Instance
1767   * @retval State of bit (1 or 0).
1768   */
LL_USART_IsActiveFlag_ORE(USART_TypeDef * USARTx)1769 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ORE(USART_TypeDef *USARTx)
1770 {
1771   return (READ_BIT(USARTx->SR, USART_SR_ORE) == (USART_SR_ORE));
1772 }
1773 
1774 /**
1775   * @brief  Check if the USART IDLE line detected Flag is set or not
1776   * @rmtoll SR           IDLE          LL_USART_IsActiveFlag_IDLE
1777   * @param  USARTx USART Instance
1778   * @retval State of bit (1 or 0).
1779   */
LL_USART_IsActiveFlag_IDLE(USART_TypeDef * USARTx)1780 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_IDLE(USART_TypeDef *USARTx)
1781 {
1782   return (READ_BIT(USARTx->SR, USART_SR_IDLE) == (USART_SR_IDLE));
1783 }
1784 
1785 /**
1786   * @brief  Check if the USART Read Data Register Not Empty Flag is set or not
1787   * @rmtoll SR           RXNE          LL_USART_IsActiveFlag_RXNE
1788   * @param  USARTx USART Instance
1789   * @retval State of bit (1 or 0).
1790   */
LL_USART_IsActiveFlag_RXNE(USART_TypeDef * USARTx)1791 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE(USART_TypeDef *USARTx)
1792 {
1793   return (READ_BIT(USARTx->SR, USART_SR_RXNE) == (USART_SR_RXNE));
1794 }
1795 
1796 /**
1797   * @brief  Check if the USART Transmission Complete Flag is set or not
1798   * @rmtoll SR           TC            LL_USART_IsActiveFlag_TC
1799   * @param  USARTx USART Instance
1800   * @retval State of bit (1 or 0).
1801   */
LL_USART_IsActiveFlag_TC(USART_TypeDef * USARTx)1802 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TC(USART_TypeDef *USARTx)
1803 {
1804   return (READ_BIT(USARTx->SR, USART_SR_TC) == (USART_SR_TC));
1805 }
1806 
1807 /**
1808   * @brief  Check if the USART Transmit Data Register Empty Flag is set or not
1809   * @rmtoll SR           TXE           LL_USART_IsActiveFlag_TXE
1810   * @param  USARTx USART Instance
1811   * @retval State of bit (1 or 0).
1812   */
LL_USART_IsActiveFlag_TXE(USART_TypeDef * USARTx)1813 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXE(USART_TypeDef *USARTx)
1814 {
1815   return (READ_BIT(USARTx->SR, USART_SR_TXE) == (USART_SR_TXE));
1816 }
1817 
1818 /**
1819   * @brief  Check if the USART LIN Break Detection Flag is set or not
1820   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
1821   *         LIN feature is supported by the USARTx instance.
1822   * @rmtoll SR           LBD           LL_USART_IsActiveFlag_LBD
1823   * @param  USARTx USART Instance
1824   * @retval State of bit (1 or 0).
1825   */
LL_USART_IsActiveFlag_LBD(USART_TypeDef * USARTx)1826 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_LBD(USART_TypeDef *USARTx)
1827 {
1828   return (READ_BIT(USARTx->SR, USART_SR_LBD) == (USART_SR_LBD));
1829 }
1830 
1831 /**
1832   * @brief  Check if the USART CTS Flag is set or not
1833   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
1834   *         Hardware Flow control feature is supported by the USARTx instance.
1835   * @rmtoll SR           CTS           LL_USART_IsActiveFlag_nCTS
1836   * @param  USARTx USART Instance
1837   * @retval State of bit (1 or 0).
1838   */
LL_USART_IsActiveFlag_nCTS(USART_TypeDef * USARTx)1839 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_nCTS(USART_TypeDef *USARTx)
1840 {
1841   return (READ_BIT(USARTx->SR, USART_SR_CTS) == (USART_SR_CTS));
1842 }
1843 
1844 /**
1845   * @brief  Check if the USART Send Break Flag is set or not
1846   * @rmtoll CR1          SBK           LL_USART_IsActiveFlag_SBK
1847   * @param  USARTx USART Instance
1848   * @retval State of bit (1 or 0).
1849   */
LL_USART_IsActiveFlag_SBK(USART_TypeDef * USARTx)1850 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_SBK(USART_TypeDef *USARTx)
1851 {
1852   return (READ_BIT(USARTx->CR1, USART_CR1_SBK) == (USART_CR1_SBK));
1853 }
1854 
1855 /**
1856   * @brief  Check if the USART Receive Wake Up from mute mode Flag is set or not
1857   * @rmtoll CR1          RWU           LL_USART_IsActiveFlag_RWU
1858   * @param  USARTx USART Instance
1859   * @retval State of bit (1 or 0).
1860   */
LL_USART_IsActiveFlag_RWU(USART_TypeDef * USARTx)1861 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(USART_TypeDef *USARTx)
1862 {
1863   return (READ_BIT(USARTx->CR1, USART_CR1_RWU) == (USART_CR1_RWU));
1864 }
1865 
1866 /**
1867   * @brief  Clear Parity Error Flag
1868   * @note   Clearing this flag is done by a read access to the USARTx_SR
1869   *         register followed by a read access to the USARTx_DR register.
1870   * @note   Please also consider that when clearing this flag, other flags as
1871   *         NE, FE, ORE, IDLE would also be cleared.
1872   * @rmtoll SR           PE            LL_USART_ClearFlag_PE
1873   * @param  USARTx USART Instance
1874   * @retval None
1875   */
LL_USART_ClearFlag_PE(USART_TypeDef * USARTx)1876 __STATIC_INLINE void LL_USART_ClearFlag_PE(USART_TypeDef *USARTx)
1877 {
1878   __IO uint32_t tmpreg;
1879   tmpreg = USARTx->SR;
1880   (void) tmpreg;
1881   tmpreg = USARTx->DR;
1882   (void) tmpreg;
1883 }
1884 
1885 /**
1886   * @brief  Clear Framing Error Flag
1887   * @note   Clearing this flag is done by a read access to the USARTx_SR
1888   *         register followed by a read access to the USARTx_DR register.
1889   * @note   Please also consider that when clearing this flag, other flags as
1890   *         PE, NE, ORE, IDLE would also be cleared.
1891   * @rmtoll SR           FE            LL_USART_ClearFlag_FE
1892   * @param  USARTx USART Instance
1893   * @retval None
1894   */
LL_USART_ClearFlag_FE(USART_TypeDef * USARTx)1895 __STATIC_INLINE void LL_USART_ClearFlag_FE(USART_TypeDef *USARTx)
1896 {
1897   __IO uint32_t tmpreg;
1898   tmpreg = USARTx->SR;
1899   (void) tmpreg;
1900   tmpreg = USARTx->DR;
1901   (void) tmpreg;
1902 }
1903 
1904 /**
1905   * @brief  Clear Noise detected Flag
1906   * @note   Clearing this flag is done by a read access to the USARTx_SR
1907   *         register followed by a read access to the USARTx_DR register.
1908   * @note   Please also consider that when clearing this flag, other flags as
1909   *         PE, FE, ORE, IDLE would also be cleared.
1910   * @rmtoll SR           NF            LL_USART_ClearFlag_NE
1911   * @param  USARTx USART Instance
1912   * @retval None
1913   */
LL_USART_ClearFlag_NE(USART_TypeDef * USARTx)1914 __STATIC_INLINE void LL_USART_ClearFlag_NE(USART_TypeDef *USARTx)
1915 {
1916   __IO uint32_t tmpreg;
1917   tmpreg = USARTx->SR;
1918   (void) tmpreg;
1919   tmpreg = USARTx->DR;
1920   (void) tmpreg;
1921 }
1922 
1923 /**
1924   * @brief  Clear OverRun Error Flag
1925   * @note   Clearing this flag is done by a read access to the USARTx_SR
1926   *         register followed by a read access to the USARTx_DR register.
1927   * @note   Please also consider that when clearing this flag, other flags as
1928   *         PE, NE, FE, IDLE would also be cleared.
1929   * @rmtoll SR           ORE           LL_USART_ClearFlag_ORE
1930   * @param  USARTx USART Instance
1931   * @retval None
1932   */
LL_USART_ClearFlag_ORE(USART_TypeDef * USARTx)1933 __STATIC_INLINE void LL_USART_ClearFlag_ORE(USART_TypeDef *USARTx)
1934 {
1935   __IO uint32_t tmpreg;
1936   tmpreg = USARTx->SR;
1937   (void) tmpreg;
1938   tmpreg = USARTx->DR;
1939   (void) tmpreg;
1940 }
1941 
1942 /**
1943   * @brief  Clear IDLE line detected Flag
1944   * @note   Clearing this flag is done by a read access to the USARTx_SR
1945   *         register followed by a read access to the USARTx_DR register.
1946   * @note   Please also consider that when clearing this flag, other flags as
1947   *         PE, NE, FE, ORE would also be cleared.
1948   * @rmtoll SR           IDLE          LL_USART_ClearFlag_IDLE
1949   * @param  USARTx USART Instance
1950   * @retval None
1951   */
LL_USART_ClearFlag_IDLE(USART_TypeDef * USARTx)1952 __STATIC_INLINE void LL_USART_ClearFlag_IDLE(USART_TypeDef *USARTx)
1953 {
1954   __IO uint32_t tmpreg;
1955   tmpreg = USARTx->SR;
1956   (void) tmpreg;
1957   tmpreg = USARTx->DR;
1958   (void) tmpreg;
1959 }
1960 
1961 /**
1962   * @brief  Clear Transmission Complete Flag
1963   * @rmtoll SR           TC            LL_USART_ClearFlag_TC
1964   * @param  USARTx USART Instance
1965   * @retval None
1966   */
LL_USART_ClearFlag_TC(USART_TypeDef * USARTx)1967 __STATIC_INLINE void LL_USART_ClearFlag_TC(USART_TypeDef *USARTx)
1968 {
1969   WRITE_REG(USARTx->SR, ~(USART_SR_TC));
1970 }
1971 
1972 /**
1973   * @brief  Clear RX Not Empty Flag
1974   * @rmtoll SR           RXNE          LL_USART_ClearFlag_RXNE
1975   * @param  USARTx USART Instance
1976   * @retval None
1977   */
LL_USART_ClearFlag_RXNE(USART_TypeDef * USARTx)1978 __STATIC_INLINE void LL_USART_ClearFlag_RXNE(USART_TypeDef *USARTx)
1979 {
1980   WRITE_REG(USARTx->SR, ~(USART_SR_RXNE));
1981 }
1982 
1983 /**
1984   * @brief  Clear LIN Break Detection Flag
1985   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
1986   *         LIN feature is supported by the USARTx instance.
1987   * @rmtoll SR           LBD           LL_USART_ClearFlag_LBD
1988   * @param  USARTx USART Instance
1989   * @retval None
1990   */
LL_USART_ClearFlag_LBD(USART_TypeDef * USARTx)1991 __STATIC_INLINE void LL_USART_ClearFlag_LBD(USART_TypeDef *USARTx)
1992 {
1993   WRITE_REG(USARTx->SR, ~(USART_SR_LBD));
1994 }
1995 
1996 /**
1997   * @brief  Clear CTS Interrupt Flag
1998   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
1999   *         Hardware Flow control feature is supported by the USARTx instance.
2000   * @rmtoll SR           CTS           LL_USART_ClearFlag_nCTS
2001   * @param  USARTx USART Instance
2002   * @retval None
2003   */
LL_USART_ClearFlag_nCTS(USART_TypeDef * USARTx)2004 __STATIC_INLINE void LL_USART_ClearFlag_nCTS(USART_TypeDef *USARTx)
2005 {
2006   WRITE_REG(USARTx->SR, ~(USART_SR_CTS));
2007 }
2008 
2009 /**
2010   * @}
2011   */
2012 
2013 /** @defgroup USART_LL_EF_IT_Management IT_Management
2014   * @{
2015   */
2016 
2017 /**
2018   * @brief  Enable IDLE Interrupt
2019   * @rmtoll CR1          IDLEIE        LL_USART_EnableIT_IDLE
2020   * @param  USARTx USART Instance
2021   * @retval None
2022   */
LL_USART_EnableIT_IDLE(USART_TypeDef * USARTx)2023 __STATIC_INLINE void LL_USART_EnableIT_IDLE(USART_TypeDef *USARTx)
2024 {
2025   SET_BIT(USARTx->CR1, USART_CR1_IDLEIE);
2026 }
2027 
2028 /**
2029   * @brief  Enable RX Not Empty Interrupt
2030   * @rmtoll CR1          RXNEIE        LL_USART_EnableIT_RXNE
2031   * @param  USARTx USART Instance
2032   * @retval None
2033   */
LL_USART_EnableIT_RXNE(USART_TypeDef * USARTx)2034 __STATIC_INLINE void LL_USART_EnableIT_RXNE(USART_TypeDef *USARTx)
2035 {
2036   SET_BIT(USARTx->CR1, USART_CR1_RXNEIE);
2037 }
2038 
2039 /**
2040   * @brief  Enable Transmission Complete Interrupt
2041   * @rmtoll CR1          TCIE          LL_USART_EnableIT_TC
2042   * @param  USARTx USART Instance
2043   * @retval None
2044   */
LL_USART_EnableIT_TC(USART_TypeDef * USARTx)2045 __STATIC_INLINE void LL_USART_EnableIT_TC(USART_TypeDef *USARTx)
2046 {
2047   SET_BIT(USARTx->CR1, USART_CR1_TCIE);
2048 }
2049 
2050 /**
2051   * @brief  Enable TX Empty Interrupt
2052   * @rmtoll CR1          TXEIE         LL_USART_EnableIT_TXE
2053   * @param  USARTx USART Instance
2054   * @retval None
2055   */
LL_USART_EnableIT_TXE(USART_TypeDef * USARTx)2056 __STATIC_INLINE void LL_USART_EnableIT_TXE(USART_TypeDef *USARTx)
2057 {
2058   SET_BIT(USARTx->CR1, USART_CR1_TXEIE);
2059 }
2060 
2061 /**
2062   * @brief  Enable Parity Error Interrupt
2063   * @rmtoll CR1          PEIE          LL_USART_EnableIT_PE
2064   * @param  USARTx USART Instance
2065   * @retval None
2066   */
LL_USART_EnableIT_PE(USART_TypeDef * USARTx)2067 __STATIC_INLINE void LL_USART_EnableIT_PE(USART_TypeDef *USARTx)
2068 {
2069   SET_BIT(USARTx->CR1, USART_CR1_PEIE);
2070 }
2071 
2072 /**
2073   * @brief  Enable LIN Break Detection Interrupt
2074   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
2075   *         LIN feature is supported by the USARTx instance.
2076   * @rmtoll CR2          LBDIE         LL_USART_EnableIT_LBD
2077   * @param  USARTx USART Instance
2078   * @retval None
2079   */
LL_USART_EnableIT_LBD(USART_TypeDef * USARTx)2080 __STATIC_INLINE void LL_USART_EnableIT_LBD(USART_TypeDef *USARTx)
2081 {
2082   SET_BIT(USARTx->CR2, USART_CR2_LBDIE);
2083 }
2084 
2085 /**
2086   * @brief  Enable Error Interrupt
2087   * @note   When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing
2088   *         error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_SR register).
2089   *           0: Interrupt is inhibited
2090   *           1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_SR register.
2091   * @rmtoll CR3          EIE           LL_USART_EnableIT_ERROR
2092   * @param  USARTx USART Instance
2093   * @retval None
2094   */
LL_USART_EnableIT_ERROR(USART_TypeDef * USARTx)2095 __STATIC_INLINE void LL_USART_EnableIT_ERROR(USART_TypeDef *USARTx)
2096 {
2097   SET_BIT(USARTx->CR3, USART_CR3_EIE);
2098 }
2099 
2100 /**
2101   * @brief  Enable CTS Interrupt
2102   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
2103   *         Hardware Flow control feature is supported by the USARTx instance.
2104   * @rmtoll CR3          CTSIE         LL_USART_EnableIT_CTS
2105   * @param  USARTx USART Instance
2106   * @retval None
2107   */
LL_USART_EnableIT_CTS(USART_TypeDef * USARTx)2108 __STATIC_INLINE void LL_USART_EnableIT_CTS(USART_TypeDef *USARTx)
2109 {
2110   SET_BIT(USARTx->CR3, USART_CR3_CTSIE);
2111 }
2112 
2113 /**
2114   * @brief  Disable IDLE Interrupt
2115   * @rmtoll CR1          IDLEIE        LL_USART_DisableIT_IDLE
2116   * @param  USARTx USART Instance
2117   * @retval None
2118   */
LL_USART_DisableIT_IDLE(USART_TypeDef * USARTx)2119 __STATIC_INLINE void LL_USART_DisableIT_IDLE(USART_TypeDef *USARTx)
2120 {
2121   CLEAR_BIT(USARTx->CR1, USART_CR1_IDLEIE);
2122 }
2123 
2124 /**
2125   * @brief  Disable RX Not Empty Interrupt
2126   * @rmtoll CR1          RXNEIE        LL_USART_DisableIT_RXNE
2127   * @param  USARTx USART Instance
2128   * @retval None
2129   */
LL_USART_DisableIT_RXNE(USART_TypeDef * USARTx)2130 __STATIC_INLINE void LL_USART_DisableIT_RXNE(USART_TypeDef *USARTx)
2131 {
2132   CLEAR_BIT(USARTx->CR1, USART_CR1_RXNEIE);
2133 }
2134 
2135 /**
2136   * @brief  Disable Transmission Complete Interrupt
2137   * @rmtoll CR1          TCIE          LL_USART_DisableIT_TC
2138   * @param  USARTx USART Instance
2139   * @retval None
2140   */
LL_USART_DisableIT_TC(USART_TypeDef * USARTx)2141 __STATIC_INLINE void LL_USART_DisableIT_TC(USART_TypeDef *USARTx)
2142 {
2143   CLEAR_BIT(USARTx->CR1, USART_CR1_TCIE);
2144 }
2145 
2146 /**
2147   * @brief  Disable TX Empty Interrupt
2148   * @rmtoll CR1          TXEIE         LL_USART_DisableIT_TXE
2149   * @param  USARTx USART Instance
2150   * @retval None
2151   */
LL_USART_DisableIT_TXE(USART_TypeDef * USARTx)2152 __STATIC_INLINE void LL_USART_DisableIT_TXE(USART_TypeDef *USARTx)
2153 {
2154   CLEAR_BIT(USARTx->CR1, USART_CR1_TXEIE);
2155 }
2156 
2157 /**
2158   * @brief  Disable Parity Error Interrupt
2159   * @rmtoll CR1          PEIE          LL_USART_DisableIT_PE
2160   * @param  USARTx USART Instance
2161   * @retval None
2162   */
LL_USART_DisableIT_PE(USART_TypeDef * USARTx)2163 __STATIC_INLINE void LL_USART_DisableIT_PE(USART_TypeDef *USARTx)
2164 {
2165   CLEAR_BIT(USARTx->CR1, USART_CR1_PEIE);
2166 }
2167 
2168 /**
2169   * @brief  Disable LIN Break Detection Interrupt
2170   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
2171   *         LIN feature is supported by the USARTx instance.
2172   * @rmtoll CR2          LBDIE         LL_USART_DisableIT_LBD
2173   * @param  USARTx USART Instance
2174   * @retval None
2175   */
LL_USART_DisableIT_LBD(USART_TypeDef * USARTx)2176 __STATIC_INLINE void LL_USART_DisableIT_LBD(USART_TypeDef *USARTx)
2177 {
2178   CLEAR_BIT(USARTx->CR2, USART_CR2_LBDIE);
2179 }
2180 
2181 /**
2182   * @brief  Disable Error Interrupt
2183   * @note   When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing
2184   *         error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_SR register).
2185   *           0: Interrupt is inhibited
2186   *           1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_SR register.
2187   * @rmtoll CR3          EIE           LL_USART_DisableIT_ERROR
2188   * @param  USARTx USART Instance
2189   * @retval None
2190   */
LL_USART_DisableIT_ERROR(USART_TypeDef * USARTx)2191 __STATIC_INLINE void LL_USART_DisableIT_ERROR(USART_TypeDef *USARTx)
2192 {
2193   CLEAR_BIT(USARTx->CR3, USART_CR3_EIE);
2194 }
2195 
2196 /**
2197   * @brief  Disable CTS Interrupt
2198   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
2199   *         Hardware Flow control feature is supported by the USARTx instance.
2200   * @rmtoll CR3          CTSIE         LL_USART_DisableIT_CTS
2201   * @param  USARTx USART Instance
2202   * @retval None
2203   */
LL_USART_DisableIT_CTS(USART_TypeDef * USARTx)2204 __STATIC_INLINE void LL_USART_DisableIT_CTS(USART_TypeDef *USARTx)
2205 {
2206   CLEAR_BIT(USARTx->CR3, USART_CR3_CTSIE);
2207 }
2208 
2209 /**
2210   * @brief  Check if the USART IDLE Interrupt  source is enabled or disabled.
2211   * @rmtoll CR1          IDLEIE        LL_USART_IsEnabledIT_IDLE
2212   * @param  USARTx USART Instance
2213   * @retval State of bit (1 or 0).
2214   */
LL_USART_IsEnabledIT_IDLE(USART_TypeDef * USARTx)2215 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_IDLE(USART_TypeDef *USARTx)
2216 {
2217   return (READ_BIT(USARTx->CR1, USART_CR1_IDLEIE) == (USART_CR1_IDLEIE));
2218 }
2219 
2220 /**
2221   * @brief  Check if the USART RX Not Empty Interrupt is enabled or disabled.
2222   * @rmtoll CR1          RXNEIE        LL_USART_IsEnabledIT_RXNE
2223   * @param  USARTx USART Instance
2224   * @retval State of bit (1 or 0).
2225   */
LL_USART_IsEnabledIT_RXNE(USART_TypeDef * USARTx)2226 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXNE(USART_TypeDef *USARTx)
2227 {
2228   return (READ_BIT(USARTx->CR1, USART_CR1_RXNEIE) == (USART_CR1_RXNEIE));
2229 }
2230 
2231 /**
2232   * @brief  Check if the USART Transmission Complete Interrupt is enabled or disabled.
2233   * @rmtoll CR1          TCIE          LL_USART_IsEnabledIT_TC
2234   * @param  USARTx USART Instance
2235   * @retval State of bit (1 or 0).
2236   */
LL_USART_IsEnabledIT_TC(USART_TypeDef * USARTx)2237 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TC(USART_TypeDef *USARTx)
2238 {
2239   return (READ_BIT(USARTx->CR1, USART_CR1_TCIE) == (USART_CR1_TCIE));
2240 }
2241 
2242 /**
2243   * @brief  Check if the USART TX Empty Interrupt is enabled or disabled.
2244   * @rmtoll CR1          TXEIE         LL_USART_IsEnabledIT_TXE
2245   * @param  USARTx USART Instance
2246   * @retval State of bit (1 or 0).
2247   */
LL_USART_IsEnabledIT_TXE(USART_TypeDef * USARTx)2248 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXE(USART_TypeDef *USARTx)
2249 {
2250   return (READ_BIT(USARTx->CR1, USART_CR1_TXEIE) == (USART_CR1_TXEIE));
2251 }
2252 
2253 /**
2254   * @brief  Check if the USART Parity Error Interrupt is enabled or disabled.
2255   * @rmtoll CR1          PEIE          LL_USART_IsEnabledIT_PE
2256   * @param  USARTx USART Instance
2257   * @retval State of bit (1 or 0).
2258   */
LL_USART_IsEnabledIT_PE(USART_TypeDef * USARTx)2259 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_PE(USART_TypeDef *USARTx)
2260 {
2261   return (READ_BIT(USARTx->CR1, USART_CR1_PEIE) == (USART_CR1_PEIE));
2262 }
2263 
2264 /**
2265   * @brief  Check if the USART LIN Break Detection Interrupt is enabled or disabled.
2266   * @note   Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
2267   *         LIN feature is supported by the USARTx instance.
2268   * @rmtoll CR2          LBDIE         LL_USART_IsEnabledIT_LBD
2269   * @param  USARTx USART Instance
2270   * @retval State of bit (1 or 0).
2271   */
LL_USART_IsEnabledIT_LBD(USART_TypeDef * USARTx)2272 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_LBD(USART_TypeDef *USARTx)
2273 {
2274   return (READ_BIT(USARTx->CR2, USART_CR2_LBDIE) == (USART_CR2_LBDIE));
2275 }
2276 
2277 /**
2278   * @brief  Check if the USART Error Interrupt is enabled or disabled.
2279   * @rmtoll CR3          EIE           LL_USART_IsEnabledIT_ERROR
2280   * @param  USARTx USART Instance
2281   * @retval State of bit (1 or 0).
2282   */
LL_USART_IsEnabledIT_ERROR(USART_TypeDef * USARTx)2283 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_ERROR(USART_TypeDef *USARTx)
2284 {
2285   return (READ_BIT(USARTx->CR3, USART_CR3_EIE) == (USART_CR3_EIE));
2286 }
2287 
2288 /**
2289   * @brief  Check if the USART CTS Interrupt is enabled or disabled.
2290   * @note   Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
2291   *         Hardware Flow control feature is supported by the USARTx instance.
2292   * @rmtoll CR3          CTSIE         LL_USART_IsEnabledIT_CTS
2293   * @param  USARTx USART Instance
2294   * @retval State of bit (1 or 0).
2295   */
LL_USART_IsEnabledIT_CTS(USART_TypeDef * USARTx)2296 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CTS(USART_TypeDef *USARTx)
2297 {
2298   return (READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE));
2299 }
2300 
2301 /**
2302   * @}
2303   */
2304 
2305 /** @defgroup USART_LL_EF_DMA_Management DMA_Management
2306   * @{
2307   */
2308 
2309 /**
2310   * @brief  Enable DMA Mode for reception
2311   * @rmtoll CR3          DMAR          LL_USART_EnableDMAReq_RX
2312   * @param  USARTx USART Instance
2313   * @retval None
2314   */
LL_USART_EnableDMAReq_RX(USART_TypeDef * USARTx)2315 __STATIC_INLINE void LL_USART_EnableDMAReq_RX(USART_TypeDef *USARTx)
2316 {
2317   SET_BIT(USARTx->CR3, USART_CR3_DMAR);
2318 }
2319 
2320 /**
2321   * @brief  Disable DMA Mode for reception
2322   * @rmtoll CR3          DMAR          LL_USART_DisableDMAReq_RX
2323   * @param  USARTx USART Instance
2324   * @retval None
2325   */
LL_USART_DisableDMAReq_RX(USART_TypeDef * USARTx)2326 __STATIC_INLINE void LL_USART_DisableDMAReq_RX(USART_TypeDef *USARTx)
2327 {
2328   CLEAR_BIT(USARTx->CR3, USART_CR3_DMAR);
2329 }
2330 
2331 /**
2332   * @brief  Check if DMA Mode is enabled for reception
2333   * @rmtoll CR3          DMAR          LL_USART_IsEnabledDMAReq_RX
2334   * @param  USARTx USART Instance
2335   * @retval State of bit (1 or 0).
2336   */
LL_USART_IsEnabledDMAReq_RX(USART_TypeDef * USARTx)2337 __STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_RX(USART_TypeDef *USARTx)
2338 {
2339   return (READ_BIT(USARTx->CR3, USART_CR3_DMAR) == (USART_CR3_DMAR));
2340 }
2341 
2342 /**
2343   * @brief  Enable DMA Mode for transmission
2344   * @rmtoll CR3          DMAT          LL_USART_EnableDMAReq_TX
2345   * @param  USARTx USART Instance
2346   * @retval None
2347   */
LL_USART_EnableDMAReq_TX(USART_TypeDef * USARTx)2348 __STATIC_INLINE void LL_USART_EnableDMAReq_TX(USART_TypeDef *USARTx)
2349 {
2350   SET_BIT(USARTx->CR3, USART_CR3_DMAT);
2351 }
2352 
2353 /**
2354   * @brief  Disable DMA Mode for transmission
2355   * @rmtoll CR3          DMAT          LL_USART_DisableDMAReq_TX
2356   * @param  USARTx USART Instance
2357   * @retval None
2358   */
LL_USART_DisableDMAReq_TX(USART_TypeDef * USARTx)2359 __STATIC_INLINE void LL_USART_DisableDMAReq_TX(USART_TypeDef *USARTx)
2360 {
2361   CLEAR_BIT(USARTx->CR3, USART_CR3_DMAT);
2362 }
2363 
2364 /**
2365   * @brief  Check if DMA Mode is enabled for transmission
2366   * @rmtoll CR3          DMAT          LL_USART_IsEnabledDMAReq_TX
2367   * @param  USARTx USART Instance
2368   * @retval State of bit (1 or 0).
2369   */
LL_USART_IsEnabledDMAReq_TX(USART_TypeDef * USARTx)2370 __STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_TX(USART_TypeDef *USARTx)
2371 {
2372   return (READ_BIT(USARTx->CR3, USART_CR3_DMAT) == (USART_CR3_DMAT));
2373 }
2374 
2375 /**
2376   * @brief  Get the data register address used for DMA transfer
2377   * @rmtoll DR           DR            LL_USART_DMA_GetRegAddr
2378   * @note   Address of Data Register is valid for both Transmit and Receive transfers.
2379   * @param  USARTx USART Instance
2380   * @retval Address of data register
2381   */
LL_USART_DMA_GetRegAddr(USART_TypeDef * USARTx)2382 __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx)
2383 {
2384   /* return address of DR register */
2385   return ((uint32_t) & (USARTx->DR));
2386 }
2387 
2388 /**
2389   * @}
2390   */
2391 
2392 /** @defgroup USART_LL_EF_Data_Management Data_Management
2393   * @{
2394   */
2395 
2396 /**
2397   * @brief  Read Receiver Data register (Receive Data value, 8 bits)
2398   * @rmtoll DR           DR            LL_USART_ReceiveData8
2399   * @param  USARTx USART Instance
2400   * @retval Value between Min_Data=0x00 and Max_Data=0xFF
2401   */
LL_USART_ReceiveData8(USART_TypeDef * USARTx)2402 __STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx)
2403 {
2404   return (uint8_t)(READ_BIT(USARTx->DR, USART_DR_DR));
2405 }
2406 
2407 /**
2408   * @brief  Read Receiver Data register (Receive Data value, 9 bits)
2409   * @rmtoll DR           DR            LL_USART_ReceiveData9
2410   * @param  USARTx USART Instance
2411   * @retval Value between Min_Data=0x00 and Max_Data=0x1FF
2412   */
LL_USART_ReceiveData9(USART_TypeDef * USARTx)2413 __STATIC_INLINE uint16_t LL_USART_ReceiveData9(USART_TypeDef *USARTx)
2414 {
2415   return (uint16_t)(READ_BIT(USARTx->DR, USART_DR_DR));
2416 }
2417 
2418 /**
2419   * @brief  Write in Transmitter Data Register (Transmit Data value, 8 bits)
2420   * @rmtoll DR           DR            LL_USART_TransmitData8
2421   * @param  USARTx USART Instance
2422   * @param  Value between Min_Data=0x00 and Max_Data=0xFF
2423   * @retval None
2424   */
LL_USART_TransmitData8(USART_TypeDef * USARTx,uint8_t Value)2425 __STATIC_INLINE void LL_USART_TransmitData8(USART_TypeDef *USARTx, uint8_t Value)
2426 {
2427   USARTx->DR = Value;
2428 }
2429 
2430 /**
2431   * @brief  Write in Transmitter Data Register (Transmit Data value, 9 bits)
2432   * @rmtoll DR           DR            LL_USART_TransmitData9
2433   * @param  USARTx USART Instance
2434   * @param  Value between Min_Data=0x00 and Max_Data=0x1FF
2435   * @retval None
2436   */
LL_USART_TransmitData9(USART_TypeDef * USARTx,uint16_t Value)2437 __STATIC_INLINE void LL_USART_TransmitData9(USART_TypeDef *USARTx, uint16_t Value)
2438 {
2439   USARTx->DR = Value & 0x1FFU;
2440 }
2441 
2442 /**
2443   * @}
2444   */
2445 
2446 /** @defgroup USART_LL_EF_Execution Execution
2447   * @{
2448   */
2449 
2450 /**
2451   * @brief  Request Break sending
2452   * @rmtoll CR1          SBK           LL_USART_RequestBreakSending
2453   * @param  USARTx USART Instance
2454   * @retval None
2455   */
LL_USART_RequestBreakSending(USART_TypeDef * USARTx)2456 __STATIC_INLINE void LL_USART_RequestBreakSending(USART_TypeDef *USARTx)
2457 {
2458   SET_BIT(USARTx->CR1, USART_CR1_SBK);
2459 }
2460 
2461 /**
2462   * @brief  Put USART in Mute mode
2463   * @rmtoll CR1          RWU           LL_USART_RequestEnterMuteMode
2464   * @param  USARTx USART Instance
2465   * @retval None
2466   */
LL_USART_RequestEnterMuteMode(USART_TypeDef * USARTx)2467 __STATIC_INLINE void LL_USART_RequestEnterMuteMode(USART_TypeDef *USARTx)
2468 {
2469   SET_BIT(USARTx->CR1, USART_CR1_RWU);
2470 }
2471 
2472 /**
2473   * @brief  Put USART in Active mode
2474   * @rmtoll CR1          RWU           LL_USART_RequestExitMuteMode
2475   * @param  USARTx USART Instance
2476   * @retval None
2477   */
LL_USART_RequestExitMuteMode(USART_TypeDef * USARTx)2478 __STATIC_INLINE void LL_USART_RequestExitMuteMode(USART_TypeDef *USARTx)
2479 {
2480   CLEAR_BIT(USARTx->CR1, USART_CR1_RWU);
2481 }
2482 
2483 /**
2484   * @}
2485   */
2486 
2487 #if defined(USE_FULL_LL_DRIVER)
2488 /** @defgroup USART_LL_EF_Init Initialization and de-initialization functions
2489   * @{
2490   */
2491 ErrorStatus LL_USART_DeInit(USART_TypeDef *USARTx);
2492 ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_InitStruct);
2493 void        LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct);
2494 ErrorStatus LL_USART_ClockInit(USART_TypeDef *USARTx, LL_USART_ClockInitTypeDef *USART_ClockInitStruct);
2495 void        LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct);
2496 /**
2497   * @}
2498   */
2499 #endif /* USE_FULL_LL_DRIVER */
2500 
2501 /**
2502   * @}
2503   */
2504 
2505 /**
2506   * @}
2507   */
2508 
2509 #endif /* USART1 || USART2 || USART3 || USART6 || UART4 || UART5 || UART7 || UART8 || UART9 || UART10 */
2510 
2511 /**
2512   * @}
2513   */
2514 
2515 #ifdef __cplusplus
2516 }
2517 #endif
2518 
2519 #endif /* __STM32F4xx_LL_USART_H */
2520 
2521 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
2522