1 /**
2   ******************************************************************************
3   * @file    stm32g0xx_ll_usart.h
4   * @author  MCD Application Team
5   * @brief   Header file of USART LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2018 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32G0xx_LL_USART_H
21 #define STM32G0xx_LL_USART_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32g0xx.h"
29 
30 /** @addtogroup STM32G0xx_LL_Driver
31   * @{
32   */
33 
34 #if defined (USART1) || defined (USART2) || defined (USART3) || defined (USART4) || defined (USART5) || defined (USART6)
35 
36 /** @defgroup USART_LL USART
37   * @{
38   */
39 
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /** @defgroup USART_LL_Private_Variables USART Private Variables
43   * @{
44   */
45 /* Array used to get the USART prescaler division decimal values versus @ref USART_LL_EC_PRESCALER values */
46 static const uint32_t USART_PRESCALER_TAB[] =
47 {
48   1UL,
49   2UL,
50   4UL,
51   6UL,
52   8UL,
53   10UL,
54   12UL,
55   16UL,
56   32UL,
57   64UL,
58   128UL,
59   256UL
60 };
61 /**
62   * @}
63   */
64 
65 /* Private constants ---------------------------------------------------------*/
66 /* Private macros ------------------------------------------------------------*/
67 #if defined(USE_FULL_LL_DRIVER)
68 /** @defgroup USART_LL_Private_Macros USART Private Macros
69   * @{
70   */
71 /**
72   * @}
73   */
74 #endif /*USE_FULL_LL_DRIVER*/
75 
76 /* Exported types ------------------------------------------------------------*/
77 #if defined(USE_FULL_LL_DRIVER)
78 /** @defgroup USART_LL_ES_INIT USART Exported Init structures
79   * @{
80   */
81 
82 /**
83   * @brief LL USART Init Structure definition
84   */
85 typedef struct
86 {
87   uint32_t PrescalerValue;            /*!< Specifies the Prescaler to compute the communication baud rate.
88                                            This parameter can be a value of @ref USART_LL_EC_PRESCALER.
89 
90                                            This feature can be modified afterwards using unitary
91                                            function @ref LL_USART_SetPrescaler().*/
92 
93   uint32_t BaudRate;                  /*!< This field defines expected Usart communication baud rate.
94 
95                                            This feature can be modified afterwards using unitary
96                                            function @ref LL_USART_SetBaudRate().*/
97 
98   uint32_t DataWidth;                 /*!< Specifies the number of data bits transmitted or received in a frame.
99                                            This parameter can be a value of @ref USART_LL_EC_DATAWIDTH.
100 
101                                            This feature can be modified afterwards using unitary
102                                            function @ref LL_USART_SetDataWidth().*/
103 
104   uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.
105                                            This parameter can be a value of @ref USART_LL_EC_STOPBITS.
106 
107                                            This feature can be modified afterwards using unitary
108                                            function @ref LL_USART_SetStopBitsLength().*/
109 
110   uint32_t Parity;                    /*!< Specifies the parity mode.
111                                            This parameter can be a value of @ref USART_LL_EC_PARITY.
112 
113                                            This feature can be modified afterwards using unitary
114                                            function @ref LL_USART_SetParity().*/
115 
116   uint32_t TransferDirection;         /*!< Specifies whether the Receive and/or Transmit mode is enabled or disabled.
117                                            This parameter can be a value of @ref USART_LL_EC_DIRECTION.
118 
119                                            This feature can be modified afterwards using unitary
120                                            function @ref LL_USART_SetTransferDirection().*/
121 
122   uint32_t HardwareFlowControl;       /*!< Specifies whether the hardware flow control mode is enabled or disabled.
123                                            This parameter can be a value of @ref USART_LL_EC_HWCONTROL.
124 
125                                            This feature can be modified afterwards using unitary
126                                            function @ref LL_USART_SetHWFlowCtrl().*/
127 
128   uint32_t OverSampling;              /*!< Specifies whether USART oversampling mode is 16 or 8.
129                                            This parameter can be a value of @ref USART_LL_EC_OVERSAMPLING.
130 
131                                            This feature can be modified afterwards using unitary
132                                            function @ref LL_USART_SetOverSampling().*/
133 
134 } LL_USART_InitTypeDef;
135 
136 /**
137   * @brief LL USART Clock Init Structure definition
138   */
139 typedef struct
140 {
141   uint32_t ClockOutput;               /*!< Specifies whether the USART clock is enabled or disabled.
142                                            This parameter can be a value of @ref USART_LL_EC_CLOCK.
143 
144                                            USART HW configuration can be modified afterwards using unitary functions
145                                            @ref LL_USART_EnableSCLKOutput() or @ref LL_USART_DisableSCLKOutput().
146                                            For more details, refer to description of this function. */
147 
148   uint32_t ClockPolarity;             /*!< Specifies the steady state of the serial clock.
149                                            This parameter can be a value of @ref USART_LL_EC_POLARITY.
150 
151                                            USART HW configuration can be modified afterwards using unitary
152                                            functions @ref LL_USART_SetClockPolarity().
153                                            For more details, refer to description of this function. */
154 
155   uint32_t ClockPhase;                /*!< Specifies the clock transition on which the bit capture is made.
156                                            This parameter can be a value of @ref USART_LL_EC_PHASE.
157 
158                                            USART HW configuration can be modified afterwards using unitary
159                                            functions @ref LL_USART_SetClockPhase().
160                                            For more details, refer to description of this function. */
161 
162   uint32_t LastBitClockPulse;         /*!< Specifies whether the clock pulse corresponding to the last transmitted
163                                            data bit (MSB) has to be output on the SCLK pin in synchronous mode.
164                                            This parameter can be a value of @ref USART_LL_EC_LASTCLKPULSE.
165 
166                                            USART HW configuration can be modified afterwards using unitary
167                                            functions @ref LL_USART_SetLastClkPulseOutput().
168                                            For more details, refer to description of this function. */
169 
170 } LL_USART_ClockInitTypeDef;
171 
172 /**
173   * @}
174   */
175 #endif /* USE_FULL_LL_DRIVER */
176 
177 /* Exported constants --------------------------------------------------------*/
178 /** @defgroup USART_LL_Exported_Constants USART Exported Constants
179   * @{
180   */
181 
182 /** @defgroup USART_LL_EC_CLEAR_FLAG Clear Flags Defines
183   * @brief    Flags defines which can be used with LL_USART_WriteReg function
184   * @{
185   */
186 #define LL_USART_ICR_PECF                       USART_ICR_PECF                /*!< Parity error clear flag */
187 #define LL_USART_ICR_FECF                       USART_ICR_FECF                /*!< Framing error clear flag */
188 #define LL_USART_ICR_NECF                       USART_ICR_NECF                /*!< Noise error detected clear flag */
189 #define LL_USART_ICR_ORECF                      USART_ICR_ORECF               /*!< Overrun error clear flag */
190 #define LL_USART_ICR_IDLECF                     USART_ICR_IDLECF              /*!< Idle line detected clear flag */
191 #define LL_USART_ICR_TXFECF                     USART_ICR_TXFECF              /*!< TX FIFO Empty clear flag */
192 #define LL_USART_ICR_TCCF                       USART_ICR_TCCF                /*!< Transmission complete clear flag */
193 #define LL_USART_ICR_TCBGTCF                    USART_ICR_TCBGTCF             /*!< Transmission completed before guard time clear flag */
194 #define LL_USART_ICR_LBDCF                      USART_ICR_LBDCF               /*!< LIN break detection clear flag */
195 #define LL_USART_ICR_CTSCF                      USART_ICR_CTSCF               /*!< CTS clear flag */
196 #define LL_USART_ICR_RTOCF                      USART_ICR_RTOCF               /*!< Receiver timeout clear flag */
197 #define LL_USART_ICR_EOBCF                      USART_ICR_EOBCF               /*!< End of block clear flag */
198 #define LL_USART_ICR_UDRCF                      USART_ICR_UDRCF               /*!< SPI Slave Underrun clear flag */
199 #define LL_USART_ICR_CMCF                       USART_ICR_CMCF                /*!< Character match clear flag */
200 #define LL_USART_ICR_WUCF                       USART_ICR_WUCF                /*!< Wakeup from Stop mode clear flag */
201 /**
202   * @}
203   */
204 
205 /** @defgroup USART_LL_EC_GET_FLAG Get Flags Defines
206   * @brief    Flags defines which can be used with LL_USART_ReadReg function
207   * @{
208   */
209 #define LL_USART_ISR_PE                         USART_ISR_PE                  /*!< Parity error flag */
210 #define LL_USART_ISR_FE                         USART_ISR_FE                  /*!< Framing error flag */
211 #define LL_USART_ISR_NE                         USART_ISR_NE                  /*!< Noise detected flag */
212 #define LL_USART_ISR_ORE                        USART_ISR_ORE                 /*!< Overrun error flag */
213 #define LL_USART_ISR_IDLE                       USART_ISR_IDLE                /*!< Idle line detected flag */
214 #define LL_USART_ISR_RXNE_RXFNE                 USART_ISR_RXNE_RXFNE          /*!< Read data register or RX FIFO not empty flag */
215 #define LL_USART_ISR_TC                         USART_ISR_TC                  /*!< Transmission complete flag */
216 #define LL_USART_ISR_TXE_TXFNF                  USART_ISR_TXE_TXFNF           /*!< Transmit data register empty or TX FIFO Not Full flag*/
217 #define LL_USART_ISR_LBDF                       USART_ISR_LBDF                /*!< LIN break detection flag */
218 #define LL_USART_ISR_CTSIF                      USART_ISR_CTSIF               /*!< CTS interrupt flag */
219 #define LL_USART_ISR_CTS                        USART_ISR_CTS                 /*!< CTS flag */
220 #define LL_USART_ISR_RTOF                       USART_ISR_RTOF                /*!< Receiver timeout flag */
221 #define LL_USART_ISR_EOBF                       USART_ISR_EOBF                /*!< End of block flag */
222 #define LL_USART_ISR_UDR                        USART_ISR_UDR                 /*!< SPI Slave underrun error flag */
223 #define LL_USART_ISR_ABRE                       USART_ISR_ABRE                /*!< Auto baud rate error flag */
224 #define LL_USART_ISR_ABRF                       USART_ISR_ABRF                /*!< Auto baud rate flag */
225 #define LL_USART_ISR_BUSY                       USART_ISR_BUSY                /*!< Busy flag */
226 #define LL_USART_ISR_CMF                        USART_ISR_CMF                 /*!< Character match flag */
227 #define LL_USART_ISR_SBKF                       USART_ISR_SBKF                /*!< Send break flag */
228 #define LL_USART_ISR_RWU                        USART_ISR_RWU                 /*!< Receiver wakeup from Mute mode flag */
229 #define LL_USART_ISR_WUF                        USART_ISR_WUF                 /*!< Wakeup from Stop mode flag */
230 #define LL_USART_ISR_TEACK                      USART_ISR_TEACK               /*!< Transmit enable acknowledge flag */
231 #define LL_USART_ISR_REACK                      USART_ISR_REACK               /*!< Receive enable acknowledge flag */
232 #define LL_USART_ISR_TXFE                       USART_ISR_TXFE                /*!< TX FIFO empty flag */
233 #define LL_USART_ISR_RXFF                       USART_ISR_RXFF                /*!< RX FIFO full flag */
234 #define LL_USART_ISR_TCBGT                      USART_ISR_TCBGT               /*!< Transmission complete before guard time completion flag */
235 #define LL_USART_ISR_RXFT                       USART_ISR_RXFT                /*!< RX FIFO threshold flag */
236 #define LL_USART_ISR_TXFT                       USART_ISR_TXFT                /*!< TX FIFO threshold flag */
237 /**
238   * @}
239   */
240 
241 /** @defgroup USART_LL_EC_IT IT Defines
242   * @brief    IT defines which can be used with LL_USART_ReadReg and  LL_USART_WriteReg functions
243   * @{
244   */
245 #define LL_USART_CR1_IDLEIE                     USART_CR1_IDLEIE              /*!< IDLE interrupt enable */
246 #define LL_USART_CR1_RXNEIE_RXFNEIE             USART_CR1_RXNEIE_RXFNEIE      /*!< Read data register and RXFIFO not empty interrupt enable */
247 #define LL_USART_CR1_TCIE                       USART_CR1_TCIE                /*!< Transmission complete interrupt enable */
248 #define LL_USART_CR1_TXEIE_TXFNFIE              USART_CR1_TXEIE_TXFNFIE       /*!< Transmit data register empty and TX FIFO not full interrupt enable */
249 #define LL_USART_CR1_PEIE                       USART_CR1_PEIE                /*!< Parity error */
250 #define LL_USART_CR1_CMIE                       USART_CR1_CMIE                /*!< Character match interrupt enable */
251 #define LL_USART_CR1_RTOIE                      USART_CR1_RTOIE               /*!< Receiver timeout interrupt enable */
252 #define LL_USART_CR1_EOBIE                      USART_CR1_EOBIE               /*!< End of Block interrupt enable */
253 #define LL_USART_CR1_TXFEIE                     USART_CR1_TXFEIE              /*!< TX FIFO empty interrupt enable */
254 #define LL_USART_CR1_RXFFIE                     USART_CR1_RXFFIE              /*!< RX FIFO full interrupt enable */
255 #define LL_USART_CR2_LBDIE                      USART_CR2_LBDIE               /*!< LIN break detection interrupt enable */
256 #define LL_USART_CR3_EIE                        USART_CR3_EIE                 /*!< Error interrupt enable */
257 #define LL_USART_CR3_CTSIE                      USART_CR3_CTSIE               /*!< CTS interrupt enable */
258 #define LL_USART_CR3_WUFIE                      USART_CR3_WUFIE               /*!< Wakeup from Stop mode interrupt enable */
259 #define LL_USART_CR3_TXFTIE                     USART_CR3_TXFTIE              /*!< TX FIFO threshold interrupt enable */
260 #define LL_USART_CR3_TCBGTIE                    USART_CR3_TCBGTIE             /*!< Transmission complete before guard time interrupt enable */
261 #define LL_USART_CR3_RXFTIE                     USART_CR3_RXFTIE              /*!< RX FIFO threshold interrupt enable */
262 /**
263   * @}
264   */
265 
266 /** @defgroup USART_LL_EC_FIFOTHRESHOLD FIFO Threshold
267   * @{
268   */
269 #define LL_USART_FIFOTHRESHOLD_1_8              0x00000000U /*!< FIFO reaches 1/8 of its depth */
270 #define LL_USART_FIFOTHRESHOLD_1_4              0x00000001U /*!< FIFO reaches 1/4 of its depth */
271 #define LL_USART_FIFOTHRESHOLD_1_2              0x00000002U /*!< FIFO reaches 1/2 of its depth */
272 #define LL_USART_FIFOTHRESHOLD_3_4              0x00000003U /*!< FIFO reaches 3/4 of its depth */
273 #define LL_USART_FIFOTHRESHOLD_7_8              0x00000004U /*!< FIFO reaches 7/8 of its depth */
274 #define LL_USART_FIFOTHRESHOLD_8_8              0x00000005U /*!< FIFO becomes empty for TX and full for RX */
275 /**
276   * @}
277   */
278 
279 /** @defgroup USART_LL_EC_DIRECTION Communication Direction
280   * @{
281   */
282 #define LL_USART_DIRECTION_NONE                 0x00000000U                        /*!< Transmitter and Receiver are disabled */
283 #define LL_USART_DIRECTION_RX                   USART_CR1_RE                       /*!< Transmitter is disabled and Receiver is enabled */
284 #define LL_USART_DIRECTION_TX                   USART_CR1_TE                       /*!< Transmitter is enabled and Receiver is disabled */
285 #define LL_USART_DIRECTION_TX_RX                (USART_CR1_TE |USART_CR1_RE)       /*!< Transmitter and Receiver are enabled */
286 /**
287   * @}
288   */
289 
290 /** @defgroup USART_LL_EC_PARITY Parity Control
291   * @{
292   */
293 #define LL_USART_PARITY_NONE                    0x00000000U                          /*!< Parity control disabled */
294 #define LL_USART_PARITY_EVEN                    USART_CR1_PCE                        /*!< Parity control enabled and Even Parity is selected */
295 #define LL_USART_PARITY_ODD                     (USART_CR1_PCE | USART_CR1_PS)       /*!< Parity control enabled and Odd Parity is selected */
296 /**
297   * @}
298   */
299 
300 /** @defgroup USART_LL_EC_WAKEUP Wakeup
301   * @{
302   */
303 #define LL_USART_WAKEUP_IDLELINE                0x00000000U           /*!<  USART wake up from Mute mode on Idle Line */
304 #define LL_USART_WAKEUP_ADDRESSMARK             USART_CR1_WAKE        /*!<  USART wake up from Mute mode on Address Mark */
305 /**
306   * @}
307   */
308 
309 /** @defgroup USART_LL_EC_DATAWIDTH Datawidth
310   * @{
311   */
312 #define LL_USART_DATAWIDTH_7B                   USART_CR1_M1            /*!< 7 bits word length : Start bit, 7 data bits, n stop bits */
313 #define LL_USART_DATAWIDTH_8B                   0x00000000U             /*!< 8 bits word length : Start bit, 8 data bits, n stop bits */
314 #define LL_USART_DATAWIDTH_9B                   USART_CR1_M0            /*!< 9 bits word length : Start bit, 9 data bits, n stop bits */
315 /**
316   * @}
317   */
318 
319 /** @defgroup USART_LL_EC_OVERSAMPLING Oversampling
320   * @{
321   */
322 #define LL_USART_OVERSAMPLING_16                0x00000000U            /*!< Oversampling by 16 */
323 #define LL_USART_OVERSAMPLING_8                 USART_CR1_OVER8        /*!< Oversampling by 8 */
324 /**
325   * @}
326   */
327 
328 #if defined(USE_FULL_LL_DRIVER)
329 /** @defgroup USART_LL_EC_CLOCK Clock Signal
330   * @{
331   */
332 
333 #define LL_USART_CLOCK_DISABLE                  0x00000000U            /*!< Clock signal not provided */
334 #define LL_USART_CLOCK_ENABLE                   USART_CR2_CLKEN        /*!< Clock signal provided */
335 /**
336   * @}
337   */
338 #endif /*USE_FULL_LL_DRIVER*/
339 
340 /** @defgroup USART_LL_EC_LASTCLKPULSE Last Clock Pulse
341   * @{
342   */
343 #define LL_USART_LASTCLKPULSE_NO_OUTPUT         0x00000000U           /*!< The clock pulse of the last data bit is not output to the SCLK pin */
344 #define LL_USART_LASTCLKPULSE_OUTPUT            USART_CR2_LBCL        /*!< The clock pulse of the last data bit is output to the SCLK pin */
345 /**
346   * @}
347   */
348 
349 /** @defgroup USART_LL_EC_PHASE Clock Phase
350   * @{
351   */
352 #define LL_USART_PHASE_1EDGE                    0x00000000U           /*!< The first clock transition is the first data capture edge */
353 #define LL_USART_PHASE_2EDGE                    USART_CR2_CPHA        /*!< The second clock transition is the first data capture edge */
354 /**
355   * @}
356   */
357 
358 /** @defgroup USART_LL_EC_POLARITY Clock Polarity
359   * @{
360   */
361 #define LL_USART_POLARITY_LOW                   0x00000000U           /*!< Steady low value on SCLK pin outside transmission window*/
362 #define LL_USART_POLARITY_HIGH                  USART_CR2_CPOL        /*!< Steady high value on SCLK pin outside transmission window */
363 /**
364   * @}
365   */
366 
367 /** @defgroup USART_LL_EC_PRESCALER Clock Source Prescaler
368   * @{
369   */
370 #define LL_USART_PRESCALER_DIV1                 0x00000000U                                                                   /*!< Input clock not divided   */
371 #define LL_USART_PRESCALER_DIV2                 (USART_PRESC_PRESCALER_0)                                                     /*!< Input clock divided by 2  */
372 #define LL_USART_PRESCALER_DIV4                 (USART_PRESC_PRESCALER_1)                                                     /*!< Input clock divided by 4  */
373 #define LL_USART_PRESCALER_DIV6                 (USART_PRESC_PRESCALER_1 | USART_PRESC_PRESCALER_0)                           /*!< Input clock divided by 6  */
374 #define LL_USART_PRESCALER_DIV8                 (USART_PRESC_PRESCALER_2)                                                     /*!< Input clock divided by 8  */
375 #define LL_USART_PRESCALER_DIV10                (USART_PRESC_PRESCALER_2 | USART_PRESC_PRESCALER_0)                           /*!< Input clock divided by 10 */
376 #define LL_USART_PRESCALER_DIV12                (USART_PRESC_PRESCALER_2 | USART_PRESC_PRESCALER_1)                           /*!< Input clock divided by 12 */
377 #define LL_USART_PRESCALER_DIV16                (USART_PRESC_PRESCALER_2 | USART_PRESC_PRESCALER_1 | USART_PRESC_PRESCALER_0) /*!< Input clock divided by 16 */
378 #define LL_USART_PRESCALER_DIV32                (USART_PRESC_PRESCALER_3)                                                     /*!< Input clock divided by 32 */
379 #define LL_USART_PRESCALER_DIV64                (USART_PRESC_PRESCALER_3 | USART_PRESC_PRESCALER_0)                           /*!< Input clock divided by 64 */
380 #define LL_USART_PRESCALER_DIV128               (USART_PRESC_PRESCALER_3 | USART_PRESC_PRESCALER_1)                           /*!< Input clock divided by 128 */
381 #define LL_USART_PRESCALER_DIV256               (USART_PRESC_PRESCALER_3 | USART_PRESC_PRESCALER_1 | USART_PRESC_PRESCALER_0) /*!< Input clock divided by 256 */
382 /**
383   * @}
384   */
385 
386 /** @defgroup USART_LL_EC_STOPBITS Stop Bits
387   * @{
388   */
389 #define LL_USART_STOPBITS_0_5                   USART_CR2_STOP_0                           /*!< 0.5 stop bit */
390 #define LL_USART_STOPBITS_1                     0x00000000U                                /*!< 1 stop bit */
391 #define LL_USART_STOPBITS_1_5                   (USART_CR2_STOP_0 | USART_CR2_STOP_1)      /*!< 1.5 stop bits */
392 #define LL_USART_STOPBITS_2                     USART_CR2_STOP_1                           /*!< 2 stop bits */
393 /**
394   * @}
395   */
396 
397 /** @defgroup USART_LL_EC_TXRX TX RX Pins Swap
398   * @{
399   */
400 #define LL_USART_TXRX_STANDARD                  0x00000000U           /*!< TX/RX pins are used as defined in standard pinout */
401 #define LL_USART_TXRX_SWAPPED                   (USART_CR2_SWAP)      /*!< TX and RX pins functions are swapped.             */
402 /**
403   * @}
404   */
405 
406 /** @defgroup USART_LL_EC_RXPIN_LEVEL RX Pin Active Level Inversion
407   * @{
408   */
409 #define LL_USART_RXPIN_LEVEL_STANDARD           0x00000000U           /*!< RX pin signal works using the standard logic levels */
410 #define LL_USART_RXPIN_LEVEL_INVERTED           (USART_CR2_RXINV)     /*!< RX pin signal values are inverted.                  */
411 /**
412   * @}
413   */
414 
415 /** @defgroup USART_LL_EC_TXPIN_LEVEL TX Pin Active Level Inversion
416   * @{
417   */
418 #define LL_USART_TXPIN_LEVEL_STANDARD           0x00000000U           /*!< TX pin signal works using the standard logic levels */
419 #define LL_USART_TXPIN_LEVEL_INVERTED           (USART_CR2_TXINV)     /*!< TX pin signal values are inverted.                  */
420 /**
421   * @}
422   */
423 
424 /** @defgroup USART_LL_EC_BINARY_LOGIC Binary Data Inversion
425   * @{
426   */
427 #define LL_USART_BINARY_LOGIC_POSITIVE          0x00000000U           /*!< Logical data from the data register are send/received in positive/direct logic. (1=H, 0=L) */
428 #define LL_USART_BINARY_LOGIC_NEGATIVE          USART_CR2_DATAINV     /*!< Logical data from the data register are send/received in negative/inverse logic. (1=L, 0=H). The parity bit is also inverted. */
429 /**
430   * @}
431   */
432 
433 /** @defgroup USART_LL_EC_BITORDER Bit Order
434   * @{
435   */
436 #define LL_USART_BITORDER_LSBFIRST              0x00000000U           /*!< data is transmitted/received with data bit 0 first, following the start bit */
437 #define LL_USART_BITORDER_MSBFIRST              USART_CR2_MSBFIRST    /*!< data is transmitted/received with the MSB first, following the start bit */
438 /**
439   * @}
440   */
441 
442 /** @defgroup USART_LL_EC_AUTOBAUD_DETECT_ON Autobaud Detection
443   * @{
444   */
445 #define LL_USART_AUTOBAUD_DETECT_ON_STARTBIT    0x00000000U                                 /*!< Measurement of the start bit is used to detect the baud rate */
446 #define LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE USART_CR2_ABRMODE_0                         /*!< Falling edge to falling edge measurement. Received frame must start with a single bit = 1 -> Frame = Start10xxxxxx */
447 #define LL_USART_AUTOBAUD_DETECT_ON_7F_FRAME    USART_CR2_ABRMODE_1                         /*!< 0x7F frame detection */
448 #define LL_USART_AUTOBAUD_DETECT_ON_55_FRAME    (USART_CR2_ABRMODE_1 | USART_CR2_ABRMODE_0) /*!< 0x55 frame detection */
449 /**
450   * @}
451   */
452 
453 /** @defgroup USART_LL_EC_ADDRESS_DETECT Address Length Detection
454   * @{
455   */
456 #define LL_USART_ADDRESS_DETECT_4B              0x00000000U           /*!< 4-bit address detection method selected */
457 #define LL_USART_ADDRESS_DETECT_7B              USART_CR2_ADDM7       /*!< 7-bit address detection (in 8-bit data mode) method selected */
458 /**
459   * @}
460   */
461 
462 /** @defgroup USART_LL_EC_HWCONTROL Hardware Control
463   * @{
464   */
465 #define LL_USART_HWCONTROL_NONE                 0x00000000U                          /*!< CTS and RTS hardware flow control disabled */
466 #define LL_USART_HWCONTROL_RTS                  USART_CR3_RTSE                       /*!< RTS output enabled, data is only requested when there is space in the receive buffer */
467 #define LL_USART_HWCONTROL_CTS                  USART_CR3_CTSE                       /*!< CTS mode enabled, data is only transmitted when the nCTS input is asserted (tied to 0) */
468 #define LL_USART_HWCONTROL_RTS_CTS              (USART_CR3_RTSE | USART_CR3_CTSE)    /*!< CTS and RTS hardware flow control enabled */
469 /**
470   * @}
471   */
472 
473 /** @defgroup USART_LL_EC_WAKEUP_ON Wakeup Activation
474   * @{
475   */
476 #define LL_USART_WAKEUP_ON_ADDRESS              0x00000000U                             /*!< Wake up active on address match */
477 #define LL_USART_WAKEUP_ON_STARTBIT             USART_CR3_WUS_1                         /*!< Wake up active on Start bit detection */
478 #define LL_USART_WAKEUP_ON_RXNE                 (USART_CR3_WUS_0 | USART_CR3_WUS_1)     /*!< Wake up active on RXNE */
479 /**
480   * @}
481   */
482 
483 /** @defgroup USART_LL_EC_IRDA_POWER IrDA Power
484   * @{
485   */
486 #define LL_USART_IRDA_POWER_NORMAL              0x00000000U           /*!< IrDA normal power mode */
487 #define LL_USART_IRDA_POWER_LOW                 USART_CR3_IRLP        /*!< IrDA low power mode */
488 /**
489   * @}
490   */
491 
492 /** @defgroup USART_LL_EC_LINBREAK_DETECT LIN Break Detection Length
493   * @{
494   */
495 #define LL_USART_LINBREAK_DETECT_10B            0x00000000U           /*!< 10-bit break detection method selected */
496 #define LL_USART_LINBREAK_DETECT_11B            USART_CR2_LBDL        /*!< 11-bit break detection method selected */
497 /**
498   * @}
499   */
500 
501 /** @defgroup USART_LL_EC_DE_POLARITY Driver Enable Polarity
502   * @{
503   */
504 #define LL_USART_DE_POLARITY_HIGH               0x00000000U           /*!< DE signal is active high */
505 #define LL_USART_DE_POLARITY_LOW                USART_CR3_DEP         /*!< DE signal is active low */
506 /**
507   * @}
508   */
509 
510 /** @defgroup USART_LL_EC_DMA_REG_DATA DMA Register Data
511   * @{
512   */
513 #define LL_USART_DMA_REG_DATA_TRANSMIT          0x00000000U          /*!< Get address of data register used for transmission */
514 #define LL_USART_DMA_REG_DATA_RECEIVE           0x00000001U          /*!< Get address of data register used for reception */
515 /**
516   * @}
517   */
518 
519 /**
520   * @}
521   */
522 
523 /* Exported macro ------------------------------------------------------------*/
524 /** @defgroup USART_LL_Exported_Macros USART Exported Macros
525   * @{
526   */
527 
528 /** @defgroup USART_LL_EM_WRITE_READ Common Write and read registers Macros
529   * @{
530   */
531 
532 /**
533   * @brief  Write a value in USART register
534   * @param  __INSTANCE__ USART Instance
535   * @param  __REG__ Register to be written
536   * @param  __VALUE__ Value to be written in the register
537   * @retval None
538   */
539 #define LL_USART_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
540 
541 /**
542   * @brief  Read a value in USART register
543   * @param  __INSTANCE__ USART Instance
544   * @param  __REG__ Register to be read
545   * @retval Register value
546   */
547 #define LL_USART_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
548 /**
549   * @}
550   */
551 
552 /** @defgroup USART_LL_EM_Exported_Macros_Helper Exported_Macros_Helper
553   * @{
554   */
555 
556 /**
557   * @brief  Compute USARTDIV value according to Peripheral Clock and
558   *         expected Baud Rate in 8 bits sampling mode (32 bits value of USARTDIV is returned)
559   * @param  __PERIPHCLK__ Peripheral Clock frequency used for USART instance
560   * @param  __PRESCALER__ This parameter can be one of the following values:
561   *         @arg @ref LL_USART_PRESCALER_DIV1
562   *         @arg @ref LL_USART_PRESCALER_DIV2
563   *         @arg @ref LL_USART_PRESCALER_DIV4
564   *         @arg @ref LL_USART_PRESCALER_DIV6
565   *         @arg @ref LL_USART_PRESCALER_DIV8
566   *         @arg @ref LL_USART_PRESCALER_DIV10
567   *         @arg @ref LL_USART_PRESCALER_DIV12
568   *         @arg @ref LL_USART_PRESCALER_DIV16
569   *         @arg @ref LL_USART_PRESCALER_DIV32
570   *         @arg @ref LL_USART_PRESCALER_DIV64
571   *         @arg @ref LL_USART_PRESCALER_DIV128
572   *         @arg @ref LL_USART_PRESCALER_DIV256
573   * @param  __BAUDRATE__ Baud rate value to achieve
574   * @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case
575   */
576 #define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __PRESCALER__, __BAUDRATE__) \
577   (((((__PERIPHCLK__)/(USART_PRESCALER_TAB[(__PRESCALER__)]))*2U)\
578     + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
579 
580 /**
581   * @brief  Compute USARTDIV value according to Peripheral Clock and
582   *         expected Baud Rate in 16 bits sampling mode (32 bits value of USARTDIV is returned)
583   * @param  __PERIPHCLK__ Peripheral Clock frequency used for USART instance
584   * @param  __PRESCALER__ This parameter can be one of the following values:
585   *         @arg @ref LL_USART_PRESCALER_DIV1
586   *         @arg @ref LL_USART_PRESCALER_DIV2
587   *         @arg @ref LL_USART_PRESCALER_DIV4
588   *         @arg @ref LL_USART_PRESCALER_DIV6
589   *         @arg @ref LL_USART_PRESCALER_DIV8
590   *         @arg @ref LL_USART_PRESCALER_DIV10
591   *         @arg @ref LL_USART_PRESCALER_DIV12
592   *         @arg @ref LL_USART_PRESCALER_DIV16
593   *         @arg @ref LL_USART_PRESCALER_DIV32
594   *         @arg @ref LL_USART_PRESCALER_DIV64
595   *         @arg @ref LL_USART_PRESCALER_DIV128
596   *         @arg @ref LL_USART_PRESCALER_DIV256
597   * @param  __BAUDRATE__ Baud rate value to achieve
598   * @retval USARTDIV value to be used for BRR register filling in OverSampling_16 case
599   */
600 #define __LL_USART_DIV_SAMPLING16(__PERIPHCLK__, __PRESCALER__, __BAUDRATE__) \
601   ((((__PERIPHCLK__)/(USART_PRESCALER_TAB[(__PRESCALER__)]))\
602     + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
603 
604 /**
605   * @}
606   */
607 
608 /**
609   * @}
610   */
611 
612 /* Exported functions --------------------------------------------------------*/
613 
614 /** @defgroup USART_LL_Exported_Functions USART Exported Functions
615   * @{
616   */
617 
618 /** @defgroup USART_LL_EF_Configuration Configuration functions
619   * @{
620   */
621 
622 /**
623   * @brief  USART Enable
624   * @rmtoll CR1          UE            LL_USART_Enable
625   * @param  USARTx USART Instance
626   * @retval None
627   */
LL_USART_Enable(USART_TypeDef * USARTx)628 __STATIC_INLINE void LL_USART_Enable(USART_TypeDef *USARTx)
629 {
630   SET_BIT(USARTx->CR1, USART_CR1_UE);
631 }
632 
633 /**
634   * @brief  USART Disable (all USART prescalers and outputs are disabled)
635   * @note   When USART is disabled, USART prescalers and outputs are stopped immediately,
636   *         and current operations are discarded. The configuration of the USART is kept, but all the status
637   *         flags, in the USARTx_ISR are set to their default values.
638   * @rmtoll CR1          UE            LL_USART_Disable
639   * @param  USARTx USART Instance
640   * @retval None
641   */
LL_USART_Disable(USART_TypeDef * USARTx)642 __STATIC_INLINE void LL_USART_Disable(USART_TypeDef *USARTx)
643 {
644   CLEAR_BIT(USARTx->CR1, USART_CR1_UE);
645 }
646 
647 /**
648   * @brief  Indicate if USART is enabled
649   * @rmtoll CR1          UE            LL_USART_IsEnabled
650   * @param  USARTx USART Instance
651   * @retval State of bit (1 or 0).
652   */
LL_USART_IsEnabled(const USART_TypeDef * USARTx)653 __STATIC_INLINE uint32_t LL_USART_IsEnabled(const USART_TypeDef *USARTx)
654 {
655   return ((READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)) ? 1UL : 0UL);
656 }
657 
658 /**
659   * @brief  FIFO Mode Enable
660   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
661   *         FIFO mode feature is supported by the USARTx instance.
662   * @rmtoll CR1          FIFOEN        LL_USART_EnableFIFO
663   * @param  USARTx USART Instance
664   * @retval None
665   */
LL_USART_EnableFIFO(USART_TypeDef * USARTx)666 __STATIC_INLINE void LL_USART_EnableFIFO(USART_TypeDef *USARTx)
667 {
668   SET_BIT(USARTx->CR1, USART_CR1_FIFOEN);
669 }
670 
671 /**
672   * @brief  FIFO Mode Disable
673   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
674   *         FIFO mode feature is supported by the USARTx instance.
675   * @rmtoll CR1          FIFOEN        LL_USART_DisableFIFO
676   * @param  USARTx USART Instance
677   * @retval None
678   */
LL_USART_DisableFIFO(USART_TypeDef * USARTx)679 __STATIC_INLINE void LL_USART_DisableFIFO(USART_TypeDef *USARTx)
680 {
681   CLEAR_BIT(USARTx->CR1, USART_CR1_FIFOEN);
682 }
683 
684 /**
685   * @brief  Indicate if FIFO Mode is enabled
686   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
687   *         FIFO mode feature is supported by the USARTx instance.
688   * @rmtoll CR1          FIFOEN        LL_USART_IsEnabledFIFO
689   * @param  USARTx USART Instance
690   * @retval State of bit (1 or 0).
691   */
LL_USART_IsEnabledFIFO(const USART_TypeDef * USARTx)692 __STATIC_INLINE uint32_t LL_USART_IsEnabledFIFO(const USART_TypeDef *USARTx)
693 {
694   return ((READ_BIT(USARTx->CR1, USART_CR1_FIFOEN) == (USART_CR1_FIFOEN)) ? 1UL : 0UL);
695 }
696 
697 /**
698   * @brief  Configure TX FIFO Threshold
699   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
700   *         FIFO mode feature is supported by the USARTx instance.
701   * @rmtoll CR3          TXFTCFG       LL_USART_SetTXFIFOThreshold
702   * @param  USARTx USART Instance
703   * @param  Threshold This parameter can be one of the following values:
704   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_8
705   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_4
706   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_2
707   *         @arg @ref LL_USART_FIFOTHRESHOLD_3_4
708   *         @arg @ref LL_USART_FIFOTHRESHOLD_7_8
709   *         @arg @ref LL_USART_FIFOTHRESHOLD_8_8
710   * @retval None
711   */
LL_USART_SetTXFIFOThreshold(USART_TypeDef * USARTx,uint32_t Threshold)712 __STATIC_INLINE void LL_USART_SetTXFIFOThreshold(USART_TypeDef *USARTx, uint32_t Threshold)
713 {
714   ATOMIC_MODIFY_REG(USARTx->CR3, USART_CR3_TXFTCFG, Threshold << USART_CR3_TXFTCFG_Pos);
715 }
716 
717 /**
718   * @brief  Return TX FIFO Threshold Configuration
719   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
720   *         FIFO mode feature is supported by the USARTx instance.
721   * @rmtoll CR3          TXFTCFG       LL_USART_GetTXFIFOThreshold
722   * @param  USARTx USART Instance
723   * @retval Returned value can be one of the following values:
724   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_8
725   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_4
726   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_2
727   *         @arg @ref LL_USART_FIFOTHRESHOLD_3_4
728   *         @arg @ref LL_USART_FIFOTHRESHOLD_7_8
729   *         @arg @ref LL_USART_FIFOTHRESHOLD_8_8
730   */
LL_USART_GetTXFIFOThreshold(const USART_TypeDef * USARTx)731 __STATIC_INLINE uint32_t LL_USART_GetTXFIFOThreshold(const USART_TypeDef *USARTx)
732 {
733   return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos);
734 }
735 
736 /**
737   * @brief  Configure RX FIFO Threshold
738   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
739   *         FIFO mode feature is supported by the USARTx instance.
740   * @rmtoll CR3          RXFTCFG       LL_USART_SetRXFIFOThreshold
741   * @param  USARTx USART Instance
742   * @param  Threshold This parameter can be one of the following values:
743   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_8
744   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_4
745   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_2
746   *         @arg @ref LL_USART_FIFOTHRESHOLD_3_4
747   *         @arg @ref LL_USART_FIFOTHRESHOLD_7_8
748   *         @arg @ref LL_USART_FIFOTHRESHOLD_8_8
749   * @retval None
750   */
LL_USART_SetRXFIFOThreshold(USART_TypeDef * USARTx,uint32_t Threshold)751 __STATIC_INLINE void LL_USART_SetRXFIFOThreshold(USART_TypeDef *USARTx, uint32_t Threshold)
752 {
753   ATOMIC_MODIFY_REG(USARTx->CR3, USART_CR3_RXFTCFG, Threshold << USART_CR3_RXFTCFG_Pos);
754 }
755 
756 /**
757   * @brief  Return RX FIFO Threshold Configuration
758   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
759   *         FIFO mode feature is supported by the USARTx instance.
760   * @rmtoll CR3          RXFTCFG       LL_USART_GetRXFIFOThreshold
761   * @param  USARTx USART Instance
762   * @retval Returned value can be one of the following values:
763   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_8
764   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_4
765   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_2
766   *         @arg @ref LL_USART_FIFOTHRESHOLD_3_4
767   *         @arg @ref LL_USART_FIFOTHRESHOLD_7_8
768   *         @arg @ref LL_USART_FIFOTHRESHOLD_8_8
769   */
LL_USART_GetRXFIFOThreshold(const USART_TypeDef * USARTx)770 __STATIC_INLINE uint32_t LL_USART_GetRXFIFOThreshold(const USART_TypeDef *USARTx)
771 {
772   return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos);
773 }
774 
775 /**
776   * @brief  Configure TX and RX FIFOs Threshold
777   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
778   *         FIFO mode feature is supported by the USARTx instance.
779   * @rmtoll CR3          TXFTCFG       LL_USART_ConfigFIFOsThreshold\n
780   *         CR3          RXFTCFG       LL_USART_ConfigFIFOsThreshold
781   * @param  USARTx USART Instance
782   * @param  TXThreshold This parameter can be one of the following values:
783   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_8
784   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_4
785   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_2
786   *         @arg @ref LL_USART_FIFOTHRESHOLD_3_4
787   *         @arg @ref LL_USART_FIFOTHRESHOLD_7_8
788   *         @arg @ref LL_USART_FIFOTHRESHOLD_8_8
789   * @param  RXThreshold This parameter can be one of the following values:
790   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_8
791   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_4
792   *         @arg @ref LL_USART_FIFOTHRESHOLD_1_2
793   *         @arg @ref LL_USART_FIFOTHRESHOLD_3_4
794   *         @arg @ref LL_USART_FIFOTHRESHOLD_7_8
795   *         @arg @ref LL_USART_FIFOTHRESHOLD_8_8
796   * @retval None
797   */
LL_USART_ConfigFIFOsThreshold(USART_TypeDef * USARTx,uint32_t TXThreshold,uint32_t RXThreshold)798 __STATIC_INLINE void LL_USART_ConfigFIFOsThreshold(USART_TypeDef *USARTx, uint32_t TXThreshold, uint32_t RXThreshold)
799 {
800   ATOMIC_MODIFY_REG(USARTx->CR3, USART_CR3_TXFTCFG | USART_CR3_RXFTCFG, (TXThreshold << USART_CR3_TXFTCFG_Pos) |
801                     (RXThreshold << USART_CR3_RXFTCFG_Pos));
802 }
803 
804 /**
805   * @brief  USART enabled in STOP Mode.
806   * @note   When this function is enabled, USART is able to wake up the MCU from Stop mode, provided that
807   *         USART clock selection is HSI or LSE in RCC.
808   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
809   *         Wake-up from Stop mode feature is supported by the USARTx instance.
810   * @rmtoll CR1          UESM          LL_USART_EnableInStopMode
811   * @param  USARTx USART Instance
812   * @retval None
813   */
LL_USART_EnableInStopMode(USART_TypeDef * USARTx)814 __STATIC_INLINE void LL_USART_EnableInStopMode(USART_TypeDef *USARTx)
815 {
816   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_UESM);
817 }
818 
819 /**
820   * @brief  USART disabled in STOP Mode.
821   * @note   When this function is disabled, USART is not able to wake up the MCU from Stop mode
822   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
823   *         Wake-up from Stop mode feature is supported by the USARTx instance.
824   * @rmtoll CR1          UESM          LL_USART_DisableInStopMode
825   * @param  USARTx USART Instance
826   * @retval None
827   */
LL_USART_DisableInStopMode(USART_TypeDef * USARTx)828 __STATIC_INLINE void LL_USART_DisableInStopMode(USART_TypeDef *USARTx)
829 {
830   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_UESM);
831 }
832 
833 /**
834   * @brief  Indicate if USART is enabled in STOP Mode (able to wake up MCU from Stop mode or not)
835   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
836   *         Wake-up from Stop mode feature is supported by the USARTx instance.
837   * @rmtoll CR1          UESM          LL_USART_IsEnabledInStopMode
838   * @param  USARTx USART Instance
839   * @retval State of bit (1 or 0).
840   */
LL_USART_IsEnabledInStopMode(const USART_TypeDef * USARTx)841 __STATIC_INLINE uint32_t LL_USART_IsEnabledInStopMode(const USART_TypeDef *USARTx)
842 {
843   return ((READ_BIT(USARTx->CR1, USART_CR1_UESM) == (USART_CR1_UESM)) ? 1UL : 0UL);
844 }
845 
846 /**
847   * @brief  Receiver Enable (Receiver is enabled and begins searching for a start bit)
848   * @rmtoll CR1          RE            LL_USART_EnableDirectionRx
849   * @param  USARTx USART Instance
850   * @retval None
851   */
LL_USART_EnableDirectionRx(USART_TypeDef * USARTx)852 __STATIC_INLINE void LL_USART_EnableDirectionRx(USART_TypeDef *USARTx)
853 {
854   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RE);
855 }
856 
857 /**
858   * @brief  Receiver Disable
859   * @rmtoll CR1          RE            LL_USART_DisableDirectionRx
860   * @param  USARTx USART Instance
861   * @retval None
862   */
LL_USART_DisableDirectionRx(USART_TypeDef * USARTx)863 __STATIC_INLINE void LL_USART_DisableDirectionRx(USART_TypeDef *USARTx)
864 {
865   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RE);
866 }
867 
868 /**
869   * @brief  Transmitter Enable
870   * @rmtoll CR1          TE            LL_USART_EnableDirectionTx
871   * @param  USARTx USART Instance
872   * @retval None
873   */
LL_USART_EnableDirectionTx(USART_TypeDef * USARTx)874 __STATIC_INLINE void LL_USART_EnableDirectionTx(USART_TypeDef *USARTx)
875 {
876   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TE);
877 }
878 
879 /**
880   * @brief  Transmitter Disable
881   * @rmtoll CR1          TE            LL_USART_DisableDirectionTx
882   * @param  USARTx USART Instance
883   * @retval None
884   */
LL_USART_DisableDirectionTx(USART_TypeDef * USARTx)885 __STATIC_INLINE void LL_USART_DisableDirectionTx(USART_TypeDef *USARTx)
886 {
887   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TE);
888 }
889 
890 /**
891   * @brief  Configure simultaneously enabled/disabled states
892   *         of Transmitter and Receiver
893   * @rmtoll CR1          RE            LL_USART_SetTransferDirection\n
894   *         CR1          TE            LL_USART_SetTransferDirection
895   * @param  USARTx USART Instance
896   * @param  TransferDirection This parameter can be one of the following values:
897   *         @arg @ref LL_USART_DIRECTION_NONE
898   *         @arg @ref LL_USART_DIRECTION_RX
899   *         @arg @ref LL_USART_DIRECTION_TX
900   *         @arg @ref LL_USART_DIRECTION_TX_RX
901   * @retval None
902   */
LL_USART_SetTransferDirection(USART_TypeDef * USARTx,uint32_t TransferDirection)903 __STATIC_INLINE void LL_USART_SetTransferDirection(USART_TypeDef *USARTx, uint32_t TransferDirection)
904 {
905   ATOMIC_MODIFY_REG(USARTx->CR1, USART_CR1_RE | USART_CR1_TE, TransferDirection);
906 }
907 
908 /**
909   * @brief  Return enabled/disabled states of Transmitter and Receiver
910   * @rmtoll CR1          RE            LL_USART_GetTransferDirection\n
911   *         CR1          TE            LL_USART_GetTransferDirection
912   * @param  USARTx USART Instance
913   * @retval Returned value can be one of the following values:
914   *         @arg @ref LL_USART_DIRECTION_NONE
915   *         @arg @ref LL_USART_DIRECTION_RX
916   *         @arg @ref LL_USART_DIRECTION_TX
917   *         @arg @ref LL_USART_DIRECTION_TX_RX
918   */
LL_USART_GetTransferDirection(const USART_TypeDef * USARTx)919 __STATIC_INLINE uint32_t LL_USART_GetTransferDirection(const USART_TypeDef *USARTx)
920 {
921   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_RE | USART_CR1_TE));
922 }
923 
924 /**
925   * @brief  Configure Parity (enabled/disabled and parity mode if enabled).
926   * @note   This function selects if hardware parity control (generation and detection) is enabled or disabled.
927   *         When the parity control is enabled (Odd or Even), computed parity bit is inserted at the MSB position
928   *         (9th or 8th bit depending on data width) and parity is checked on the received data.
929   * @rmtoll CR1          PS            LL_USART_SetParity\n
930   *         CR1          PCE           LL_USART_SetParity
931   * @param  USARTx USART Instance
932   * @param  Parity This parameter can be one of the following values:
933   *         @arg @ref LL_USART_PARITY_NONE
934   *         @arg @ref LL_USART_PARITY_EVEN
935   *         @arg @ref LL_USART_PARITY_ODD
936   * @retval None
937   */
LL_USART_SetParity(USART_TypeDef * USARTx,uint32_t Parity)938 __STATIC_INLINE void LL_USART_SetParity(USART_TypeDef *USARTx, uint32_t Parity)
939 {
940   MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE, Parity);
941 }
942 
943 /**
944   * @brief  Return Parity configuration (enabled/disabled and parity mode if enabled)
945   * @rmtoll CR1          PS            LL_USART_GetParity\n
946   *         CR1          PCE           LL_USART_GetParity
947   * @param  USARTx USART Instance
948   * @retval Returned value can be one of the following values:
949   *         @arg @ref LL_USART_PARITY_NONE
950   *         @arg @ref LL_USART_PARITY_EVEN
951   *         @arg @ref LL_USART_PARITY_ODD
952   */
LL_USART_GetParity(const USART_TypeDef * USARTx)953 __STATIC_INLINE uint32_t LL_USART_GetParity(const USART_TypeDef *USARTx)
954 {
955   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE));
956 }
957 
958 /**
959   * @brief  Set Receiver Wake Up method from Mute mode.
960   * @rmtoll CR1          WAKE          LL_USART_SetWakeUpMethod
961   * @param  USARTx USART Instance
962   * @param  Method This parameter can be one of the following values:
963   *         @arg @ref LL_USART_WAKEUP_IDLELINE
964   *         @arg @ref LL_USART_WAKEUP_ADDRESSMARK
965   * @retval None
966   */
LL_USART_SetWakeUpMethod(USART_TypeDef * USARTx,uint32_t Method)967 __STATIC_INLINE void LL_USART_SetWakeUpMethod(USART_TypeDef *USARTx, uint32_t Method)
968 {
969   MODIFY_REG(USARTx->CR1, USART_CR1_WAKE, Method);
970 }
971 
972 /**
973   * @brief  Return Receiver Wake Up method from Mute mode
974   * @rmtoll CR1          WAKE          LL_USART_GetWakeUpMethod
975   * @param  USARTx USART Instance
976   * @retval Returned value can be one of the following values:
977   *         @arg @ref LL_USART_WAKEUP_IDLELINE
978   *         @arg @ref LL_USART_WAKEUP_ADDRESSMARK
979   */
LL_USART_GetWakeUpMethod(const USART_TypeDef * USARTx)980 __STATIC_INLINE uint32_t LL_USART_GetWakeUpMethod(const USART_TypeDef *USARTx)
981 {
982   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_WAKE));
983 }
984 
985 /**
986   * @brief  Set Word length (i.e. nb of data bits, excluding start and stop bits)
987   * @rmtoll CR1          M0            LL_USART_SetDataWidth\n
988   *         CR1          M1            LL_USART_SetDataWidth
989   * @param  USARTx USART Instance
990   * @param  DataWidth This parameter can be one of the following values:
991   *         @arg @ref LL_USART_DATAWIDTH_7B
992   *         @arg @ref LL_USART_DATAWIDTH_8B
993   *         @arg @ref LL_USART_DATAWIDTH_9B
994   * @retval None
995   */
LL_USART_SetDataWidth(USART_TypeDef * USARTx,uint32_t DataWidth)996 __STATIC_INLINE void LL_USART_SetDataWidth(USART_TypeDef *USARTx, uint32_t DataWidth)
997 {
998   MODIFY_REG(USARTx->CR1, USART_CR1_M, DataWidth);
999 }
1000 
1001 /**
1002   * @brief  Return Word length (i.e. nb of data bits, excluding start and stop bits)
1003   * @rmtoll CR1          M0            LL_USART_GetDataWidth\n
1004   *         CR1          M1            LL_USART_GetDataWidth
1005   * @param  USARTx USART Instance
1006   * @retval Returned value can be one of the following values:
1007   *         @arg @ref LL_USART_DATAWIDTH_7B
1008   *         @arg @ref LL_USART_DATAWIDTH_8B
1009   *         @arg @ref LL_USART_DATAWIDTH_9B
1010   */
LL_USART_GetDataWidth(const USART_TypeDef * USARTx)1011 __STATIC_INLINE uint32_t LL_USART_GetDataWidth(const USART_TypeDef *USARTx)
1012 {
1013   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_M));
1014 }
1015 
1016 /**
1017   * @brief  Allow switch between Mute Mode and Active mode
1018   * @rmtoll CR1          MME           LL_USART_EnableMuteMode
1019   * @param  USARTx USART Instance
1020   * @retval None
1021   */
LL_USART_EnableMuteMode(USART_TypeDef * USARTx)1022 __STATIC_INLINE void LL_USART_EnableMuteMode(USART_TypeDef *USARTx)
1023 {
1024   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_MME);
1025 }
1026 
1027 /**
1028   * @brief  Prevent Mute Mode use. Set Receiver in active mode permanently.
1029   * @rmtoll CR1          MME           LL_USART_DisableMuteMode
1030   * @param  USARTx USART Instance
1031   * @retval None
1032   */
LL_USART_DisableMuteMode(USART_TypeDef * USARTx)1033 __STATIC_INLINE void LL_USART_DisableMuteMode(USART_TypeDef *USARTx)
1034 {
1035   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_MME);
1036 }
1037 
1038 /**
1039   * @brief  Indicate if switch between Mute Mode and Active mode is allowed
1040   * @rmtoll CR1          MME           LL_USART_IsEnabledMuteMode
1041   * @param  USARTx USART Instance
1042   * @retval State of bit (1 or 0).
1043   */
LL_USART_IsEnabledMuteMode(const USART_TypeDef * USARTx)1044 __STATIC_INLINE uint32_t LL_USART_IsEnabledMuteMode(const USART_TypeDef *USARTx)
1045 {
1046   return ((READ_BIT(USARTx->CR1, USART_CR1_MME) == (USART_CR1_MME)) ? 1UL : 0UL);
1047 }
1048 
1049 /**
1050   * @brief  Set Oversampling to 8-bit or 16-bit mode
1051   * @rmtoll CR1          OVER8         LL_USART_SetOverSampling
1052   * @param  USARTx USART Instance
1053   * @param  OverSampling This parameter can be one of the following values:
1054   *         @arg @ref LL_USART_OVERSAMPLING_16
1055   *         @arg @ref LL_USART_OVERSAMPLING_8
1056   * @retval None
1057   */
LL_USART_SetOverSampling(USART_TypeDef * USARTx,uint32_t OverSampling)1058 __STATIC_INLINE void LL_USART_SetOverSampling(USART_TypeDef *USARTx, uint32_t OverSampling)
1059 {
1060   MODIFY_REG(USARTx->CR1, USART_CR1_OVER8, OverSampling);
1061 }
1062 
1063 /**
1064   * @brief  Return Oversampling mode
1065   * @rmtoll CR1          OVER8         LL_USART_GetOverSampling
1066   * @param  USARTx USART Instance
1067   * @retval Returned value can be one of the following values:
1068   *         @arg @ref LL_USART_OVERSAMPLING_16
1069   *         @arg @ref LL_USART_OVERSAMPLING_8
1070   */
LL_USART_GetOverSampling(const USART_TypeDef * USARTx)1071 __STATIC_INLINE uint32_t LL_USART_GetOverSampling(const USART_TypeDef *USARTx)
1072 {
1073   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_OVER8));
1074 }
1075 
1076 /**
1077   * @brief  Configure if Clock pulse of the last data bit is output to the SCLK pin or not
1078   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1079   *         Synchronous mode is supported by the USARTx instance.
1080   * @rmtoll CR2          LBCL          LL_USART_SetLastClkPulseOutput
1081   * @param  USARTx USART Instance
1082   * @param  LastBitClockPulse This parameter can be one of the following values:
1083   *         @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT
1084   *         @arg @ref LL_USART_LASTCLKPULSE_OUTPUT
1085   * @retval None
1086   */
LL_USART_SetLastClkPulseOutput(USART_TypeDef * USARTx,uint32_t LastBitClockPulse)1087 __STATIC_INLINE void LL_USART_SetLastClkPulseOutput(USART_TypeDef *USARTx, uint32_t LastBitClockPulse)
1088 {
1089   MODIFY_REG(USARTx->CR2, USART_CR2_LBCL, LastBitClockPulse);
1090 }
1091 
1092 /**
1093   * @brief  Retrieve Clock pulse of the last data bit output configuration
1094   *         (Last bit Clock pulse output to the SCLK pin or not)
1095   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1096   *         Synchronous mode is supported by the USARTx instance.
1097   * @rmtoll CR2          LBCL          LL_USART_GetLastClkPulseOutput
1098   * @param  USARTx USART Instance
1099   * @retval Returned value can be one of the following values:
1100   *         @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT
1101   *         @arg @ref LL_USART_LASTCLKPULSE_OUTPUT
1102   */
LL_USART_GetLastClkPulseOutput(const USART_TypeDef * USARTx)1103 __STATIC_INLINE uint32_t LL_USART_GetLastClkPulseOutput(const USART_TypeDef *USARTx)
1104 {
1105   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBCL));
1106 }
1107 
1108 /**
1109   * @brief  Select the phase of the clock output on the SCLK pin in synchronous mode
1110   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1111   *         Synchronous mode is supported by the USARTx instance.
1112   * @rmtoll CR2          CPHA          LL_USART_SetClockPhase
1113   * @param  USARTx USART Instance
1114   * @param  ClockPhase This parameter can be one of the following values:
1115   *         @arg @ref LL_USART_PHASE_1EDGE
1116   *         @arg @ref LL_USART_PHASE_2EDGE
1117   * @retval None
1118   */
LL_USART_SetClockPhase(USART_TypeDef * USARTx,uint32_t ClockPhase)1119 __STATIC_INLINE void LL_USART_SetClockPhase(USART_TypeDef *USARTx, uint32_t ClockPhase)
1120 {
1121   MODIFY_REG(USARTx->CR2, USART_CR2_CPHA, ClockPhase);
1122 }
1123 
1124 /**
1125   * @brief  Return phase of the clock output on the SCLK pin in synchronous mode
1126   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1127   *         Synchronous mode is supported by the USARTx instance.
1128   * @rmtoll CR2          CPHA          LL_USART_GetClockPhase
1129   * @param  USARTx USART Instance
1130   * @retval Returned value can be one of the following values:
1131   *         @arg @ref LL_USART_PHASE_1EDGE
1132   *         @arg @ref LL_USART_PHASE_2EDGE
1133   */
LL_USART_GetClockPhase(const USART_TypeDef * USARTx)1134 __STATIC_INLINE uint32_t LL_USART_GetClockPhase(const USART_TypeDef *USARTx)
1135 {
1136   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPHA));
1137 }
1138 
1139 /**
1140   * @brief  Select the polarity of the clock output on the SCLK pin in synchronous mode
1141   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1142   *         Synchronous mode is supported by the USARTx instance.
1143   * @rmtoll CR2          CPOL          LL_USART_SetClockPolarity
1144   * @param  USARTx USART Instance
1145   * @param  ClockPolarity This parameter can be one of the following values:
1146   *         @arg @ref LL_USART_POLARITY_LOW
1147   *         @arg @ref LL_USART_POLARITY_HIGH
1148   * @retval None
1149   */
LL_USART_SetClockPolarity(USART_TypeDef * USARTx,uint32_t ClockPolarity)1150 __STATIC_INLINE void LL_USART_SetClockPolarity(USART_TypeDef *USARTx, uint32_t ClockPolarity)
1151 {
1152   MODIFY_REG(USARTx->CR2, USART_CR2_CPOL, ClockPolarity);
1153 }
1154 
1155 /**
1156   * @brief  Return polarity of the clock output on the SCLK pin in synchronous mode
1157   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1158   *         Synchronous mode is supported by the USARTx instance.
1159   * @rmtoll CR2          CPOL          LL_USART_GetClockPolarity
1160   * @param  USARTx USART Instance
1161   * @retval Returned value can be one of the following values:
1162   *         @arg @ref LL_USART_POLARITY_LOW
1163   *         @arg @ref LL_USART_POLARITY_HIGH
1164   */
LL_USART_GetClockPolarity(const USART_TypeDef * USARTx)1165 __STATIC_INLINE uint32_t LL_USART_GetClockPolarity(const USART_TypeDef *USARTx)
1166 {
1167   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPOL));
1168 }
1169 
1170 /**
1171   * @brief  Configure Clock signal format (Phase Polarity and choice about output of last bit clock pulse)
1172   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1173   *         Synchronous mode is supported by the USARTx instance.
1174   * @note   Call of this function is equivalent to following function call sequence :
1175   *         - Clock Phase configuration using @ref LL_USART_SetClockPhase() function
1176   *         - Clock Polarity configuration using @ref LL_USART_SetClockPolarity() function
1177   *         - Output of Last bit Clock pulse configuration using @ref LL_USART_SetLastClkPulseOutput() function
1178   * @rmtoll CR2          CPHA          LL_USART_ConfigClock\n
1179   *         CR2          CPOL          LL_USART_ConfigClock\n
1180   *         CR2          LBCL          LL_USART_ConfigClock
1181   * @param  USARTx USART Instance
1182   * @param  Phase This parameter can be one of the following values:
1183   *         @arg @ref LL_USART_PHASE_1EDGE
1184   *         @arg @ref LL_USART_PHASE_2EDGE
1185   * @param  Polarity This parameter can be one of the following values:
1186   *         @arg @ref LL_USART_POLARITY_LOW
1187   *         @arg @ref LL_USART_POLARITY_HIGH
1188   * @param  LBCPOutput This parameter can be one of the following values:
1189   *         @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT
1190   *         @arg @ref LL_USART_LASTCLKPULSE_OUTPUT
1191   * @retval None
1192   */
LL_USART_ConfigClock(USART_TypeDef * USARTx,uint32_t Phase,uint32_t Polarity,uint32_t LBCPOutput)1193 __STATIC_INLINE void LL_USART_ConfigClock(USART_TypeDef *USARTx, uint32_t Phase, uint32_t Polarity, uint32_t LBCPOutput)
1194 {
1195   MODIFY_REG(USARTx->CR2, USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_LBCL, Phase | Polarity | LBCPOutput);
1196 }
1197 
1198 /**
1199   * @brief  Configure Clock source prescaler for baudrate generator and oversampling
1200   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
1201   *         FIFO mode feature is supported by the USARTx instance.
1202   * @rmtoll PRESC        PRESCALER     LL_USART_SetPrescaler
1203   * @param  USARTx USART Instance
1204   * @param  PrescalerValue This parameter can be one of the following values:
1205   *         @arg @ref LL_USART_PRESCALER_DIV1
1206   *         @arg @ref LL_USART_PRESCALER_DIV2
1207   *         @arg @ref LL_USART_PRESCALER_DIV4
1208   *         @arg @ref LL_USART_PRESCALER_DIV6
1209   *         @arg @ref LL_USART_PRESCALER_DIV8
1210   *         @arg @ref LL_USART_PRESCALER_DIV10
1211   *         @arg @ref LL_USART_PRESCALER_DIV12
1212   *         @arg @ref LL_USART_PRESCALER_DIV16
1213   *         @arg @ref LL_USART_PRESCALER_DIV32
1214   *         @arg @ref LL_USART_PRESCALER_DIV64
1215   *         @arg @ref LL_USART_PRESCALER_DIV128
1216   *         @arg @ref LL_USART_PRESCALER_DIV256
1217   * @retval None
1218   */
LL_USART_SetPrescaler(USART_TypeDef * USARTx,uint32_t PrescalerValue)1219 __STATIC_INLINE void LL_USART_SetPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue)
1220 {
1221   MODIFY_REG(USARTx->PRESC, USART_PRESC_PRESCALER, (uint16_t)PrescalerValue);
1222 }
1223 
1224 /**
1225   * @brief  Retrieve the Clock source prescaler for baudrate generator and oversampling
1226   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
1227   *         FIFO mode feature is supported by the USARTx instance.
1228   * @rmtoll PRESC        PRESCALER     LL_USART_GetPrescaler
1229   * @param  USARTx USART Instance
1230   * @retval Returned value can be one of the following values:
1231   *         @arg @ref LL_USART_PRESCALER_DIV1
1232   *         @arg @ref LL_USART_PRESCALER_DIV2
1233   *         @arg @ref LL_USART_PRESCALER_DIV4
1234   *         @arg @ref LL_USART_PRESCALER_DIV6
1235   *         @arg @ref LL_USART_PRESCALER_DIV8
1236   *         @arg @ref LL_USART_PRESCALER_DIV10
1237   *         @arg @ref LL_USART_PRESCALER_DIV12
1238   *         @arg @ref LL_USART_PRESCALER_DIV16
1239   *         @arg @ref LL_USART_PRESCALER_DIV32
1240   *         @arg @ref LL_USART_PRESCALER_DIV64
1241   *         @arg @ref LL_USART_PRESCALER_DIV128
1242   *         @arg @ref LL_USART_PRESCALER_DIV256
1243   */
LL_USART_GetPrescaler(const USART_TypeDef * USARTx)1244 __STATIC_INLINE uint32_t LL_USART_GetPrescaler(const USART_TypeDef *USARTx)
1245 {
1246   return (uint32_t)(READ_BIT(USARTx->PRESC, USART_PRESC_PRESCALER));
1247 }
1248 
1249 /**
1250   * @brief  Enable Clock output on SCLK pin
1251   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1252   *         Synchronous mode is supported by the USARTx instance.
1253   * @rmtoll CR2          CLKEN         LL_USART_EnableSCLKOutput
1254   * @param  USARTx USART Instance
1255   * @retval None
1256   */
LL_USART_EnableSCLKOutput(USART_TypeDef * USARTx)1257 __STATIC_INLINE void LL_USART_EnableSCLKOutput(USART_TypeDef *USARTx)
1258 {
1259   SET_BIT(USARTx->CR2, USART_CR2_CLKEN);
1260 }
1261 
1262 /**
1263   * @brief  Disable Clock output on SCLK pin
1264   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1265   *         Synchronous mode is supported by the USARTx instance.
1266   * @rmtoll CR2          CLKEN         LL_USART_DisableSCLKOutput
1267   * @param  USARTx USART Instance
1268   * @retval None
1269   */
LL_USART_DisableSCLKOutput(USART_TypeDef * USARTx)1270 __STATIC_INLINE void LL_USART_DisableSCLKOutput(USART_TypeDef *USARTx)
1271 {
1272   CLEAR_BIT(USARTx->CR2, USART_CR2_CLKEN);
1273 }
1274 
1275 /**
1276   * @brief  Indicate if Clock output on SCLK pin is enabled
1277   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
1278   *         Synchronous mode is supported by the USARTx instance.
1279   * @rmtoll CR2          CLKEN         LL_USART_IsEnabledSCLKOutput
1280   * @param  USARTx USART Instance
1281   * @retval State of bit (1 or 0).
1282   */
LL_USART_IsEnabledSCLKOutput(const USART_TypeDef * USARTx)1283 __STATIC_INLINE uint32_t LL_USART_IsEnabledSCLKOutput(const USART_TypeDef *USARTx)
1284 {
1285   return ((READ_BIT(USARTx->CR2, USART_CR2_CLKEN) == (USART_CR2_CLKEN)) ? 1UL : 0UL);
1286 }
1287 
1288 /**
1289   * @brief  Set the length of the stop bits
1290   * @rmtoll CR2          STOP          LL_USART_SetStopBitsLength
1291   * @param  USARTx USART Instance
1292   * @param  StopBits This parameter can be one of the following values:
1293   *         @arg @ref LL_USART_STOPBITS_0_5
1294   *         @arg @ref LL_USART_STOPBITS_1
1295   *         @arg @ref LL_USART_STOPBITS_1_5
1296   *         @arg @ref LL_USART_STOPBITS_2
1297   * @retval None
1298   */
LL_USART_SetStopBitsLength(USART_TypeDef * USARTx,uint32_t StopBits)1299 __STATIC_INLINE void LL_USART_SetStopBitsLength(USART_TypeDef *USARTx, uint32_t StopBits)
1300 {
1301   MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits);
1302 }
1303 
1304 /**
1305   * @brief  Retrieve the length of the stop bits
1306   * @rmtoll CR2          STOP          LL_USART_GetStopBitsLength
1307   * @param  USARTx USART Instance
1308   * @retval Returned value can be one of the following values:
1309   *         @arg @ref LL_USART_STOPBITS_0_5
1310   *         @arg @ref LL_USART_STOPBITS_1
1311   *         @arg @ref LL_USART_STOPBITS_1_5
1312   *         @arg @ref LL_USART_STOPBITS_2
1313   */
LL_USART_GetStopBitsLength(const USART_TypeDef * USARTx)1314 __STATIC_INLINE uint32_t LL_USART_GetStopBitsLength(const USART_TypeDef *USARTx)
1315 {
1316   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_STOP));
1317 }
1318 
1319 /**
1320   * @brief  Configure Character frame format (Datawidth, Parity control, Stop Bits)
1321   * @note   Call of this function is equivalent to following function call sequence :
1322   *         - Data Width configuration using @ref LL_USART_SetDataWidth() function
1323   *         - Parity Control and mode configuration using @ref LL_USART_SetParity() function
1324   *         - Stop bits configuration using @ref LL_USART_SetStopBitsLength() function
1325   * @rmtoll CR1          PS            LL_USART_ConfigCharacter\n
1326   *         CR1          PCE           LL_USART_ConfigCharacter\n
1327   *         CR1          M0            LL_USART_ConfigCharacter\n
1328   *         CR1          M1            LL_USART_ConfigCharacter\n
1329   *         CR2          STOP          LL_USART_ConfigCharacter
1330   * @param  USARTx USART Instance
1331   * @param  DataWidth This parameter can be one of the following values:
1332   *         @arg @ref LL_USART_DATAWIDTH_7B
1333   *         @arg @ref LL_USART_DATAWIDTH_8B
1334   *         @arg @ref LL_USART_DATAWIDTH_9B
1335   * @param  Parity This parameter can be one of the following values:
1336   *         @arg @ref LL_USART_PARITY_NONE
1337   *         @arg @ref LL_USART_PARITY_EVEN
1338   *         @arg @ref LL_USART_PARITY_ODD
1339   * @param  StopBits This parameter can be one of the following values:
1340   *         @arg @ref LL_USART_STOPBITS_0_5
1341   *         @arg @ref LL_USART_STOPBITS_1
1342   *         @arg @ref LL_USART_STOPBITS_1_5
1343   *         @arg @ref LL_USART_STOPBITS_2
1344   * @retval None
1345   */
LL_USART_ConfigCharacter(USART_TypeDef * USARTx,uint32_t DataWidth,uint32_t Parity,uint32_t StopBits)1346 __STATIC_INLINE void LL_USART_ConfigCharacter(USART_TypeDef *USARTx, uint32_t DataWidth, uint32_t Parity,
1347                                               uint32_t StopBits)
1348 {
1349   MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE | USART_CR1_M, Parity | DataWidth);
1350   MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits);
1351 }
1352 
1353 /**
1354   * @brief  Configure TX/RX pins swapping setting.
1355   * @rmtoll CR2          SWAP          LL_USART_SetTXRXSwap
1356   * @param  USARTx USART Instance
1357   * @param  SwapConfig This parameter can be one of the following values:
1358   *         @arg @ref LL_USART_TXRX_STANDARD
1359   *         @arg @ref LL_USART_TXRX_SWAPPED
1360   * @retval None
1361   */
LL_USART_SetTXRXSwap(USART_TypeDef * USARTx,uint32_t SwapConfig)1362 __STATIC_INLINE void LL_USART_SetTXRXSwap(USART_TypeDef *USARTx, uint32_t SwapConfig)
1363 {
1364   MODIFY_REG(USARTx->CR2, USART_CR2_SWAP, SwapConfig);
1365 }
1366 
1367 /**
1368   * @brief  Retrieve TX/RX pins swapping configuration.
1369   * @rmtoll CR2          SWAP          LL_USART_GetTXRXSwap
1370   * @param  USARTx USART Instance
1371   * @retval Returned value can be one of the following values:
1372   *         @arg @ref LL_USART_TXRX_STANDARD
1373   *         @arg @ref LL_USART_TXRX_SWAPPED
1374   */
LL_USART_GetTXRXSwap(const USART_TypeDef * USARTx)1375 __STATIC_INLINE uint32_t LL_USART_GetTXRXSwap(const USART_TypeDef *USARTx)
1376 {
1377   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_SWAP));
1378 }
1379 
1380 /**
1381   * @brief  Configure RX pin active level logic
1382   * @rmtoll CR2          RXINV         LL_USART_SetRXPinLevel
1383   * @param  USARTx USART Instance
1384   * @param  PinInvMethod This parameter can be one of the following values:
1385   *         @arg @ref LL_USART_RXPIN_LEVEL_STANDARD
1386   *         @arg @ref LL_USART_RXPIN_LEVEL_INVERTED
1387   * @retval None
1388   */
LL_USART_SetRXPinLevel(USART_TypeDef * USARTx,uint32_t PinInvMethod)1389 __STATIC_INLINE void LL_USART_SetRXPinLevel(USART_TypeDef *USARTx, uint32_t PinInvMethod)
1390 {
1391   MODIFY_REG(USARTx->CR2, USART_CR2_RXINV, PinInvMethod);
1392 }
1393 
1394 /**
1395   * @brief  Retrieve RX pin active level logic configuration
1396   * @rmtoll CR2          RXINV         LL_USART_GetRXPinLevel
1397   * @param  USARTx USART Instance
1398   * @retval Returned value can be one of the following values:
1399   *         @arg @ref LL_USART_RXPIN_LEVEL_STANDARD
1400   *         @arg @ref LL_USART_RXPIN_LEVEL_INVERTED
1401   */
LL_USART_GetRXPinLevel(const USART_TypeDef * USARTx)1402 __STATIC_INLINE uint32_t LL_USART_GetRXPinLevel(const USART_TypeDef *USARTx)
1403 {
1404   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_RXINV));
1405 }
1406 
1407 /**
1408   * @brief  Configure TX pin active level logic
1409   * @rmtoll CR2          TXINV         LL_USART_SetTXPinLevel
1410   * @param  USARTx USART Instance
1411   * @param  PinInvMethod This parameter can be one of the following values:
1412   *         @arg @ref LL_USART_TXPIN_LEVEL_STANDARD
1413   *         @arg @ref LL_USART_TXPIN_LEVEL_INVERTED
1414   * @retval None
1415   */
LL_USART_SetTXPinLevel(USART_TypeDef * USARTx,uint32_t PinInvMethod)1416 __STATIC_INLINE void LL_USART_SetTXPinLevel(USART_TypeDef *USARTx, uint32_t PinInvMethod)
1417 {
1418   MODIFY_REG(USARTx->CR2, USART_CR2_TXINV, PinInvMethod);
1419 }
1420 
1421 /**
1422   * @brief  Retrieve TX pin active level logic configuration
1423   * @rmtoll CR2          TXINV         LL_USART_GetTXPinLevel
1424   * @param  USARTx USART Instance
1425   * @retval Returned value can be one of the following values:
1426   *         @arg @ref LL_USART_TXPIN_LEVEL_STANDARD
1427   *         @arg @ref LL_USART_TXPIN_LEVEL_INVERTED
1428   */
LL_USART_GetTXPinLevel(const USART_TypeDef * USARTx)1429 __STATIC_INLINE uint32_t LL_USART_GetTXPinLevel(const USART_TypeDef *USARTx)
1430 {
1431   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_TXINV));
1432 }
1433 
1434 /**
1435   * @brief  Configure Binary data logic.
1436   * @note   Allow to define how Logical data from the data register are send/received :
1437   *         either in positive/direct logic (1=H, 0=L) or in negative/inverse logic (1=L, 0=H)
1438   * @rmtoll CR2          DATAINV       LL_USART_SetBinaryDataLogic
1439   * @param  USARTx USART Instance
1440   * @param  DataLogic This parameter can be one of the following values:
1441   *         @arg @ref LL_USART_BINARY_LOGIC_POSITIVE
1442   *         @arg @ref LL_USART_BINARY_LOGIC_NEGATIVE
1443   * @retval None
1444   */
LL_USART_SetBinaryDataLogic(USART_TypeDef * USARTx,uint32_t DataLogic)1445 __STATIC_INLINE void LL_USART_SetBinaryDataLogic(USART_TypeDef *USARTx, uint32_t DataLogic)
1446 {
1447   MODIFY_REG(USARTx->CR2, USART_CR2_DATAINV, DataLogic);
1448 }
1449 
1450 /**
1451   * @brief  Retrieve Binary data configuration
1452   * @rmtoll CR2          DATAINV       LL_USART_GetBinaryDataLogic
1453   * @param  USARTx USART Instance
1454   * @retval Returned value can be one of the following values:
1455   *         @arg @ref LL_USART_BINARY_LOGIC_POSITIVE
1456   *         @arg @ref LL_USART_BINARY_LOGIC_NEGATIVE
1457   */
LL_USART_GetBinaryDataLogic(const USART_TypeDef * USARTx)1458 __STATIC_INLINE uint32_t LL_USART_GetBinaryDataLogic(const USART_TypeDef *USARTx)
1459 {
1460   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_DATAINV));
1461 }
1462 
1463 /**
1464   * @brief  Configure transfer bit order (either Less or Most Significant Bit First)
1465   * @note   MSB First means data is transmitted/received with the MSB first, following the start bit.
1466   *         LSB First means data is transmitted/received with data bit 0 first, following the start bit.
1467   * @rmtoll CR2          MSBFIRST      LL_USART_SetTransferBitOrder
1468   * @param  USARTx USART Instance
1469   * @param  BitOrder This parameter can be one of the following values:
1470   *         @arg @ref LL_USART_BITORDER_LSBFIRST
1471   *         @arg @ref LL_USART_BITORDER_MSBFIRST
1472   * @retval None
1473   */
LL_USART_SetTransferBitOrder(USART_TypeDef * USARTx,uint32_t BitOrder)1474 __STATIC_INLINE void LL_USART_SetTransferBitOrder(USART_TypeDef *USARTx, uint32_t BitOrder)
1475 {
1476   MODIFY_REG(USARTx->CR2, USART_CR2_MSBFIRST, BitOrder);
1477 }
1478 
1479 /**
1480   * @brief  Return transfer bit order (either Less or Most Significant Bit First)
1481   * @note   MSB First means data is transmitted/received with the MSB first, following the start bit.
1482   *         LSB First means data is transmitted/received with data bit 0 first, following the start bit.
1483   * @rmtoll CR2          MSBFIRST      LL_USART_GetTransferBitOrder
1484   * @param  USARTx USART Instance
1485   * @retval Returned value can be one of the following values:
1486   *         @arg @ref LL_USART_BITORDER_LSBFIRST
1487   *         @arg @ref LL_USART_BITORDER_MSBFIRST
1488   */
LL_USART_GetTransferBitOrder(const USART_TypeDef * USARTx)1489 __STATIC_INLINE uint32_t LL_USART_GetTransferBitOrder(const USART_TypeDef *USARTx)
1490 {
1491   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_MSBFIRST));
1492 }
1493 
1494 /**
1495   * @brief  Enable Auto Baud-Rate Detection
1496   * @note   Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not
1497   *         Auto Baud Rate detection feature is supported by the USARTx instance.
1498   * @rmtoll CR2          ABREN         LL_USART_EnableAutoBaudRate
1499   * @param  USARTx USART Instance
1500   * @retval None
1501   */
LL_USART_EnableAutoBaudRate(USART_TypeDef * USARTx)1502 __STATIC_INLINE void LL_USART_EnableAutoBaudRate(USART_TypeDef *USARTx)
1503 {
1504   SET_BIT(USARTx->CR2, USART_CR2_ABREN);
1505 }
1506 
1507 /**
1508   * @brief  Disable Auto Baud-Rate Detection
1509   * @note   Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not
1510   *         Auto Baud Rate detection feature is supported by the USARTx instance.
1511   * @rmtoll CR2          ABREN         LL_USART_DisableAutoBaudRate
1512   * @param  USARTx USART Instance
1513   * @retval None
1514   */
LL_USART_DisableAutoBaudRate(USART_TypeDef * USARTx)1515 __STATIC_INLINE void LL_USART_DisableAutoBaudRate(USART_TypeDef *USARTx)
1516 {
1517   CLEAR_BIT(USARTx->CR2, USART_CR2_ABREN);
1518 }
1519 
1520 /**
1521   * @brief  Indicate if Auto Baud-Rate Detection mechanism is enabled
1522   * @note   Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not
1523   *         Auto Baud Rate detection feature is supported by the USARTx instance.
1524   * @rmtoll CR2          ABREN         LL_USART_IsEnabledAutoBaud
1525   * @param  USARTx USART Instance
1526   * @retval State of bit (1 or 0).
1527   */
LL_USART_IsEnabledAutoBaud(const USART_TypeDef * USARTx)1528 __STATIC_INLINE uint32_t LL_USART_IsEnabledAutoBaud(const USART_TypeDef *USARTx)
1529 {
1530   return ((READ_BIT(USARTx->CR2, USART_CR2_ABREN) == (USART_CR2_ABREN)) ? 1UL : 0UL);
1531 }
1532 
1533 /**
1534   * @brief  Set Auto Baud-Rate mode bits
1535   * @note   Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not
1536   *         Auto Baud Rate detection feature is supported by the USARTx instance.
1537   * @rmtoll CR2          ABRMODE       LL_USART_SetAutoBaudRateMode
1538   * @param  USARTx USART Instance
1539   * @param  AutoBaudRateMode This parameter can be one of the following values:
1540   *         @arg @ref LL_USART_AUTOBAUD_DETECT_ON_STARTBIT
1541   *         @arg @ref LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE
1542   *         @arg @ref LL_USART_AUTOBAUD_DETECT_ON_7F_FRAME
1543   *         @arg @ref LL_USART_AUTOBAUD_DETECT_ON_55_FRAME
1544   * @retval None
1545   */
LL_USART_SetAutoBaudRateMode(USART_TypeDef * USARTx,uint32_t AutoBaudRateMode)1546 __STATIC_INLINE void LL_USART_SetAutoBaudRateMode(USART_TypeDef *USARTx, uint32_t AutoBaudRateMode)
1547 {
1548   MODIFY_REG(USARTx->CR2, USART_CR2_ABRMODE, AutoBaudRateMode);
1549 }
1550 
1551 /**
1552   * @brief  Return Auto Baud-Rate mode
1553   * @note   Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not
1554   *         Auto Baud Rate detection feature is supported by the USARTx instance.
1555   * @rmtoll CR2          ABRMODE       LL_USART_GetAutoBaudRateMode
1556   * @param  USARTx USART Instance
1557   * @retval Returned value can be one of the following values:
1558   *         @arg @ref LL_USART_AUTOBAUD_DETECT_ON_STARTBIT
1559   *         @arg @ref LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE
1560   *         @arg @ref LL_USART_AUTOBAUD_DETECT_ON_7F_FRAME
1561   *         @arg @ref LL_USART_AUTOBAUD_DETECT_ON_55_FRAME
1562   */
LL_USART_GetAutoBaudRateMode(USART_TypeDef * USARTx)1563 __STATIC_INLINE uint32_t LL_USART_GetAutoBaudRateMode(USART_TypeDef *USARTx)
1564 {
1565   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ABRMODE));
1566 }
1567 
1568 /**
1569   * @brief  Enable Receiver Timeout
1570   * @rmtoll CR2          RTOEN         LL_USART_EnableRxTimeout
1571   * @param  USARTx USART Instance
1572   * @retval None
1573   */
LL_USART_EnableRxTimeout(USART_TypeDef * USARTx)1574 __STATIC_INLINE void LL_USART_EnableRxTimeout(USART_TypeDef *USARTx)
1575 {
1576   SET_BIT(USARTx->CR2, USART_CR2_RTOEN);
1577 }
1578 
1579 /**
1580   * @brief  Disable Receiver Timeout
1581   * @rmtoll CR2          RTOEN         LL_USART_DisableRxTimeout
1582   * @param  USARTx USART Instance
1583   * @retval None
1584   */
LL_USART_DisableRxTimeout(USART_TypeDef * USARTx)1585 __STATIC_INLINE void LL_USART_DisableRxTimeout(USART_TypeDef *USARTx)
1586 {
1587   CLEAR_BIT(USARTx->CR2, USART_CR2_RTOEN);
1588 }
1589 
1590 /**
1591   * @brief  Indicate if Receiver Timeout feature is enabled
1592   * @rmtoll CR2          RTOEN         LL_USART_IsEnabledRxTimeout
1593   * @param  USARTx USART Instance
1594   * @retval State of bit (1 or 0).
1595   */
LL_USART_IsEnabledRxTimeout(const USART_TypeDef * USARTx)1596 __STATIC_INLINE uint32_t LL_USART_IsEnabledRxTimeout(const USART_TypeDef *USARTx)
1597 {
1598   return ((READ_BIT(USARTx->CR2, USART_CR2_RTOEN) == (USART_CR2_RTOEN)) ? 1UL : 0UL);
1599 }
1600 
1601 /**
1602   * @brief  Set Address of the USART node.
1603   * @note   This is used in multiprocessor communication during Mute mode or Stop mode,
1604   *         for wake up with address mark detection.
1605   * @note   4bits address node is used when 4-bit Address Detection is selected in ADDM7.
1606   *         (b7-b4 should be set to 0)
1607   *         8bits address node is used when 7-bit Address Detection is selected in ADDM7.
1608   *         (This is used in multiprocessor communication during Mute mode or Stop mode,
1609   *         for wake up with 7-bit address mark detection.
1610   *         The MSB of the character sent by the transmitter should be equal to 1.
1611   *         It may also be used for character detection during normal reception,
1612   *         Mute mode inactive (for example, end of block detection in ModBus protocol).
1613   *         In this case, the whole received character (8-bit) is compared to the ADD[7:0]
1614   *         value and CMF flag is set on match)
1615   * @rmtoll CR2          ADD           LL_USART_ConfigNodeAddress\n
1616   *         CR2          ADDM7         LL_USART_ConfigNodeAddress
1617   * @param  USARTx USART Instance
1618   * @param  AddressLen This parameter can be one of the following values:
1619   *         @arg @ref LL_USART_ADDRESS_DETECT_4B
1620   *         @arg @ref LL_USART_ADDRESS_DETECT_7B
1621   * @param  NodeAddress 4 or 7 bit Address of the USART node.
1622   * @retval None
1623   */
LL_USART_ConfigNodeAddress(USART_TypeDef * USARTx,uint32_t AddressLen,uint32_t NodeAddress)1624 __STATIC_INLINE void LL_USART_ConfigNodeAddress(USART_TypeDef *USARTx, uint32_t AddressLen, uint32_t NodeAddress)
1625 {
1626   MODIFY_REG(USARTx->CR2, USART_CR2_ADD | USART_CR2_ADDM7,
1627              (uint32_t)(AddressLen | (NodeAddress << USART_CR2_ADD_Pos)));
1628 }
1629 
1630 /**
1631   * @brief  Return 8 bit Address of the USART node as set in ADD field of CR2.
1632   * @note   If 4-bit Address Detection is selected in ADDM7,
1633   *         only 4bits (b3-b0) of returned value are relevant (b31-b4 are not relevant)
1634   *         If 7-bit Address Detection is selected in ADDM7,
1635   *         only 8bits (b7-b0) of returned value are relevant (b31-b8 are not relevant)
1636   * @rmtoll CR2          ADD           LL_USART_GetNodeAddress
1637   * @param  USARTx USART Instance
1638   * @retval Address of the USART node (Value between Min_Data=0 and Max_Data=255)
1639   */
LL_USART_GetNodeAddress(const USART_TypeDef * USARTx)1640 __STATIC_INLINE uint32_t LL_USART_GetNodeAddress(const USART_TypeDef *USARTx)
1641 {
1642   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ADD) >> USART_CR2_ADD_Pos);
1643 }
1644 
1645 /**
1646   * @brief  Return Length of Node Address used in Address Detection mode (7-bit or 4-bit)
1647   * @rmtoll CR2          ADDM7         LL_USART_GetNodeAddressLen
1648   * @param  USARTx USART Instance
1649   * @retval Returned value can be one of the following values:
1650   *         @arg @ref LL_USART_ADDRESS_DETECT_4B
1651   *         @arg @ref LL_USART_ADDRESS_DETECT_7B
1652   */
LL_USART_GetNodeAddressLen(const USART_TypeDef * USARTx)1653 __STATIC_INLINE uint32_t LL_USART_GetNodeAddressLen(const USART_TypeDef *USARTx)
1654 {
1655   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ADDM7));
1656 }
1657 
1658 /**
1659   * @brief  Enable RTS HW Flow Control
1660   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
1661   *         Hardware Flow control feature is supported by the USARTx instance.
1662   * @rmtoll CR3          RTSE          LL_USART_EnableRTSHWFlowCtrl
1663   * @param  USARTx USART Instance
1664   * @retval None
1665   */
LL_USART_EnableRTSHWFlowCtrl(USART_TypeDef * USARTx)1666 __STATIC_INLINE void LL_USART_EnableRTSHWFlowCtrl(USART_TypeDef *USARTx)
1667 {
1668   SET_BIT(USARTx->CR3, USART_CR3_RTSE);
1669 }
1670 
1671 /**
1672   * @brief  Disable RTS HW Flow Control
1673   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
1674   *         Hardware Flow control feature is supported by the USARTx instance.
1675   * @rmtoll CR3          RTSE          LL_USART_DisableRTSHWFlowCtrl
1676   * @param  USARTx USART Instance
1677   * @retval None
1678   */
LL_USART_DisableRTSHWFlowCtrl(USART_TypeDef * USARTx)1679 __STATIC_INLINE void LL_USART_DisableRTSHWFlowCtrl(USART_TypeDef *USARTx)
1680 {
1681   CLEAR_BIT(USARTx->CR3, USART_CR3_RTSE);
1682 }
1683 
1684 /**
1685   * @brief  Enable CTS HW Flow Control
1686   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
1687   *         Hardware Flow control feature is supported by the USARTx instance.
1688   * @rmtoll CR3          CTSE          LL_USART_EnableCTSHWFlowCtrl
1689   * @param  USARTx USART Instance
1690   * @retval None
1691   */
LL_USART_EnableCTSHWFlowCtrl(USART_TypeDef * USARTx)1692 __STATIC_INLINE void LL_USART_EnableCTSHWFlowCtrl(USART_TypeDef *USARTx)
1693 {
1694   SET_BIT(USARTx->CR3, USART_CR3_CTSE);
1695 }
1696 
1697 /**
1698   * @brief  Disable CTS HW Flow Control
1699   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
1700   *         Hardware Flow control feature is supported by the USARTx instance.
1701   * @rmtoll CR3          CTSE          LL_USART_DisableCTSHWFlowCtrl
1702   * @param  USARTx USART Instance
1703   * @retval None
1704   */
LL_USART_DisableCTSHWFlowCtrl(USART_TypeDef * USARTx)1705 __STATIC_INLINE void LL_USART_DisableCTSHWFlowCtrl(USART_TypeDef *USARTx)
1706 {
1707   CLEAR_BIT(USARTx->CR3, USART_CR3_CTSE);
1708 }
1709 
1710 /**
1711   * @brief  Configure HW Flow Control mode (both CTS and RTS)
1712   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
1713   *         Hardware Flow control feature is supported by the USARTx instance.
1714   * @rmtoll CR3          RTSE          LL_USART_SetHWFlowCtrl\n
1715   *         CR3          CTSE          LL_USART_SetHWFlowCtrl
1716   * @param  USARTx USART Instance
1717   * @param  HardwareFlowControl This parameter can be one of the following values:
1718   *         @arg @ref LL_USART_HWCONTROL_NONE
1719   *         @arg @ref LL_USART_HWCONTROL_RTS
1720   *         @arg @ref LL_USART_HWCONTROL_CTS
1721   *         @arg @ref LL_USART_HWCONTROL_RTS_CTS
1722   * @retval None
1723   */
LL_USART_SetHWFlowCtrl(USART_TypeDef * USARTx,uint32_t HardwareFlowControl)1724 __STATIC_INLINE void LL_USART_SetHWFlowCtrl(USART_TypeDef *USARTx, uint32_t HardwareFlowControl)
1725 {
1726   MODIFY_REG(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE, HardwareFlowControl);
1727 }
1728 
1729 /**
1730   * @brief  Return HW Flow Control configuration (both CTS and RTS)
1731   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
1732   *         Hardware Flow control feature is supported by the USARTx instance.
1733   * @rmtoll CR3          RTSE          LL_USART_GetHWFlowCtrl\n
1734   *         CR3          CTSE          LL_USART_GetHWFlowCtrl
1735   * @param  USARTx USART Instance
1736   * @retval Returned value can be one of the following values:
1737   *         @arg @ref LL_USART_HWCONTROL_NONE
1738   *         @arg @ref LL_USART_HWCONTROL_RTS
1739   *         @arg @ref LL_USART_HWCONTROL_CTS
1740   *         @arg @ref LL_USART_HWCONTROL_RTS_CTS
1741   */
LL_USART_GetHWFlowCtrl(const USART_TypeDef * USARTx)1742 __STATIC_INLINE uint32_t LL_USART_GetHWFlowCtrl(const USART_TypeDef *USARTx)
1743 {
1744   return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE));
1745 }
1746 
1747 /**
1748   * @brief  Enable One bit sampling method
1749   * @rmtoll CR3          ONEBIT        LL_USART_EnableOneBitSamp
1750   * @param  USARTx USART Instance
1751   * @retval None
1752   */
LL_USART_EnableOneBitSamp(USART_TypeDef * USARTx)1753 __STATIC_INLINE void LL_USART_EnableOneBitSamp(USART_TypeDef *USARTx)
1754 {
1755   SET_BIT(USARTx->CR3, USART_CR3_ONEBIT);
1756 }
1757 
1758 /**
1759   * @brief  Disable One bit sampling method
1760   * @rmtoll CR3          ONEBIT        LL_USART_DisableOneBitSamp
1761   * @param  USARTx USART Instance
1762   * @retval None
1763   */
LL_USART_DisableOneBitSamp(USART_TypeDef * USARTx)1764 __STATIC_INLINE void LL_USART_DisableOneBitSamp(USART_TypeDef *USARTx)
1765 {
1766   CLEAR_BIT(USARTx->CR3, USART_CR3_ONEBIT);
1767 }
1768 
1769 /**
1770   * @brief  Indicate if One bit sampling method is enabled
1771   * @rmtoll CR3          ONEBIT        LL_USART_IsEnabledOneBitSamp
1772   * @param  USARTx USART Instance
1773   * @retval State of bit (1 or 0).
1774   */
LL_USART_IsEnabledOneBitSamp(const USART_TypeDef * USARTx)1775 __STATIC_INLINE uint32_t LL_USART_IsEnabledOneBitSamp(const USART_TypeDef *USARTx)
1776 {
1777   return ((READ_BIT(USARTx->CR3, USART_CR3_ONEBIT) == (USART_CR3_ONEBIT)) ? 1UL : 0UL);
1778 }
1779 
1780 /**
1781   * @brief  Enable Overrun detection
1782   * @rmtoll CR3          OVRDIS        LL_USART_EnableOverrunDetect
1783   * @param  USARTx USART Instance
1784   * @retval None
1785   */
LL_USART_EnableOverrunDetect(USART_TypeDef * USARTx)1786 __STATIC_INLINE void LL_USART_EnableOverrunDetect(USART_TypeDef *USARTx)
1787 {
1788   CLEAR_BIT(USARTx->CR3, USART_CR3_OVRDIS);
1789 }
1790 
1791 /**
1792   * @brief  Disable Overrun detection
1793   * @rmtoll CR3          OVRDIS        LL_USART_DisableOverrunDetect
1794   * @param  USARTx USART Instance
1795   * @retval None
1796   */
LL_USART_DisableOverrunDetect(USART_TypeDef * USARTx)1797 __STATIC_INLINE void LL_USART_DisableOverrunDetect(USART_TypeDef *USARTx)
1798 {
1799   SET_BIT(USARTx->CR3, USART_CR3_OVRDIS);
1800 }
1801 
1802 /**
1803   * @brief  Indicate if Overrun detection is enabled
1804   * @rmtoll CR3          OVRDIS        LL_USART_IsEnabledOverrunDetect
1805   * @param  USARTx USART Instance
1806   * @retval State of bit (1 or 0).
1807   */
LL_USART_IsEnabledOverrunDetect(const USART_TypeDef * USARTx)1808 __STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(const USART_TypeDef *USARTx)
1809 {
1810   return ((READ_BIT(USARTx->CR3, USART_CR3_OVRDIS) != USART_CR3_OVRDIS) ? 1UL : 0UL);
1811 }
1812 
1813 /**
1814   * @brief  Select event type for Wake UP Interrupt Flag (WUS[1:0] bits)
1815   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
1816   *         Wake-up from Stop mode feature is supported by the USARTx instance.
1817   * @rmtoll CR3          WUS           LL_USART_SetWKUPType
1818   * @param  USARTx USART Instance
1819   * @param  Type This parameter can be one of the following values:
1820   *         @arg @ref LL_USART_WAKEUP_ON_ADDRESS
1821   *         @arg @ref LL_USART_WAKEUP_ON_STARTBIT
1822   *         @arg @ref LL_USART_WAKEUP_ON_RXNE
1823   * @retval None
1824   */
LL_USART_SetWKUPType(USART_TypeDef * USARTx,uint32_t Type)1825 __STATIC_INLINE void LL_USART_SetWKUPType(USART_TypeDef *USARTx, uint32_t Type)
1826 {
1827   MODIFY_REG(USARTx->CR3, USART_CR3_WUS, Type);
1828 }
1829 
1830 /**
1831   * @brief  Return event type for Wake UP Interrupt Flag (WUS[1:0] bits)
1832   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
1833   *         Wake-up from Stop mode feature is supported by the USARTx instance.
1834   * @rmtoll CR3          WUS           LL_USART_GetWKUPType
1835   * @param  USARTx USART Instance
1836   * @retval Returned value can be one of the following values:
1837   *         @arg @ref LL_USART_WAKEUP_ON_ADDRESS
1838   *         @arg @ref LL_USART_WAKEUP_ON_STARTBIT
1839   *         @arg @ref LL_USART_WAKEUP_ON_RXNE
1840   */
LL_USART_GetWKUPType(const USART_TypeDef * USARTx)1841 __STATIC_INLINE uint32_t LL_USART_GetWKUPType(const USART_TypeDef *USARTx)
1842 {
1843   return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_WUS));
1844 }
1845 
1846 /**
1847   * @brief  Configure USART BRR register for achieving expected Baud Rate value.
1848   * @note   Compute and set USARTDIV value in BRR Register (full BRR content)
1849   *         according to used Peripheral Clock, Oversampling mode, and expected Baud Rate values
1850   * @note   Peripheral clock and Baud rate values provided as function parameters should be valid
1851   *         (Baud rate value != 0)
1852   * @note   In case of oversampling by 16 and 8, BRR content must be greater than or equal to 16d.
1853   * @rmtoll BRR          BRR           LL_USART_SetBaudRate
1854   * @param  USARTx USART Instance
1855   * @param  PeriphClk Peripheral Clock
1856   * @param  PrescalerValue This parameter can be one of the following values:
1857   *         @arg @ref LL_USART_PRESCALER_DIV1
1858   *         @arg @ref LL_USART_PRESCALER_DIV2
1859   *         @arg @ref LL_USART_PRESCALER_DIV4
1860   *         @arg @ref LL_USART_PRESCALER_DIV6
1861   *         @arg @ref LL_USART_PRESCALER_DIV8
1862   *         @arg @ref LL_USART_PRESCALER_DIV10
1863   *         @arg @ref LL_USART_PRESCALER_DIV12
1864   *         @arg @ref LL_USART_PRESCALER_DIV16
1865   *         @arg @ref LL_USART_PRESCALER_DIV32
1866   *         @arg @ref LL_USART_PRESCALER_DIV64
1867   *         @arg @ref LL_USART_PRESCALER_DIV128
1868   *         @arg @ref LL_USART_PRESCALER_DIV256
1869   * @param  OverSampling This parameter can be one of the following values:
1870   *         @arg @ref LL_USART_OVERSAMPLING_16
1871   *         @arg @ref LL_USART_OVERSAMPLING_8
1872   * @param  BaudRate Baud Rate
1873   * @retval None
1874   */
LL_USART_SetBaudRate(USART_TypeDef * USARTx,uint32_t PeriphClk,uint32_t PrescalerValue,uint32_t OverSampling,uint32_t BaudRate)1875 __STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t PrescalerValue,
1876                                           uint32_t OverSampling,
1877                                           uint32_t BaudRate)
1878 {
1879   uint32_t usartdiv;
1880   uint32_t brrtemp;
1881 
1882   if (PrescalerValue > LL_USART_PRESCALER_DIV256)
1883   {
1884     /* Do not overstep the size of USART_PRESCALER_TAB */
1885   }
1886   else if (BaudRate == 0U)
1887   {
1888     /* Can Not divide per 0 */
1889   }
1890   else if (OverSampling == LL_USART_OVERSAMPLING_8)
1891   {
1892     usartdiv = (uint16_t)(__LL_USART_DIV_SAMPLING8(PeriphClk, (uint8_t)PrescalerValue, BaudRate));
1893     brrtemp = usartdiv & 0xFFF0U;
1894     brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U);
1895     USARTx->BRR = brrtemp;
1896   }
1897   else
1898   {
1899     USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, (uint8_t)PrescalerValue, BaudRate));
1900   }
1901 }
1902 
1903 /**
1904   * @brief  Return current Baud Rate value, according to USARTDIV present in BRR register
1905   *         (full BRR content), and to used Peripheral Clock and Oversampling mode values
1906   * @note   In case of non-initialized or invalid value stored in BRR register, value 0 will be returned.
1907   * @note   In case of oversampling by 16 and 8, BRR content must be greater than or equal to 16d.
1908   * @rmtoll BRR          BRR           LL_USART_GetBaudRate
1909   * @param  USARTx USART Instance
1910   * @param  PeriphClk Peripheral Clock
1911   * @param  PrescalerValue This parameter can be one of the following values:
1912   *         @arg @ref LL_USART_PRESCALER_DIV1
1913   *         @arg @ref LL_USART_PRESCALER_DIV2
1914   *         @arg @ref LL_USART_PRESCALER_DIV4
1915   *         @arg @ref LL_USART_PRESCALER_DIV6
1916   *         @arg @ref LL_USART_PRESCALER_DIV8
1917   *         @arg @ref LL_USART_PRESCALER_DIV10
1918   *         @arg @ref LL_USART_PRESCALER_DIV12
1919   *         @arg @ref LL_USART_PRESCALER_DIV16
1920   *         @arg @ref LL_USART_PRESCALER_DIV32
1921   *         @arg @ref LL_USART_PRESCALER_DIV64
1922   *         @arg @ref LL_USART_PRESCALER_DIV128
1923   *         @arg @ref LL_USART_PRESCALER_DIV256
1924   * @param  OverSampling This parameter can be one of the following values:
1925   *         @arg @ref LL_USART_OVERSAMPLING_16
1926   *         @arg @ref LL_USART_OVERSAMPLING_8
1927   * @retval Baud Rate
1928   */
LL_USART_GetBaudRate(const USART_TypeDef * USARTx,uint32_t PeriphClk,uint32_t PrescalerValue,uint32_t OverSampling)1929 __STATIC_INLINE uint32_t LL_USART_GetBaudRate(const USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t PrescalerValue,
1930                                               uint32_t OverSampling)
1931 {
1932   uint32_t usartdiv;
1933   uint32_t brrresult = 0x0U;
1934   uint32_t periphclkpresc = (uint32_t)(PeriphClk / (USART_PRESCALER_TAB[(uint8_t)PrescalerValue]));
1935 
1936   usartdiv = USARTx->BRR;
1937 
1938   if (usartdiv == 0U)
1939   {
1940     /* Do not perform a division by 0 */
1941   }
1942   else if (OverSampling == LL_USART_OVERSAMPLING_8)
1943   {
1944     usartdiv = (uint16_t)((usartdiv & 0xFFF0U) | ((usartdiv & 0x0007U) << 1U)) ;
1945     if (usartdiv != 0U)
1946     {
1947       brrresult = (periphclkpresc * 2U) / usartdiv;
1948     }
1949   }
1950   else
1951   {
1952     if ((usartdiv & 0xFFFFU) != 0U)
1953     {
1954       brrresult = periphclkpresc / usartdiv;
1955     }
1956   }
1957   return (brrresult);
1958 }
1959 
1960 /**
1961   * @brief  Set Receiver Time Out Value (expressed in nb of bits duration)
1962   * @rmtoll RTOR         RTO           LL_USART_SetRxTimeout
1963   * @param  USARTx USART Instance
1964   * @param  Timeout Value between Min_Data=0x00 and Max_Data=0x00FFFFFF
1965   * @retval None
1966   */
LL_USART_SetRxTimeout(USART_TypeDef * USARTx,uint32_t Timeout)1967 __STATIC_INLINE void LL_USART_SetRxTimeout(USART_TypeDef *USARTx, uint32_t Timeout)
1968 {
1969   MODIFY_REG(USARTx->RTOR, USART_RTOR_RTO, Timeout);
1970 }
1971 
1972 /**
1973   * @brief  Get Receiver Time Out Value (expressed in nb of bits duration)
1974   * @rmtoll RTOR         RTO           LL_USART_GetRxTimeout
1975   * @param  USARTx USART Instance
1976   * @retval Value between Min_Data=0x00 and Max_Data=0x00FFFFFF
1977   */
LL_USART_GetRxTimeout(const USART_TypeDef * USARTx)1978 __STATIC_INLINE uint32_t LL_USART_GetRxTimeout(const USART_TypeDef *USARTx)
1979 {
1980   return (uint32_t)(READ_BIT(USARTx->RTOR, USART_RTOR_RTO));
1981 }
1982 
1983 /**
1984   * @brief  Set Block Length value in reception
1985   * @rmtoll RTOR         BLEN          LL_USART_SetBlockLength
1986   * @param  USARTx USART Instance
1987   * @param  BlockLength Value between Min_Data=0x00 and Max_Data=0xFF
1988   * @retval None
1989   */
LL_USART_SetBlockLength(USART_TypeDef * USARTx,uint32_t BlockLength)1990 __STATIC_INLINE void LL_USART_SetBlockLength(USART_TypeDef *USARTx, uint32_t BlockLength)
1991 {
1992   MODIFY_REG(USARTx->RTOR, USART_RTOR_BLEN, BlockLength << USART_RTOR_BLEN_Pos);
1993 }
1994 
1995 /**
1996   * @brief  Get Block Length value in reception
1997   * @rmtoll RTOR         BLEN          LL_USART_GetBlockLength
1998   * @param  USARTx USART Instance
1999   * @retval Value between Min_Data=0x00 and Max_Data=0xFF
2000   */
LL_USART_GetBlockLength(const USART_TypeDef * USARTx)2001 __STATIC_INLINE uint32_t LL_USART_GetBlockLength(const USART_TypeDef *USARTx)
2002 {
2003   return (uint32_t)(READ_BIT(USARTx->RTOR, USART_RTOR_BLEN) >> USART_RTOR_BLEN_Pos);
2004 }
2005 
2006 /**
2007   * @}
2008   */
2009 
2010 /** @defgroup USART_LL_EF_Configuration_IRDA Configuration functions related to Irda feature
2011   * @{
2012   */
2013 
2014 /**
2015   * @brief  Enable IrDA mode
2016   * @note   Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
2017   *         IrDA feature is supported by the USARTx instance.
2018   * @rmtoll CR3          IREN          LL_USART_EnableIrda
2019   * @param  USARTx USART Instance
2020   * @retval None
2021   */
LL_USART_EnableIrda(USART_TypeDef * USARTx)2022 __STATIC_INLINE void LL_USART_EnableIrda(USART_TypeDef *USARTx)
2023 {
2024   SET_BIT(USARTx->CR3, USART_CR3_IREN);
2025 }
2026 
2027 /**
2028   * @brief  Disable IrDA mode
2029   * @note   Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
2030   *         IrDA feature is supported by the USARTx instance.
2031   * @rmtoll CR3          IREN          LL_USART_DisableIrda
2032   * @param  USARTx USART Instance
2033   * @retval None
2034   */
LL_USART_DisableIrda(USART_TypeDef * USARTx)2035 __STATIC_INLINE void LL_USART_DisableIrda(USART_TypeDef *USARTx)
2036 {
2037   CLEAR_BIT(USARTx->CR3, USART_CR3_IREN);
2038 }
2039 
2040 /**
2041   * @brief  Indicate if IrDA mode is enabled
2042   * @note   Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
2043   *         IrDA feature is supported by the USARTx instance.
2044   * @rmtoll CR3          IREN          LL_USART_IsEnabledIrda
2045   * @param  USARTx USART Instance
2046   * @retval State of bit (1 or 0).
2047   */
LL_USART_IsEnabledIrda(const USART_TypeDef * USARTx)2048 __STATIC_INLINE uint32_t LL_USART_IsEnabledIrda(const USART_TypeDef *USARTx)
2049 {
2050   return ((READ_BIT(USARTx->CR3, USART_CR3_IREN) == (USART_CR3_IREN)) ? 1UL : 0UL);
2051 }
2052 
2053 /**
2054   * @brief  Configure IrDA Power Mode (Normal or Low Power)
2055   * @note   Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
2056   *         IrDA feature is supported by the USARTx instance.
2057   * @rmtoll CR3          IRLP          LL_USART_SetIrdaPowerMode
2058   * @param  USARTx USART Instance
2059   * @param  PowerMode This parameter can be one of the following values:
2060   *         @arg @ref LL_USART_IRDA_POWER_NORMAL
2061   *         @arg @ref LL_USART_IRDA_POWER_LOW
2062   * @retval None
2063   */
LL_USART_SetIrdaPowerMode(USART_TypeDef * USARTx,uint32_t PowerMode)2064 __STATIC_INLINE void LL_USART_SetIrdaPowerMode(USART_TypeDef *USARTx, uint32_t PowerMode)
2065 {
2066   MODIFY_REG(USARTx->CR3, USART_CR3_IRLP, PowerMode);
2067 }
2068 
2069 /**
2070   * @brief  Retrieve IrDA Power Mode configuration (Normal or Low Power)
2071   * @note   Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
2072   *         IrDA feature is supported by the USARTx instance.
2073   * @rmtoll CR3          IRLP          LL_USART_GetIrdaPowerMode
2074   * @param  USARTx USART Instance
2075   * @retval Returned value can be one of the following values:
2076   *         @arg @ref LL_USART_IRDA_POWER_NORMAL
2077   *         @arg @ref LL_USART_PHASE_2EDGE
2078   */
LL_USART_GetIrdaPowerMode(const USART_TypeDef * USARTx)2079 __STATIC_INLINE uint32_t LL_USART_GetIrdaPowerMode(const USART_TypeDef *USARTx)
2080 {
2081   return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_IRLP));
2082 }
2083 
2084 /**
2085   * @brief  Set Irda prescaler value, used for dividing the USART clock source
2086   *         to achieve the Irda Low Power frequency (8 bits value)
2087   * @note   Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
2088   *         IrDA feature is supported by the USARTx instance.
2089   * @rmtoll GTPR         PSC           LL_USART_SetIrdaPrescaler
2090   * @param  USARTx USART Instance
2091   * @param  PrescalerValue Value between Min_Data=0x00 and Max_Data=0xFF
2092   * @retval None
2093   */
LL_USART_SetIrdaPrescaler(USART_TypeDef * USARTx,uint32_t PrescalerValue)2094 __STATIC_INLINE void LL_USART_SetIrdaPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue)
2095 {
2096   MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, (uint16_t)PrescalerValue);
2097 }
2098 
2099 /**
2100   * @brief  Return Irda prescaler value, used for dividing the USART clock source
2101   *         to achieve the Irda Low Power frequency (8 bits value)
2102   * @note   Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
2103   *         IrDA feature is supported by the USARTx instance.
2104   * @rmtoll GTPR         PSC           LL_USART_GetIrdaPrescaler
2105   * @param  USARTx USART Instance
2106   * @retval Irda prescaler value (Value between Min_Data=0x00 and Max_Data=0xFF)
2107   */
LL_USART_GetIrdaPrescaler(const USART_TypeDef * USARTx)2108 __STATIC_INLINE uint32_t LL_USART_GetIrdaPrescaler(const USART_TypeDef *USARTx)
2109 {
2110   return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC));
2111 }
2112 
2113 /**
2114   * @}
2115   */
2116 
2117 /** @defgroup USART_LL_EF_Configuration_Smartcard Configuration functions related to Smartcard feature
2118   * @{
2119   */
2120 
2121 /**
2122   * @brief  Enable Smartcard NACK transmission
2123   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2124   *         Smartcard feature is supported by the USARTx instance.
2125   * @rmtoll CR3          NACK          LL_USART_EnableSmartcardNACK
2126   * @param  USARTx USART Instance
2127   * @retval None
2128   */
LL_USART_EnableSmartcardNACK(USART_TypeDef * USARTx)2129 __STATIC_INLINE void LL_USART_EnableSmartcardNACK(USART_TypeDef *USARTx)
2130 {
2131   SET_BIT(USARTx->CR3, USART_CR3_NACK);
2132 }
2133 
2134 /**
2135   * @brief  Disable Smartcard NACK transmission
2136   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2137   *         Smartcard feature is supported by the USARTx instance.
2138   * @rmtoll CR3          NACK          LL_USART_DisableSmartcardNACK
2139   * @param  USARTx USART Instance
2140   * @retval None
2141   */
LL_USART_DisableSmartcardNACK(USART_TypeDef * USARTx)2142 __STATIC_INLINE void LL_USART_DisableSmartcardNACK(USART_TypeDef *USARTx)
2143 {
2144   CLEAR_BIT(USARTx->CR3, USART_CR3_NACK);
2145 }
2146 
2147 /**
2148   * @brief  Indicate if Smartcard NACK transmission is enabled
2149   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2150   *         Smartcard feature is supported by the USARTx instance.
2151   * @rmtoll CR3          NACK          LL_USART_IsEnabledSmartcardNACK
2152   * @param  USARTx USART Instance
2153   * @retval State of bit (1 or 0).
2154   */
LL_USART_IsEnabledSmartcardNACK(const USART_TypeDef * USARTx)2155 __STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcardNACK(const USART_TypeDef *USARTx)
2156 {
2157   return ((READ_BIT(USARTx->CR3, USART_CR3_NACK) == (USART_CR3_NACK)) ? 1UL : 0UL);
2158 }
2159 
2160 /**
2161   * @brief  Enable Smartcard mode
2162   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2163   *         Smartcard feature is supported by the USARTx instance.
2164   * @rmtoll CR3          SCEN          LL_USART_EnableSmartcard
2165   * @param  USARTx USART Instance
2166   * @retval None
2167   */
LL_USART_EnableSmartcard(USART_TypeDef * USARTx)2168 __STATIC_INLINE void LL_USART_EnableSmartcard(USART_TypeDef *USARTx)
2169 {
2170   SET_BIT(USARTx->CR3, USART_CR3_SCEN);
2171 }
2172 
2173 /**
2174   * @brief  Disable Smartcard mode
2175   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2176   *         Smartcard feature is supported by the USARTx instance.
2177   * @rmtoll CR3          SCEN          LL_USART_DisableSmartcard
2178   * @param  USARTx USART Instance
2179   * @retval None
2180   */
LL_USART_DisableSmartcard(USART_TypeDef * USARTx)2181 __STATIC_INLINE void LL_USART_DisableSmartcard(USART_TypeDef *USARTx)
2182 {
2183   CLEAR_BIT(USARTx->CR3, USART_CR3_SCEN);
2184 }
2185 
2186 /**
2187   * @brief  Indicate if Smartcard mode is enabled
2188   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2189   *         Smartcard feature is supported by the USARTx instance.
2190   * @rmtoll CR3          SCEN          LL_USART_IsEnabledSmartcard
2191   * @param  USARTx USART Instance
2192   * @retval State of bit (1 or 0).
2193   */
LL_USART_IsEnabledSmartcard(const USART_TypeDef * USARTx)2194 __STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcard(const USART_TypeDef *USARTx)
2195 {
2196   return ((READ_BIT(USARTx->CR3, USART_CR3_SCEN) == (USART_CR3_SCEN)) ? 1UL : 0UL);
2197 }
2198 
2199 /**
2200   * @brief  Set Smartcard Auto-Retry Count value (SCARCNT[2:0] bits)
2201   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2202   *         Smartcard feature is supported by the USARTx instance.
2203   * @note   This bit-field specifies the number of retries in transmit and receive, in Smartcard mode.
2204   *         In transmission mode, it specifies the number of automatic retransmission retries, before
2205   *         generating a transmission error (FE bit set).
2206   *         In reception mode, it specifies the number or erroneous reception trials, before generating a
2207   *         reception error (RXNE and PE bits set)
2208   * @rmtoll CR3          SCARCNT       LL_USART_SetSmartcardAutoRetryCount
2209   * @param  USARTx USART Instance
2210   * @param  AutoRetryCount Value between Min_Data=0 and Max_Data=7
2211   * @retval None
2212   */
LL_USART_SetSmartcardAutoRetryCount(USART_TypeDef * USARTx,uint32_t AutoRetryCount)2213 __STATIC_INLINE void LL_USART_SetSmartcardAutoRetryCount(USART_TypeDef *USARTx, uint32_t AutoRetryCount)
2214 {
2215   MODIFY_REG(USARTx->CR3, USART_CR3_SCARCNT, AutoRetryCount << USART_CR3_SCARCNT_Pos);
2216 }
2217 
2218 /**
2219   * @brief  Return Smartcard Auto-Retry Count value (SCARCNT[2:0] bits)
2220   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2221   *         Smartcard feature is supported by the USARTx instance.
2222   * @rmtoll CR3          SCARCNT       LL_USART_GetSmartcardAutoRetryCount
2223   * @param  USARTx USART Instance
2224   * @retval Smartcard Auto-Retry Count value (Value between Min_Data=0 and Max_Data=7)
2225   */
LL_USART_GetSmartcardAutoRetryCount(const USART_TypeDef * USARTx)2226 __STATIC_INLINE uint32_t LL_USART_GetSmartcardAutoRetryCount(const USART_TypeDef *USARTx)
2227 {
2228   return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_SCARCNT) >> USART_CR3_SCARCNT_Pos);
2229 }
2230 
2231 /**
2232   * @brief  Set Smartcard prescaler value, used for dividing the USART clock
2233   *         source to provide the SMARTCARD Clock (5 bits value)
2234   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2235   *         Smartcard feature is supported by the USARTx instance.
2236   * @rmtoll GTPR         PSC           LL_USART_SetSmartcardPrescaler
2237   * @param  USARTx USART Instance
2238   * @param  PrescalerValue Value between Min_Data=0 and Max_Data=31
2239   * @retval None
2240   */
LL_USART_SetSmartcardPrescaler(USART_TypeDef * USARTx,uint32_t PrescalerValue)2241 __STATIC_INLINE void LL_USART_SetSmartcardPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue)
2242 {
2243   MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, (uint16_t)PrescalerValue);
2244 }
2245 
2246 /**
2247   * @brief  Return Smartcard prescaler value, used for dividing the USART clock
2248   *         source to provide the SMARTCARD Clock (5 bits value)
2249   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2250   *         Smartcard feature is supported by the USARTx instance.
2251   * @rmtoll GTPR         PSC           LL_USART_GetSmartcardPrescaler
2252   * @param  USARTx USART Instance
2253   * @retval Smartcard prescaler value (Value between Min_Data=0 and Max_Data=31)
2254   */
LL_USART_GetSmartcardPrescaler(const USART_TypeDef * USARTx)2255 __STATIC_INLINE uint32_t LL_USART_GetSmartcardPrescaler(const USART_TypeDef *USARTx)
2256 {
2257   return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC));
2258 }
2259 
2260 /**
2261   * @brief  Set Smartcard Guard time value, expressed in nb of baud clocks periods
2262   *         (GT[7:0] bits : Guard time value)
2263   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2264   *         Smartcard feature is supported by the USARTx instance.
2265   * @rmtoll GTPR         GT            LL_USART_SetSmartcardGuardTime
2266   * @param  USARTx USART Instance
2267   * @param  GuardTime Value between Min_Data=0x00 and Max_Data=0xFF
2268   * @retval None
2269   */
LL_USART_SetSmartcardGuardTime(USART_TypeDef * USARTx,uint32_t GuardTime)2270 __STATIC_INLINE void LL_USART_SetSmartcardGuardTime(USART_TypeDef *USARTx, uint32_t GuardTime)
2271 {
2272   MODIFY_REG(USARTx->GTPR, USART_GTPR_GT, (uint16_t)(GuardTime << USART_GTPR_GT_Pos));
2273 }
2274 
2275 /**
2276   * @brief  Return Smartcard Guard time value, expressed in nb of baud clocks periods
2277   *         (GT[7:0] bits : Guard time value)
2278   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2279   *         Smartcard feature is supported by the USARTx instance.
2280   * @rmtoll GTPR         GT            LL_USART_GetSmartcardGuardTime
2281   * @param  USARTx USART Instance
2282   * @retval Smartcard Guard time value (Value between Min_Data=0x00 and Max_Data=0xFF)
2283   */
LL_USART_GetSmartcardGuardTime(const USART_TypeDef * USARTx)2284 __STATIC_INLINE uint32_t LL_USART_GetSmartcardGuardTime(const USART_TypeDef *USARTx)
2285 {
2286   return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_GT) >> USART_GTPR_GT_Pos);
2287 }
2288 
2289 /**
2290   * @}
2291   */
2292 
2293 /** @defgroup USART_LL_EF_Configuration_HalfDuplex Configuration functions related to Half Duplex feature
2294   * @{
2295   */
2296 
2297 /**
2298   * @brief  Enable Single Wire Half-Duplex mode
2299   * @note   Macro IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not
2300   *         Half-Duplex mode is supported by the USARTx instance.
2301   * @rmtoll CR3          HDSEL         LL_USART_EnableHalfDuplex
2302   * @param  USARTx USART Instance
2303   * @retval None
2304   */
LL_USART_EnableHalfDuplex(USART_TypeDef * USARTx)2305 __STATIC_INLINE void LL_USART_EnableHalfDuplex(USART_TypeDef *USARTx)
2306 {
2307   SET_BIT(USARTx->CR3, USART_CR3_HDSEL);
2308 }
2309 
2310 /**
2311   * @brief  Disable Single Wire Half-Duplex mode
2312   * @note   Macro IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not
2313   *         Half-Duplex mode is supported by the USARTx instance.
2314   * @rmtoll CR3          HDSEL         LL_USART_DisableHalfDuplex
2315   * @param  USARTx USART Instance
2316   * @retval None
2317   */
LL_USART_DisableHalfDuplex(USART_TypeDef * USARTx)2318 __STATIC_INLINE void LL_USART_DisableHalfDuplex(USART_TypeDef *USARTx)
2319 {
2320   CLEAR_BIT(USARTx->CR3, USART_CR3_HDSEL);
2321 }
2322 
2323 /**
2324   * @brief  Indicate if Single Wire Half-Duplex mode is enabled
2325   * @note   Macro IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not
2326   *         Half-Duplex mode is supported by the USARTx instance.
2327   * @rmtoll CR3          HDSEL         LL_USART_IsEnabledHalfDuplex
2328   * @param  USARTx USART Instance
2329   * @retval State of bit (1 or 0).
2330   */
LL_USART_IsEnabledHalfDuplex(const USART_TypeDef * USARTx)2331 __STATIC_INLINE uint32_t LL_USART_IsEnabledHalfDuplex(const USART_TypeDef *USARTx)
2332 {
2333   return ((READ_BIT(USARTx->CR3, USART_CR3_HDSEL) == (USART_CR3_HDSEL)) ? 1UL : 0UL);
2334 }
2335 
2336 /**
2337   * @}
2338   */
2339 
2340 /** @defgroup USART_LL_EF_Configuration_SPI_SLAVE Configuration functions related to SPI Slave feature
2341   * @{
2342   */
2343 /**
2344   * @brief  Enable SPI Synchronous Slave mode
2345   * @note   Macro IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not
2346   *         SPI Slave mode feature is supported by the USARTx instance.
2347   * @rmtoll CR2          SLVEN         LL_USART_EnableSPISlave
2348   * @param  USARTx USART Instance
2349   * @retval None
2350   */
LL_USART_EnableSPISlave(USART_TypeDef * USARTx)2351 __STATIC_INLINE void LL_USART_EnableSPISlave(USART_TypeDef *USARTx)
2352 {
2353   SET_BIT(USARTx->CR2, USART_CR2_SLVEN);
2354 }
2355 
2356 /**
2357   * @brief  Disable SPI Synchronous Slave mode
2358   * @note   Macro IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not
2359   *         SPI Slave mode feature is supported by the USARTx instance.
2360   * @rmtoll CR2          SLVEN         LL_USART_DisableSPISlave
2361   * @param  USARTx USART Instance
2362   * @retval None
2363   */
LL_USART_DisableSPISlave(USART_TypeDef * USARTx)2364 __STATIC_INLINE void LL_USART_DisableSPISlave(USART_TypeDef *USARTx)
2365 {
2366   CLEAR_BIT(USARTx->CR2, USART_CR2_SLVEN);
2367 }
2368 
2369 /**
2370   * @brief  Indicate if  SPI Synchronous Slave mode is enabled
2371   * @note   Macro IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not
2372   *         SPI Slave mode feature is supported by the USARTx instance.
2373   * @rmtoll CR2          SLVEN         LL_USART_IsEnabledSPISlave
2374   * @param  USARTx USART Instance
2375   * @retval State of bit (1 or 0).
2376   */
LL_USART_IsEnabledSPISlave(const USART_TypeDef * USARTx)2377 __STATIC_INLINE uint32_t LL_USART_IsEnabledSPISlave(const USART_TypeDef *USARTx)
2378 {
2379   return ((READ_BIT(USARTx->CR2, USART_CR2_SLVEN) == (USART_CR2_SLVEN)) ? 1UL : 0UL);
2380 }
2381 
2382 /**
2383   * @brief  Enable SPI Slave Selection using NSS input pin
2384   * @note   Macro IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not
2385   *         SPI Slave mode feature is supported by the USARTx instance.
2386   * @note   SPI Slave Selection depends on NSS input pin
2387   *         (The slave is selected when NSS is low and deselected when NSS is high).
2388   * @rmtoll CR2          DIS_NSS       LL_USART_EnableSPISlaveSelect
2389   * @param  USARTx USART Instance
2390   * @retval None
2391   */
LL_USART_EnableSPISlaveSelect(USART_TypeDef * USARTx)2392 __STATIC_INLINE void LL_USART_EnableSPISlaveSelect(USART_TypeDef *USARTx)
2393 {
2394   CLEAR_BIT(USARTx->CR2, USART_CR2_DIS_NSS);
2395 }
2396 
2397 /**
2398   * @brief  Disable SPI Slave Selection using NSS input pin
2399   * @note   Macro IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not
2400   *         SPI Slave mode feature is supported by the USARTx instance.
2401   * @note   SPI Slave will be always selected and NSS input pin will be ignored.
2402   * @rmtoll CR2          DIS_NSS       LL_USART_DisableSPISlaveSelect
2403   * @param  USARTx USART Instance
2404   * @retval None
2405   */
LL_USART_DisableSPISlaveSelect(USART_TypeDef * USARTx)2406 __STATIC_INLINE void LL_USART_DisableSPISlaveSelect(USART_TypeDef *USARTx)
2407 {
2408   SET_BIT(USARTx->CR2, USART_CR2_DIS_NSS);
2409 }
2410 
2411 /**
2412   * @brief  Indicate if  SPI Slave Selection depends on NSS input pin
2413   * @note   Macro IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not
2414   *         SPI Slave mode feature is supported by the USARTx instance.
2415   * @rmtoll CR2          DIS_NSS       LL_USART_IsEnabledSPISlaveSelect
2416   * @param  USARTx USART Instance
2417   * @retval State of bit (1 or 0).
2418   */
LL_USART_IsEnabledSPISlaveSelect(const USART_TypeDef * USARTx)2419 __STATIC_INLINE uint32_t LL_USART_IsEnabledSPISlaveSelect(const USART_TypeDef *USARTx)
2420 {
2421   return ((READ_BIT(USARTx->CR2, USART_CR2_DIS_NSS) != (USART_CR2_DIS_NSS)) ? 1UL : 0UL);
2422 }
2423 
2424 /**
2425   * @}
2426   */
2427 
2428 /** @defgroup USART_LL_EF_Configuration_LIN Configuration functions related to LIN feature
2429   * @{
2430   */
2431 
2432 /**
2433   * @brief  Set LIN Break Detection Length
2434   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
2435   *         LIN feature is supported by the USARTx instance.
2436   * @rmtoll CR2          LBDL          LL_USART_SetLINBrkDetectionLen
2437   * @param  USARTx USART Instance
2438   * @param  LINBDLength This parameter can be one of the following values:
2439   *         @arg @ref LL_USART_LINBREAK_DETECT_10B
2440   *         @arg @ref LL_USART_LINBREAK_DETECT_11B
2441   * @retval None
2442   */
LL_USART_SetLINBrkDetectionLen(USART_TypeDef * USARTx,uint32_t LINBDLength)2443 __STATIC_INLINE void LL_USART_SetLINBrkDetectionLen(USART_TypeDef *USARTx, uint32_t LINBDLength)
2444 {
2445   MODIFY_REG(USARTx->CR2, USART_CR2_LBDL, LINBDLength);
2446 }
2447 
2448 /**
2449   * @brief  Return LIN Break Detection Length
2450   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
2451   *         LIN feature is supported by the USARTx instance.
2452   * @rmtoll CR2          LBDL          LL_USART_GetLINBrkDetectionLen
2453   * @param  USARTx USART Instance
2454   * @retval Returned value can be one of the following values:
2455   *         @arg @ref LL_USART_LINBREAK_DETECT_10B
2456   *         @arg @ref LL_USART_LINBREAK_DETECT_11B
2457   */
LL_USART_GetLINBrkDetectionLen(const USART_TypeDef * USARTx)2458 __STATIC_INLINE uint32_t LL_USART_GetLINBrkDetectionLen(const USART_TypeDef *USARTx)
2459 {
2460   return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBDL));
2461 }
2462 
2463 /**
2464   * @brief  Enable LIN mode
2465   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
2466   *         LIN feature is supported by the USARTx instance.
2467   * @rmtoll CR2          LINEN         LL_USART_EnableLIN
2468   * @param  USARTx USART Instance
2469   * @retval None
2470   */
LL_USART_EnableLIN(USART_TypeDef * USARTx)2471 __STATIC_INLINE void LL_USART_EnableLIN(USART_TypeDef *USARTx)
2472 {
2473   SET_BIT(USARTx->CR2, USART_CR2_LINEN);
2474 }
2475 
2476 /**
2477   * @brief  Disable LIN mode
2478   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
2479   *         LIN feature is supported by the USARTx instance.
2480   * @rmtoll CR2          LINEN         LL_USART_DisableLIN
2481   * @param  USARTx USART Instance
2482   * @retval None
2483   */
LL_USART_DisableLIN(USART_TypeDef * USARTx)2484 __STATIC_INLINE void LL_USART_DisableLIN(USART_TypeDef *USARTx)
2485 {
2486   CLEAR_BIT(USARTx->CR2, USART_CR2_LINEN);
2487 }
2488 
2489 /**
2490   * @brief  Indicate if LIN mode is enabled
2491   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
2492   *         LIN feature is supported by the USARTx instance.
2493   * @rmtoll CR2          LINEN         LL_USART_IsEnabledLIN
2494   * @param  USARTx USART Instance
2495   * @retval State of bit (1 or 0).
2496   */
LL_USART_IsEnabledLIN(const USART_TypeDef * USARTx)2497 __STATIC_INLINE uint32_t LL_USART_IsEnabledLIN(const USART_TypeDef *USARTx)
2498 {
2499   return ((READ_BIT(USARTx->CR2, USART_CR2_LINEN) == (USART_CR2_LINEN)) ? 1UL : 0UL);
2500 }
2501 
2502 /**
2503   * @}
2504   */
2505 
2506 /** @defgroup USART_LL_EF_Configuration_DE Configuration functions related to Driver Enable feature
2507   * @{
2508   */
2509 
2510 /**
2511   * @brief  Set DEDT (Driver Enable De-Assertion Time), Time value expressed on 5 bits ([4:0] bits).
2512   * @note   Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not
2513   *         Driver Enable feature is supported by the USARTx instance.
2514   * @rmtoll CR1          DEDT          LL_USART_SetDEDeassertionTime
2515   * @param  USARTx USART Instance
2516   * @param  Time Value between Min_Data=0 and Max_Data=31
2517   * @retval None
2518   */
LL_USART_SetDEDeassertionTime(USART_TypeDef * USARTx,uint32_t Time)2519 __STATIC_INLINE void LL_USART_SetDEDeassertionTime(USART_TypeDef *USARTx, uint32_t Time)
2520 {
2521   MODIFY_REG(USARTx->CR1, USART_CR1_DEDT, Time << USART_CR1_DEDT_Pos);
2522 }
2523 
2524 /**
2525   * @brief  Return DEDT (Driver Enable De-Assertion Time)
2526   * @note   Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not
2527   *         Driver Enable feature is supported by the USARTx instance.
2528   * @rmtoll CR1          DEDT          LL_USART_GetDEDeassertionTime
2529   * @param  USARTx USART Instance
2530   * @retval Time value expressed on 5 bits ([4:0] bits) : Value between Min_Data=0 and Max_Data=31
2531   */
LL_USART_GetDEDeassertionTime(const USART_TypeDef * USARTx)2532 __STATIC_INLINE uint32_t LL_USART_GetDEDeassertionTime(const USART_TypeDef *USARTx)
2533 {
2534   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_DEDT) >> USART_CR1_DEDT_Pos);
2535 }
2536 
2537 /**
2538   * @brief  Set DEAT (Driver Enable Assertion Time), Time value expressed on 5 bits ([4:0] bits).
2539   * @note   Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not
2540   *         Driver Enable feature is supported by the USARTx instance.
2541   * @rmtoll CR1          DEAT          LL_USART_SetDEAssertionTime
2542   * @param  USARTx USART Instance
2543   * @param  Time Value between Min_Data=0 and Max_Data=31
2544   * @retval None
2545   */
LL_USART_SetDEAssertionTime(USART_TypeDef * USARTx,uint32_t Time)2546 __STATIC_INLINE void LL_USART_SetDEAssertionTime(USART_TypeDef *USARTx, uint32_t Time)
2547 {
2548   MODIFY_REG(USARTx->CR1, USART_CR1_DEAT, Time << USART_CR1_DEAT_Pos);
2549 }
2550 
2551 /**
2552   * @brief  Return DEAT (Driver Enable Assertion Time)
2553   * @note   Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not
2554   *         Driver Enable feature is supported by the USARTx instance.
2555   * @rmtoll CR1          DEAT          LL_USART_GetDEAssertionTime
2556   * @param  USARTx USART Instance
2557   * @retval Time value expressed on 5 bits ([4:0] bits) : Value between Min_Data=0 and Max_Data=31
2558   */
LL_USART_GetDEAssertionTime(const USART_TypeDef * USARTx)2559 __STATIC_INLINE uint32_t LL_USART_GetDEAssertionTime(const USART_TypeDef *USARTx)
2560 {
2561   return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_DEAT) >> USART_CR1_DEAT_Pos);
2562 }
2563 
2564 /**
2565   * @brief  Enable Driver Enable (DE) Mode
2566   * @note   Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not
2567   *         Driver Enable feature is supported by the USARTx instance.
2568   * @rmtoll CR3          DEM           LL_USART_EnableDEMode
2569   * @param  USARTx USART Instance
2570   * @retval None
2571   */
LL_USART_EnableDEMode(USART_TypeDef * USARTx)2572 __STATIC_INLINE void LL_USART_EnableDEMode(USART_TypeDef *USARTx)
2573 {
2574   SET_BIT(USARTx->CR3, USART_CR3_DEM);
2575 }
2576 
2577 /**
2578   * @brief  Disable Driver Enable (DE) Mode
2579   * @note   Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not
2580   *         Driver Enable feature is supported by the USARTx instance.
2581   * @rmtoll CR3          DEM           LL_USART_DisableDEMode
2582   * @param  USARTx USART Instance
2583   * @retval None
2584   */
LL_USART_DisableDEMode(USART_TypeDef * USARTx)2585 __STATIC_INLINE void LL_USART_DisableDEMode(USART_TypeDef *USARTx)
2586 {
2587   CLEAR_BIT(USARTx->CR3, USART_CR3_DEM);
2588 }
2589 
2590 /**
2591   * @brief  Indicate if Driver Enable (DE) Mode is enabled
2592   * @note   Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not
2593   *         Driver Enable feature is supported by the USARTx instance.
2594   * @rmtoll CR3          DEM           LL_USART_IsEnabledDEMode
2595   * @param  USARTx USART Instance
2596   * @retval State of bit (1 or 0).
2597   */
LL_USART_IsEnabledDEMode(const USART_TypeDef * USARTx)2598 __STATIC_INLINE uint32_t LL_USART_IsEnabledDEMode(const USART_TypeDef *USARTx)
2599 {
2600   return ((READ_BIT(USARTx->CR3, USART_CR3_DEM) == (USART_CR3_DEM)) ? 1UL : 0UL);
2601 }
2602 
2603 /**
2604   * @brief  Select Driver Enable Polarity
2605   * @note   Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not
2606   *         Driver Enable feature is supported by the USARTx instance.
2607   * @rmtoll CR3          DEP           LL_USART_SetDESignalPolarity
2608   * @param  USARTx USART Instance
2609   * @param  Polarity This parameter can be one of the following values:
2610   *         @arg @ref LL_USART_DE_POLARITY_HIGH
2611   *         @arg @ref LL_USART_DE_POLARITY_LOW
2612   * @retval None
2613   */
LL_USART_SetDESignalPolarity(USART_TypeDef * USARTx,uint32_t Polarity)2614 __STATIC_INLINE void LL_USART_SetDESignalPolarity(USART_TypeDef *USARTx, uint32_t Polarity)
2615 {
2616   MODIFY_REG(USARTx->CR3, USART_CR3_DEP, Polarity);
2617 }
2618 
2619 /**
2620   * @brief  Return Driver Enable Polarity
2621   * @note   Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not
2622   *         Driver Enable feature is supported by the USARTx instance.
2623   * @rmtoll CR3          DEP           LL_USART_GetDESignalPolarity
2624   * @param  USARTx USART Instance
2625   * @retval Returned value can be one of the following values:
2626   *         @arg @ref LL_USART_DE_POLARITY_HIGH
2627   *         @arg @ref LL_USART_DE_POLARITY_LOW
2628   */
LL_USART_GetDESignalPolarity(const USART_TypeDef * USARTx)2629 __STATIC_INLINE uint32_t LL_USART_GetDESignalPolarity(const USART_TypeDef *USARTx)
2630 {
2631   return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_DEP));
2632 }
2633 
2634 /**
2635   * @}
2636   */
2637 
2638 /** @defgroup USART_LL_EF_AdvancedConfiguration Advanced Configurations services
2639   * @{
2640   */
2641 
2642 /**
2643   * @brief  Perform basic configuration of USART for enabling use in Asynchronous Mode (UART)
2644   * @note   In UART mode, the following bits must be kept cleared:
2645   *           - LINEN bit in the USART_CR2 register,
2646   *           - CLKEN bit in the USART_CR2 register,
2647   *           - SCEN bit in the USART_CR3 register,
2648   *           - IREN bit in the USART_CR3 register,
2649   *           - HDSEL bit in the USART_CR3 register.
2650   * @note   Call of this function is equivalent to following function call sequence :
2651   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
2652   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
2653   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
2654   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
2655   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
2656   * @note   Other remaining configurations items related to Asynchronous Mode
2657   *         (as Baud Rate, Word length, Parity, ...) should be set using
2658   *         dedicated functions
2659   * @rmtoll CR2          LINEN         LL_USART_ConfigAsyncMode\n
2660   *         CR2          CLKEN         LL_USART_ConfigAsyncMode\n
2661   *         CR3          SCEN          LL_USART_ConfigAsyncMode\n
2662   *         CR3          IREN          LL_USART_ConfigAsyncMode\n
2663   *         CR3          HDSEL         LL_USART_ConfigAsyncMode
2664   * @param  USARTx USART Instance
2665   * @retval None
2666   */
LL_USART_ConfigAsyncMode(USART_TypeDef * USARTx)2667 __STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx)
2668 {
2669   /* In Asynchronous mode, the following bits must be kept cleared:
2670   - LINEN, CLKEN bits in the USART_CR2 register,
2671   - SCEN, IREN and HDSEL bits in the USART_CR3 register.
2672   */
2673   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
2674   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
2675 }
2676 
2677 /**
2678   * @brief  Perform basic configuration of USART for enabling use in Synchronous Mode
2679   * @note   In Synchronous mode, the following bits must be kept cleared:
2680   *           - LINEN bit in the USART_CR2 register,
2681   *           - SCEN bit in the USART_CR3 register,
2682   *           - IREN bit in the USART_CR3 register,
2683   *           - HDSEL bit in the USART_CR3 register.
2684   *         This function also sets the USART in Synchronous mode.
2685   * @note   Macro IS_USART_INSTANCE(USARTx) can be used to check whether or not
2686   *         Synchronous mode is supported by the USARTx instance.
2687   * @note   Call of this function is equivalent to following function call sequence :
2688   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
2689   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
2690   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
2691   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
2692   *         - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function
2693   * @note   Other remaining configurations items related to Synchronous Mode
2694   *         (as Baud Rate, Word length, Parity, Clock Polarity, ...) should be set using
2695   *         dedicated functions
2696   * @rmtoll CR2          LINEN         LL_USART_ConfigSyncMode\n
2697   *         CR2          CLKEN         LL_USART_ConfigSyncMode\n
2698   *         CR3          SCEN          LL_USART_ConfigSyncMode\n
2699   *         CR3          IREN          LL_USART_ConfigSyncMode\n
2700   *         CR3          HDSEL         LL_USART_ConfigSyncMode
2701   * @param  USARTx USART Instance
2702   * @retval None
2703   */
LL_USART_ConfigSyncMode(USART_TypeDef * USARTx)2704 __STATIC_INLINE void LL_USART_ConfigSyncMode(USART_TypeDef *USARTx)
2705 {
2706   /* In Synchronous mode, the following bits must be kept cleared:
2707   - LINEN bit in the USART_CR2 register,
2708   - SCEN, IREN and HDSEL bits in the USART_CR3 register.
2709   */
2710   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
2711   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
2712   /* set the UART/USART in Synchronous mode */
2713   SET_BIT(USARTx->CR2, USART_CR2_CLKEN);
2714 }
2715 
2716 /**
2717   * @brief  Perform basic configuration of USART for enabling use in LIN Mode
2718   * @note   In LIN mode, the following bits must be kept cleared:
2719   *           - STOP and CLKEN bits in the USART_CR2 register,
2720   *           - SCEN bit in the USART_CR3 register,
2721   *           - IREN bit in the USART_CR3 register,
2722   *           - HDSEL bit in the USART_CR3 register.
2723   *         This function also set the UART/USART in LIN mode.
2724   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
2725   *         LIN feature is supported by the USARTx instance.
2726   * @note   Call of this function is equivalent to following function call sequence :
2727   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
2728   *         - Clear STOP in CR2 using @ref LL_USART_SetStopBitsLength() function
2729   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
2730   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
2731   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
2732   *         - Set LINEN in CR2 using @ref LL_USART_EnableLIN() function
2733   * @note   Other remaining configurations items related to LIN Mode
2734   *         (as Baud Rate, Word length, LIN Break Detection Length, ...) should be set using
2735   *         dedicated functions
2736   * @rmtoll CR2          CLKEN         LL_USART_ConfigLINMode\n
2737   *         CR2          STOP          LL_USART_ConfigLINMode\n
2738   *         CR2          LINEN         LL_USART_ConfigLINMode\n
2739   *         CR3          IREN          LL_USART_ConfigLINMode\n
2740   *         CR3          SCEN          LL_USART_ConfigLINMode\n
2741   *         CR3          HDSEL         LL_USART_ConfigLINMode
2742   * @param  USARTx USART Instance
2743   * @retval None
2744   */
LL_USART_ConfigLINMode(USART_TypeDef * USARTx)2745 __STATIC_INLINE void LL_USART_ConfigLINMode(USART_TypeDef *USARTx)
2746 {
2747   /* In LIN mode, the following bits must be kept cleared:
2748   - STOP and CLKEN bits in the USART_CR2 register,
2749   - IREN, SCEN and HDSEL bits in the USART_CR3 register.
2750   */
2751   CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP));
2752   CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL));
2753   /* Set the UART/USART in LIN mode */
2754   SET_BIT(USARTx->CR2, USART_CR2_LINEN);
2755 }
2756 
2757 /**
2758   * @brief  Perform basic configuration of USART for enabling use in Half Duplex Mode
2759   * @note   In Half Duplex mode, the following bits must be kept cleared:
2760   *           - LINEN bit in the USART_CR2 register,
2761   *           - CLKEN bit in the USART_CR2 register,
2762   *           - SCEN bit in the USART_CR3 register,
2763   *           - IREN bit in the USART_CR3 register,
2764   *         This function also sets the UART/USART in Half Duplex mode.
2765   * @note   Macro IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not
2766   *         Half-Duplex mode is supported by the USARTx instance.
2767   * @note   Call of this function is equivalent to following function call sequence :
2768   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
2769   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
2770   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
2771   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
2772   *         - Set HDSEL in CR3 using @ref LL_USART_EnableHalfDuplex() function
2773   * @note   Other remaining configurations items related to Half Duplex Mode
2774   *         (as Baud Rate, Word length, Parity, ...) should be set using
2775   *         dedicated functions
2776   * @rmtoll CR2          LINEN         LL_USART_ConfigHalfDuplexMode\n
2777   *         CR2          CLKEN         LL_USART_ConfigHalfDuplexMode\n
2778   *         CR3          HDSEL         LL_USART_ConfigHalfDuplexMode\n
2779   *         CR3          SCEN          LL_USART_ConfigHalfDuplexMode\n
2780   *         CR3          IREN          LL_USART_ConfigHalfDuplexMode
2781   * @param  USARTx USART Instance
2782   * @retval None
2783   */
LL_USART_ConfigHalfDuplexMode(USART_TypeDef * USARTx)2784 __STATIC_INLINE void LL_USART_ConfigHalfDuplexMode(USART_TypeDef *USARTx)
2785 {
2786   /* In Half Duplex mode, the following bits must be kept cleared:
2787   - LINEN and CLKEN bits in the USART_CR2 register,
2788   - SCEN and IREN bits in the USART_CR3 register.
2789   */
2790   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
2791   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN));
2792   /* set the UART/USART in Half Duplex mode */
2793   SET_BIT(USARTx->CR3, USART_CR3_HDSEL);
2794 }
2795 
2796 /**
2797   * @brief  Perform basic configuration of USART for enabling use in Smartcard Mode
2798   * @note   In Smartcard mode, the following bits must be kept cleared:
2799   *           - LINEN bit in the USART_CR2 register,
2800   *           - IREN bit in the USART_CR3 register,
2801   *           - HDSEL bit in the USART_CR3 register.
2802   *         This function also configures Stop bits to 1.5 bits and
2803   *         sets the USART in Smartcard mode (SCEN bit).
2804   *         Clock Output is also enabled (CLKEN).
2805   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
2806   *         Smartcard feature is supported by the USARTx instance.
2807   * @note   Call of this function is equivalent to following function call sequence :
2808   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
2809   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
2810   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
2811   *         - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function
2812   *         - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function
2813   *         - Set SCEN in CR3 using @ref LL_USART_EnableSmartcard() function
2814   * @note   Other remaining configurations items related to Smartcard Mode
2815   *         (as Baud Rate, Word length, Parity, ...) should be set using
2816   *         dedicated functions
2817   * @rmtoll CR2          LINEN         LL_USART_ConfigSmartcardMode\n
2818   *         CR2          STOP          LL_USART_ConfigSmartcardMode\n
2819   *         CR2          CLKEN         LL_USART_ConfigSmartcardMode\n
2820   *         CR3          HDSEL         LL_USART_ConfigSmartcardMode\n
2821   *         CR3          SCEN          LL_USART_ConfigSmartcardMode
2822   * @param  USARTx USART Instance
2823   * @retval None
2824   */
LL_USART_ConfigSmartcardMode(USART_TypeDef * USARTx)2825 __STATIC_INLINE void LL_USART_ConfigSmartcardMode(USART_TypeDef *USARTx)
2826 {
2827   /* In Smartcard mode, the following bits must be kept cleared:
2828   - LINEN bit in the USART_CR2 register,
2829   - IREN and HDSEL bits in the USART_CR3 register.
2830   */
2831   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
2832   CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL));
2833   /* Configure Stop bits to 1.5 bits */
2834   /* Synchronous mode is activated by default */
2835   SET_BIT(USARTx->CR2, (USART_CR2_STOP_0 | USART_CR2_STOP_1 | USART_CR2_CLKEN));
2836   /* set the UART/USART in Smartcard mode */
2837   SET_BIT(USARTx->CR3, USART_CR3_SCEN);
2838 }
2839 
2840 /**
2841   * @brief  Perform basic configuration of USART for enabling use in Irda Mode
2842   * @note   In IRDA mode, the following bits must be kept cleared:
2843   *           - LINEN bit in the USART_CR2 register,
2844   *           - STOP and CLKEN bits in the USART_CR2 register,
2845   *           - SCEN bit in the USART_CR3 register,
2846   *           - HDSEL bit in the USART_CR3 register.
2847   *         This function also sets the UART/USART in IRDA mode (IREN bit).
2848   * @note   Macro IS_IRDA_INSTANCE(USARTx) can be used to check whether or not
2849   *         IrDA feature is supported by the USARTx instance.
2850   * @note   Call of this function is equivalent to following function call sequence :
2851   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
2852   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
2853   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
2854   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
2855   *         - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function
2856   *         - Set IREN in CR3 using @ref LL_USART_EnableIrda() function
2857   * @note   Other remaining configurations items related to Irda Mode
2858   *         (as Baud Rate, Word length, Power mode, ...) should be set using
2859   *         dedicated functions
2860   * @rmtoll CR2          LINEN         LL_USART_ConfigIrdaMode\n
2861   *         CR2          CLKEN         LL_USART_ConfigIrdaMode\n
2862   *         CR2          STOP          LL_USART_ConfigIrdaMode\n
2863   *         CR3          SCEN          LL_USART_ConfigIrdaMode\n
2864   *         CR3          HDSEL         LL_USART_ConfigIrdaMode\n
2865   *         CR3          IREN          LL_USART_ConfigIrdaMode
2866   * @param  USARTx USART Instance
2867   * @retval None
2868   */
LL_USART_ConfigIrdaMode(USART_TypeDef * USARTx)2869 __STATIC_INLINE void LL_USART_ConfigIrdaMode(USART_TypeDef *USARTx)
2870 {
2871   /* In IRDA mode, the following bits must be kept cleared:
2872   - LINEN, STOP and CLKEN bits in the USART_CR2 register,
2873   - SCEN and HDSEL bits in the USART_CR3 register.
2874   */
2875   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP));
2876   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL));
2877   /* set the UART/USART in IRDA mode */
2878   SET_BIT(USARTx->CR3, USART_CR3_IREN);
2879 }
2880 
2881 /**
2882   * @brief  Perform basic configuration of USART for enabling use in Multi processor Mode
2883   *         (several USARTs connected in a network, one of the USARTs can be the master,
2884   *         its TX output connected to the RX inputs of the other slaves USARTs).
2885   * @note   In MultiProcessor mode, the following bits must be kept cleared:
2886   *           - LINEN bit in the USART_CR2 register,
2887   *           - CLKEN bit in the USART_CR2 register,
2888   *           - SCEN bit in the USART_CR3 register,
2889   *           - IREN bit in the USART_CR3 register,
2890   *           - HDSEL bit in the USART_CR3 register.
2891   * @note   Call of this function is equivalent to following function call sequence :
2892   *         - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function
2893   *         - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function
2894   *         - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function
2895   *         - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function
2896   *         - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function
2897   * @note   Other remaining configurations items related to Multi processor Mode
2898   *         (as Baud Rate, Wake Up Method, Node address, ...) should be set using
2899   *         dedicated functions
2900   * @rmtoll CR2          LINEN         LL_USART_ConfigMultiProcessMode\n
2901   *         CR2          CLKEN         LL_USART_ConfigMultiProcessMode\n
2902   *         CR3          SCEN          LL_USART_ConfigMultiProcessMode\n
2903   *         CR3          HDSEL         LL_USART_ConfigMultiProcessMode\n
2904   *         CR3          IREN          LL_USART_ConfigMultiProcessMode
2905   * @param  USARTx USART Instance
2906   * @retval None
2907   */
LL_USART_ConfigMultiProcessMode(USART_TypeDef * USARTx)2908 __STATIC_INLINE void LL_USART_ConfigMultiProcessMode(USART_TypeDef *USARTx)
2909 {
2910   /* In Multi Processor mode, the following bits must be kept cleared:
2911   - LINEN and CLKEN bits in the USART_CR2 register,
2912   - IREN, SCEN and HDSEL bits in the USART_CR3 register.
2913   */
2914   CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
2915   CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
2916 }
2917 
2918 /**
2919   * @}
2920   */
2921 
2922 /** @defgroup USART_LL_EF_FLAG_Management FLAG_Management
2923   * @{
2924   */
2925 
2926 /**
2927   * @brief  Check if the USART Parity Error Flag is set or not
2928   * @rmtoll ISR          PE            LL_USART_IsActiveFlag_PE
2929   * @param  USARTx USART Instance
2930   * @retval State of bit (1 or 0).
2931   */
LL_USART_IsActiveFlag_PE(const USART_TypeDef * USARTx)2932 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_PE(const USART_TypeDef *USARTx)
2933 {
2934   return ((READ_BIT(USARTx->ISR, USART_ISR_PE) == (USART_ISR_PE)) ? 1UL : 0UL);
2935 }
2936 
2937 /**
2938   * @brief  Check if the USART Framing Error Flag is set or not
2939   * @rmtoll ISR          FE            LL_USART_IsActiveFlag_FE
2940   * @param  USARTx USART Instance
2941   * @retval State of bit (1 or 0).
2942   */
LL_USART_IsActiveFlag_FE(const USART_TypeDef * USARTx)2943 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_FE(const USART_TypeDef *USARTx)
2944 {
2945   return ((READ_BIT(USARTx->ISR, USART_ISR_FE) == (USART_ISR_FE)) ? 1UL : 0UL);
2946 }
2947 
2948 /**
2949   * @brief  Check if the USART Noise error detected Flag is set or not
2950   * @rmtoll ISR          NE            LL_USART_IsActiveFlag_NE
2951   * @param  USARTx USART Instance
2952   * @retval State of bit (1 or 0).
2953   */
LL_USART_IsActiveFlag_NE(const USART_TypeDef * USARTx)2954 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_NE(const USART_TypeDef *USARTx)
2955 {
2956   return ((READ_BIT(USARTx->ISR, USART_ISR_NE) == (USART_ISR_NE)) ? 1UL : 0UL);
2957 }
2958 
2959 /**
2960   * @brief  Check if the USART OverRun Error Flag is set or not
2961   * @rmtoll ISR          ORE           LL_USART_IsActiveFlag_ORE
2962   * @param  USARTx USART Instance
2963   * @retval State of bit (1 or 0).
2964   */
LL_USART_IsActiveFlag_ORE(const USART_TypeDef * USARTx)2965 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ORE(const USART_TypeDef *USARTx)
2966 {
2967   return ((READ_BIT(USARTx->ISR, USART_ISR_ORE) == (USART_ISR_ORE)) ? 1UL : 0UL);
2968 }
2969 
2970 /**
2971   * @brief  Check if the USART IDLE line detected Flag is set or not
2972   * @rmtoll ISR          IDLE          LL_USART_IsActiveFlag_IDLE
2973   * @param  USARTx USART Instance
2974   * @retval State of bit (1 or 0).
2975   */
LL_USART_IsActiveFlag_IDLE(const USART_TypeDef * USARTx)2976 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_IDLE(const USART_TypeDef *USARTx)
2977 {
2978   return ((READ_BIT(USARTx->ISR, USART_ISR_IDLE) == (USART_ISR_IDLE)) ? 1UL : 0UL);
2979 }
2980 
2981 /* Legacy define */
2982 #define LL_USART_IsActiveFlag_RXNE  LL_USART_IsActiveFlag_RXNE_RXFNE
2983 
2984 /**
2985   * @brief  Check if the USART Read Data Register or USART RX FIFO Not Empty Flag is set or not
2986   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
2987   *         FIFO mode feature is supported by the USARTx instance.
2988   * @rmtoll ISR          RXNE_RXFNE    LL_USART_IsActiveFlag_RXNE_RXFNE
2989   * @param  USARTx USART Instance
2990   * @retval State of bit (1 or 0).
2991   */
LL_USART_IsActiveFlag_RXNE_RXFNE(const USART_TypeDef * USARTx)2992 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE_RXFNE(const USART_TypeDef *USARTx)
2993 {
2994   return ((READ_BIT(USARTx->ISR, USART_ISR_RXNE_RXFNE) == (USART_ISR_RXNE_RXFNE)) ? 1UL : 0UL);
2995 }
2996 
2997 /**
2998   * @brief  Check if the USART Transmission Complete Flag is set or not
2999   * @rmtoll ISR          TC            LL_USART_IsActiveFlag_TC
3000   * @param  USARTx USART Instance
3001   * @retval State of bit (1 or 0).
3002   */
LL_USART_IsActiveFlag_TC(const USART_TypeDef * USARTx)3003 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TC(const USART_TypeDef *USARTx)
3004 {
3005   return ((READ_BIT(USARTx->ISR, USART_ISR_TC) == (USART_ISR_TC)) ? 1UL : 0UL);
3006 }
3007 
3008 /* Legacy define */
3009 #define LL_USART_IsActiveFlag_TXE  LL_USART_IsActiveFlag_TXE_TXFNF
3010 
3011 /**
3012   * @brief  Check if the USART Transmit Data Register Empty or USART TX FIFO Not Full Flag is set or not
3013   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3014   *         FIFO mode feature is supported by the USARTx instance.
3015   * @rmtoll ISR          TXE_TXFNF     LL_USART_IsActiveFlag_TXE_TXFNF
3016   * @param  USARTx USART Instance
3017   * @retval State of bit (1 or 0).
3018   */
LL_USART_IsActiveFlag_TXE_TXFNF(const USART_TypeDef * USARTx)3019 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXE_TXFNF(const USART_TypeDef *USARTx)
3020 {
3021   return ((READ_BIT(USARTx->ISR, USART_ISR_TXE_TXFNF) == (USART_ISR_TXE_TXFNF)) ? 1UL : 0UL);
3022 }
3023 
3024 /**
3025   * @brief  Check if the USART LIN Break Detection Flag is set or not
3026   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
3027   *         LIN feature is supported by the USARTx instance.
3028   * @rmtoll ISR          LBDF          LL_USART_IsActiveFlag_LBD
3029   * @param  USARTx USART Instance
3030   * @retval State of bit (1 or 0).
3031   */
LL_USART_IsActiveFlag_LBD(const USART_TypeDef * USARTx)3032 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_LBD(const USART_TypeDef *USARTx)
3033 {
3034   return ((READ_BIT(USARTx->ISR, USART_ISR_LBDF) == (USART_ISR_LBDF)) ? 1UL : 0UL);
3035 }
3036 
3037 /**
3038   * @brief  Check if the USART CTS interrupt Flag is set or not
3039   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
3040   *         Hardware Flow control feature is supported by the USARTx instance.
3041   * @rmtoll ISR          CTSIF         LL_USART_IsActiveFlag_nCTS
3042   * @param  USARTx USART Instance
3043   * @retval State of bit (1 or 0).
3044   */
LL_USART_IsActiveFlag_nCTS(const USART_TypeDef * USARTx)3045 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_nCTS(const USART_TypeDef *USARTx)
3046 {
3047   return ((READ_BIT(USARTx->ISR, USART_ISR_CTSIF) == (USART_ISR_CTSIF)) ? 1UL : 0UL);
3048 }
3049 
3050 /**
3051   * @brief  Check if the USART CTS Flag is set or not
3052   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
3053   *         Hardware Flow control feature is supported by the USARTx instance.
3054   * @rmtoll ISR          CTS           LL_USART_IsActiveFlag_CTS
3055   * @param  USARTx USART Instance
3056   * @retval State of bit (1 or 0).
3057   */
LL_USART_IsActiveFlag_CTS(const USART_TypeDef * USARTx)3058 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_CTS(const USART_TypeDef *USARTx)
3059 {
3060   return ((READ_BIT(USARTx->ISR, USART_ISR_CTS) == (USART_ISR_CTS)) ? 1UL : 0UL);
3061 }
3062 
3063 /**
3064   * @brief  Check if the USART Receiver Time Out Flag is set or not
3065   * @rmtoll ISR          RTOF          LL_USART_IsActiveFlag_RTO
3066   * @param  USARTx USART Instance
3067   * @retval State of bit (1 or 0).
3068   */
LL_USART_IsActiveFlag_RTO(const USART_TypeDef * USARTx)3069 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RTO(const USART_TypeDef *USARTx)
3070 {
3071   return ((READ_BIT(USARTx->ISR, USART_ISR_RTOF) == (USART_ISR_RTOF)) ? 1UL : 0UL);
3072 }
3073 
3074 /**
3075   * @brief  Check if the USART End Of Block Flag is set or not
3076   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
3077   *         Smartcard feature is supported by the USARTx instance.
3078   * @rmtoll ISR          EOBF          LL_USART_IsActiveFlag_EOB
3079   * @param  USARTx USART Instance
3080   * @retval State of bit (1 or 0).
3081   */
LL_USART_IsActiveFlag_EOB(const USART_TypeDef * USARTx)3082 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_EOB(const USART_TypeDef *USARTx)
3083 {
3084   return ((READ_BIT(USARTx->ISR, USART_ISR_EOBF) == (USART_ISR_EOBF)) ? 1UL : 0UL);
3085 }
3086 
3087 /**
3088   * @brief  Check if the SPI Slave Underrun error flag is set or not
3089   * @note   Macro IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not
3090   *         SPI Slave mode feature is supported by the USARTx instance.
3091   * @rmtoll ISR          UDR           LL_USART_IsActiveFlag_UDR
3092   * @param  USARTx USART Instance
3093   * @retval State of bit (1 or 0).
3094   */
LL_USART_IsActiveFlag_UDR(const USART_TypeDef * USARTx)3095 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_UDR(const USART_TypeDef *USARTx)
3096 {
3097   return ((READ_BIT(USARTx->ISR, USART_ISR_UDR) == (USART_ISR_UDR)) ? 1UL : 0UL);
3098 }
3099 
3100 /**
3101   * @brief  Check if the USART Auto-Baud Rate Error Flag is set or not
3102   * @note   Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not
3103   *         Auto Baud Rate detection feature is supported by the USARTx instance.
3104   * @rmtoll ISR          ABRE          LL_USART_IsActiveFlag_ABRE
3105   * @param  USARTx USART Instance
3106   * @retval State of bit (1 or 0).
3107   */
LL_USART_IsActiveFlag_ABRE(const USART_TypeDef * USARTx)3108 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ABRE(const USART_TypeDef *USARTx)
3109 {
3110   return ((READ_BIT(USARTx->ISR, USART_ISR_ABRE) == (USART_ISR_ABRE)) ? 1UL : 0UL);
3111 }
3112 
3113 /**
3114   * @brief  Check if the USART Auto-Baud Rate Flag is set or not
3115   * @note   Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not
3116   *         Auto Baud Rate detection feature is supported by the USARTx instance.
3117   * @rmtoll ISR          ABRF          LL_USART_IsActiveFlag_ABR
3118   * @param  USARTx USART Instance
3119   * @retval State of bit (1 or 0).
3120   */
LL_USART_IsActiveFlag_ABR(const USART_TypeDef * USARTx)3121 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ABR(const USART_TypeDef *USARTx)
3122 {
3123   return ((READ_BIT(USARTx->ISR, USART_ISR_ABRF) == (USART_ISR_ABRF)) ? 1UL : 0UL);
3124 }
3125 
3126 /**
3127   * @brief  Check if the USART Busy Flag is set or not
3128   * @rmtoll ISR          BUSY          LL_USART_IsActiveFlag_BUSY
3129   * @param  USARTx USART Instance
3130   * @retval State of bit (1 or 0).
3131   */
LL_USART_IsActiveFlag_BUSY(const USART_TypeDef * USARTx)3132 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_BUSY(const USART_TypeDef *USARTx)
3133 {
3134   return ((READ_BIT(USARTx->ISR, USART_ISR_BUSY) == (USART_ISR_BUSY)) ? 1UL : 0UL);
3135 }
3136 
3137 /**
3138   * @brief  Check if the USART Character Match Flag is set or not
3139   * @rmtoll ISR          CMF           LL_USART_IsActiveFlag_CM
3140   * @param  USARTx USART Instance
3141   * @retval State of bit (1 or 0).
3142   */
LL_USART_IsActiveFlag_CM(const USART_TypeDef * USARTx)3143 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_CM(const USART_TypeDef *USARTx)
3144 {
3145   return ((READ_BIT(USARTx->ISR, USART_ISR_CMF) == (USART_ISR_CMF)) ? 1UL : 0UL);
3146 }
3147 
3148 /**
3149   * @brief  Check if the USART Send Break Flag is set or not
3150   * @rmtoll ISR          SBKF          LL_USART_IsActiveFlag_SBK
3151   * @param  USARTx USART Instance
3152   * @retval State of bit (1 or 0).
3153   */
LL_USART_IsActiveFlag_SBK(const USART_TypeDef * USARTx)3154 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_SBK(const USART_TypeDef *USARTx)
3155 {
3156   return ((READ_BIT(USARTx->ISR, USART_ISR_SBKF) == (USART_ISR_SBKF)) ? 1UL : 0UL);
3157 }
3158 
3159 /**
3160   * @brief  Check if the USART Receive Wake Up from mute mode Flag is set or not
3161   * @rmtoll ISR          RWU           LL_USART_IsActiveFlag_RWU
3162   * @param  USARTx USART Instance
3163   * @retval State of bit (1 or 0).
3164   */
LL_USART_IsActiveFlag_RWU(const USART_TypeDef * USARTx)3165 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(const USART_TypeDef *USARTx)
3166 {
3167   return ((READ_BIT(USARTx->ISR, USART_ISR_RWU) == (USART_ISR_RWU)) ? 1UL : 0UL);
3168 }
3169 
3170 /**
3171   * @brief  Check if the USART Wake Up from stop mode Flag is set or not
3172   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
3173   *         Wake-up from Stop mode feature is supported by the USARTx instance.
3174   * @rmtoll ISR          WUF           LL_USART_IsActiveFlag_WKUP
3175   * @param  USARTx USART Instance
3176   * @retval State of bit (1 or 0).
3177   */
LL_USART_IsActiveFlag_WKUP(const USART_TypeDef * USARTx)3178 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_WKUP(const USART_TypeDef *USARTx)
3179 {
3180   return ((READ_BIT(USARTx->ISR, USART_ISR_WUF) == (USART_ISR_WUF)) ? 1UL : 0UL);
3181 }
3182 
3183 /**
3184   * @brief  Check if the USART Transmit Enable Acknowledge Flag is set or not
3185   * @rmtoll ISR          TEACK         LL_USART_IsActiveFlag_TEACK
3186   * @param  USARTx USART Instance
3187   * @retval State of bit (1 or 0).
3188   */
LL_USART_IsActiveFlag_TEACK(const USART_TypeDef * USARTx)3189 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TEACK(const USART_TypeDef *USARTx)
3190 {
3191   return ((READ_BIT(USARTx->ISR, USART_ISR_TEACK) == (USART_ISR_TEACK)) ? 1UL : 0UL);
3192 }
3193 
3194 /**
3195   * @brief  Check if the USART Receive Enable Acknowledge Flag is set or not
3196   * @rmtoll ISR          REACK         LL_USART_IsActiveFlag_REACK
3197   * @param  USARTx USART Instance
3198   * @retval State of bit (1 or 0).
3199   */
LL_USART_IsActiveFlag_REACK(const USART_TypeDef * USARTx)3200 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_REACK(const USART_TypeDef *USARTx)
3201 {
3202   return ((READ_BIT(USARTx->ISR, USART_ISR_REACK) == (USART_ISR_REACK)) ? 1UL : 0UL);
3203 }
3204 
3205 /**
3206   * @brief  Check if the USART TX FIFO Empty Flag is set or not
3207   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3208   *         FIFO mode feature is supported by the USARTx instance.
3209   * @rmtoll ISR          TXFE          LL_USART_IsActiveFlag_TXFE
3210   * @param  USARTx USART Instance
3211   * @retval State of bit (1 or 0).
3212   */
LL_USART_IsActiveFlag_TXFE(const USART_TypeDef * USARTx)3213 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXFE(const USART_TypeDef *USARTx)
3214 {
3215   return ((READ_BIT(USARTx->ISR, USART_ISR_TXFE) == (USART_ISR_TXFE)) ? 1UL : 0UL);
3216 }
3217 
3218 /**
3219   * @brief  Check if the USART RX FIFO Full Flag is set or not
3220   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3221   *         FIFO mode feature is supported by the USARTx instance.
3222   * @rmtoll ISR          RXFF          LL_USART_IsActiveFlag_RXFF
3223   * @param  USARTx USART Instance
3224   * @retval State of bit (1 or 0).
3225   */
LL_USART_IsActiveFlag_RXFF(const USART_TypeDef * USARTx)3226 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXFF(const USART_TypeDef *USARTx)
3227 {
3228   return ((READ_BIT(USARTx->ISR, USART_ISR_RXFF) == (USART_ISR_RXFF)) ? 1UL : 0UL);
3229 }
3230 
3231 /**
3232   * @brief  Check if the Smartcard Transmission Complete Before Guard Time Flag is set or not
3233   * @rmtoll ISR          TCBGT         LL_USART_IsActiveFlag_TCBGT
3234   * @param  USARTx USART Instance
3235   * @retval State of bit (1 or 0).
3236   */
LL_USART_IsActiveFlag_TCBGT(const USART_TypeDef * USARTx)3237 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TCBGT(const USART_TypeDef *USARTx)
3238 {
3239   return ((READ_BIT(USARTx->ISR, USART_ISR_TCBGT) == (USART_ISR_TCBGT)) ? 1UL : 0UL);
3240 }
3241 
3242 /**
3243   * @brief  Check if the USART TX FIFO Threshold Flag is set or not
3244   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3245   *         FIFO mode feature is supported by the USARTx instance.
3246   * @rmtoll ISR          TXFT          LL_USART_IsActiveFlag_TXFT
3247   * @param  USARTx USART Instance
3248   * @retval State of bit (1 or 0).
3249   */
LL_USART_IsActiveFlag_TXFT(const USART_TypeDef * USARTx)3250 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXFT(const USART_TypeDef *USARTx)
3251 {
3252   return ((READ_BIT(USARTx->ISR, USART_ISR_TXFT) == (USART_ISR_TXFT)) ? 1UL : 0UL);
3253 }
3254 
3255 /**
3256   * @brief  Check if the USART RX FIFO Threshold Flag is set or not
3257   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3258   *         FIFO mode feature is supported by the USARTx instance.
3259   * @rmtoll ISR          RXFT          LL_USART_IsActiveFlag_RXFT
3260   * @param  USARTx USART Instance
3261   * @retval State of bit (1 or 0).
3262   */
LL_USART_IsActiveFlag_RXFT(const USART_TypeDef * USARTx)3263 __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXFT(const USART_TypeDef *USARTx)
3264 {
3265   return ((READ_BIT(USARTx->ISR, USART_ISR_RXFT) == (USART_ISR_RXFT)) ? 1UL : 0UL);
3266 }
3267 
3268 /**
3269   * @brief  Clear Parity Error Flag
3270   * @rmtoll ICR          PECF          LL_USART_ClearFlag_PE
3271   * @param  USARTx USART Instance
3272   * @retval None
3273   */
LL_USART_ClearFlag_PE(USART_TypeDef * USARTx)3274 __STATIC_INLINE void LL_USART_ClearFlag_PE(USART_TypeDef *USARTx)
3275 {
3276   WRITE_REG(USARTx->ICR, USART_ICR_PECF);
3277 }
3278 
3279 /**
3280   * @brief  Clear Framing Error Flag
3281   * @rmtoll ICR          FECF          LL_USART_ClearFlag_FE
3282   * @param  USARTx USART Instance
3283   * @retval None
3284   */
LL_USART_ClearFlag_FE(USART_TypeDef * USARTx)3285 __STATIC_INLINE void LL_USART_ClearFlag_FE(USART_TypeDef *USARTx)
3286 {
3287   WRITE_REG(USARTx->ICR, USART_ICR_FECF);
3288 }
3289 
3290 /**
3291   * @brief  Clear Noise Error detected Flag
3292   * @rmtoll ICR          NECF          LL_USART_ClearFlag_NE
3293   * @param  USARTx USART Instance
3294   * @retval None
3295   */
LL_USART_ClearFlag_NE(USART_TypeDef * USARTx)3296 __STATIC_INLINE void LL_USART_ClearFlag_NE(USART_TypeDef *USARTx)
3297 {
3298   WRITE_REG(USARTx->ICR, USART_ICR_NECF);
3299 }
3300 
3301 /**
3302   * @brief  Clear OverRun Error Flag
3303   * @rmtoll ICR          ORECF         LL_USART_ClearFlag_ORE
3304   * @param  USARTx USART Instance
3305   * @retval None
3306   */
LL_USART_ClearFlag_ORE(USART_TypeDef * USARTx)3307 __STATIC_INLINE void LL_USART_ClearFlag_ORE(USART_TypeDef *USARTx)
3308 {
3309   WRITE_REG(USARTx->ICR, USART_ICR_ORECF);
3310 }
3311 
3312 /**
3313   * @brief  Clear IDLE line detected Flag
3314   * @rmtoll ICR          IDLECF        LL_USART_ClearFlag_IDLE
3315   * @param  USARTx USART Instance
3316   * @retval None
3317   */
LL_USART_ClearFlag_IDLE(USART_TypeDef * USARTx)3318 __STATIC_INLINE void LL_USART_ClearFlag_IDLE(USART_TypeDef *USARTx)
3319 {
3320   WRITE_REG(USARTx->ICR, USART_ICR_IDLECF);
3321 }
3322 
3323 /**
3324   * @brief  Clear TX FIFO Empty Flag
3325   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3326   *         FIFO mode feature is supported by the USARTx instance.
3327   * @rmtoll ICR          TXFECF        LL_USART_ClearFlag_TXFE
3328   * @param  USARTx USART Instance
3329   * @retval None
3330   */
LL_USART_ClearFlag_TXFE(USART_TypeDef * USARTx)3331 __STATIC_INLINE void LL_USART_ClearFlag_TXFE(USART_TypeDef *USARTx)
3332 {
3333   WRITE_REG(USARTx->ICR, USART_ICR_TXFECF);
3334 }
3335 
3336 /**
3337   * @brief  Clear Transmission Complete Flag
3338   * @rmtoll ICR          TCCF          LL_USART_ClearFlag_TC
3339   * @param  USARTx USART Instance
3340   * @retval None
3341   */
LL_USART_ClearFlag_TC(USART_TypeDef * USARTx)3342 __STATIC_INLINE void LL_USART_ClearFlag_TC(USART_TypeDef *USARTx)
3343 {
3344   WRITE_REG(USARTx->ICR, USART_ICR_TCCF);
3345 }
3346 
3347 /**
3348   * @brief  Clear Smartcard Transmission Complete Before Guard Time Flag
3349   * @rmtoll ICR          TCBGTCF       LL_USART_ClearFlag_TCBGT
3350   * @param  USARTx USART Instance
3351   * @retval None
3352   */
LL_USART_ClearFlag_TCBGT(USART_TypeDef * USARTx)3353 __STATIC_INLINE void LL_USART_ClearFlag_TCBGT(USART_TypeDef *USARTx)
3354 {
3355   WRITE_REG(USARTx->ICR, USART_ICR_TCBGTCF);
3356 }
3357 
3358 /**
3359   * @brief  Clear LIN Break Detection Flag
3360   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
3361   *         LIN feature is supported by the USARTx instance.
3362   * @rmtoll ICR          LBDCF         LL_USART_ClearFlag_LBD
3363   * @param  USARTx USART Instance
3364   * @retval None
3365   */
LL_USART_ClearFlag_LBD(USART_TypeDef * USARTx)3366 __STATIC_INLINE void LL_USART_ClearFlag_LBD(USART_TypeDef *USARTx)
3367 {
3368   WRITE_REG(USARTx->ICR, USART_ICR_LBDCF);
3369 }
3370 
3371 /**
3372   * @brief  Clear CTS Interrupt Flag
3373   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
3374   *         Hardware Flow control feature is supported by the USARTx instance.
3375   * @rmtoll ICR          CTSCF         LL_USART_ClearFlag_nCTS
3376   * @param  USARTx USART Instance
3377   * @retval None
3378   */
LL_USART_ClearFlag_nCTS(USART_TypeDef * USARTx)3379 __STATIC_INLINE void LL_USART_ClearFlag_nCTS(USART_TypeDef *USARTx)
3380 {
3381   WRITE_REG(USARTx->ICR, USART_ICR_CTSCF);
3382 }
3383 
3384 /**
3385   * @brief  Clear Receiver Time Out Flag
3386   * @rmtoll ICR          RTOCF         LL_USART_ClearFlag_RTO
3387   * @param  USARTx USART Instance
3388   * @retval None
3389   */
LL_USART_ClearFlag_RTO(USART_TypeDef * USARTx)3390 __STATIC_INLINE void LL_USART_ClearFlag_RTO(USART_TypeDef *USARTx)
3391 {
3392   WRITE_REG(USARTx->ICR, USART_ICR_RTOCF);
3393 }
3394 
3395 /**
3396   * @brief  Clear End Of Block Flag
3397   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
3398   *         Smartcard feature is supported by the USARTx instance.
3399   * @rmtoll ICR          EOBCF         LL_USART_ClearFlag_EOB
3400   * @param  USARTx USART Instance
3401   * @retval None
3402   */
LL_USART_ClearFlag_EOB(USART_TypeDef * USARTx)3403 __STATIC_INLINE void LL_USART_ClearFlag_EOB(USART_TypeDef *USARTx)
3404 {
3405   WRITE_REG(USARTx->ICR, USART_ICR_EOBCF);
3406 }
3407 
3408 /**
3409   * @brief  Clear SPI Slave Underrun Flag
3410   * @note   Macro IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not
3411   *         SPI Slave mode feature is supported by the USARTx instance.
3412   * @rmtoll ICR          UDRCF         LL_USART_ClearFlag_UDR
3413   * @param  USARTx USART Instance
3414   * @retval None
3415   */
LL_USART_ClearFlag_UDR(USART_TypeDef * USARTx)3416 __STATIC_INLINE void LL_USART_ClearFlag_UDR(USART_TypeDef *USARTx)
3417 {
3418   WRITE_REG(USARTx->ICR, USART_ICR_UDRCF);
3419 }
3420 
3421 /**
3422   * @brief  Clear Character Match Flag
3423   * @rmtoll ICR          CMCF          LL_USART_ClearFlag_CM
3424   * @param  USARTx USART Instance
3425   * @retval None
3426   */
LL_USART_ClearFlag_CM(USART_TypeDef * USARTx)3427 __STATIC_INLINE void LL_USART_ClearFlag_CM(USART_TypeDef *USARTx)
3428 {
3429   WRITE_REG(USARTx->ICR, USART_ICR_CMCF);
3430 }
3431 
3432 /**
3433   * @brief  Clear Wake Up from stop mode Flag
3434   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
3435   *         Wake-up from Stop mode feature is supported by the USARTx instance.
3436   * @rmtoll ICR          WUCF          LL_USART_ClearFlag_WKUP
3437   * @param  USARTx USART Instance
3438   * @retval None
3439   */
LL_USART_ClearFlag_WKUP(USART_TypeDef * USARTx)3440 __STATIC_INLINE void LL_USART_ClearFlag_WKUP(USART_TypeDef *USARTx)
3441 {
3442   WRITE_REG(USARTx->ICR, USART_ICR_WUCF);
3443 }
3444 
3445 /**
3446   * @}
3447   */
3448 
3449 /** @defgroup USART_LL_EF_IT_Management IT_Management
3450   * @{
3451   */
3452 
3453 /**
3454   * @brief  Enable IDLE Interrupt
3455   * @rmtoll CR1          IDLEIE        LL_USART_EnableIT_IDLE
3456   * @param  USARTx USART Instance
3457   * @retval None
3458   */
LL_USART_EnableIT_IDLE(USART_TypeDef * USARTx)3459 __STATIC_INLINE void LL_USART_EnableIT_IDLE(USART_TypeDef *USARTx)
3460 {
3461   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_IDLEIE);
3462 }
3463 
3464 /* Legacy define */
3465 #define LL_USART_EnableIT_RXNE  LL_USART_EnableIT_RXNE_RXFNE
3466 
3467 /**
3468   * @brief  Enable RX Not Empty and RX FIFO Not Empty Interrupt
3469   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3470   *         FIFO mode feature is supported by the USARTx instance.
3471   * @rmtoll CR1        RXNEIE_RXFNEIE  LL_USART_EnableIT_RXNE_RXFNE
3472   * @param  USARTx USART Instance
3473   * @retval None
3474   */
LL_USART_EnableIT_RXNE_RXFNE(USART_TypeDef * USARTx)3475 __STATIC_INLINE void LL_USART_EnableIT_RXNE_RXFNE(USART_TypeDef *USARTx)
3476 {
3477   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RXNEIE_RXFNEIE);
3478 }
3479 
3480 /**
3481   * @brief  Enable Transmission Complete Interrupt
3482   * @rmtoll CR1          TCIE          LL_USART_EnableIT_TC
3483   * @param  USARTx USART Instance
3484   * @retval None
3485   */
LL_USART_EnableIT_TC(USART_TypeDef * USARTx)3486 __STATIC_INLINE void LL_USART_EnableIT_TC(USART_TypeDef *USARTx)
3487 {
3488   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TCIE);
3489 }
3490 
3491 /* Legacy define */
3492 #define LL_USART_EnableIT_TXE  LL_USART_EnableIT_TXE_TXFNF
3493 
3494 /**
3495   * @brief  Enable TX Empty and TX FIFO Not Full Interrupt
3496   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3497   *         FIFO mode feature is supported by the USARTx instance.
3498   * @rmtoll CR1         TXEIE_TXFNFIE  LL_USART_EnableIT_TXE_TXFNF
3499   * @param  USARTx USART Instance
3500   * @retval None
3501   */
LL_USART_EnableIT_TXE_TXFNF(USART_TypeDef * USARTx)3502 __STATIC_INLINE void LL_USART_EnableIT_TXE_TXFNF(USART_TypeDef *USARTx)
3503 {
3504   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TXEIE_TXFNFIE);
3505 }
3506 
3507 /**
3508   * @brief  Enable Parity Error Interrupt
3509   * @rmtoll CR1          PEIE          LL_USART_EnableIT_PE
3510   * @param  USARTx USART Instance
3511   * @retval None
3512   */
LL_USART_EnableIT_PE(USART_TypeDef * USARTx)3513 __STATIC_INLINE void LL_USART_EnableIT_PE(USART_TypeDef *USARTx)
3514 {
3515   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_PEIE);
3516 }
3517 
3518 /**
3519   * @brief  Enable Character Match Interrupt
3520   * @rmtoll CR1          CMIE          LL_USART_EnableIT_CM
3521   * @param  USARTx USART Instance
3522   * @retval None
3523   */
LL_USART_EnableIT_CM(USART_TypeDef * USARTx)3524 __STATIC_INLINE void LL_USART_EnableIT_CM(USART_TypeDef *USARTx)
3525 {
3526   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_CMIE);
3527 }
3528 
3529 /**
3530   * @brief  Enable Receiver Timeout Interrupt
3531   * @rmtoll CR1          RTOIE         LL_USART_EnableIT_RTO
3532   * @param  USARTx USART Instance
3533   * @retval None
3534   */
LL_USART_EnableIT_RTO(USART_TypeDef * USARTx)3535 __STATIC_INLINE void LL_USART_EnableIT_RTO(USART_TypeDef *USARTx)
3536 {
3537   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RTOIE);
3538 }
3539 
3540 /**
3541   * @brief  Enable End Of Block Interrupt
3542   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
3543   *         Smartcard feature is supported by the USARTx instance.
3544   * @rmtoll CR1          EOBIE         LL_USART_EnableIT_EOB
3545   * @param  USARTx USART Instance
3546   * @retval None
3547   */
LL_USART_EnableIT_EOB(USART_TypeDef * USARTx)3548 __STATIC_INLINE void LL_USART_EnableIT_EOB(USART_TypeDef *USARTx)
3549 {
3550   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_EOBIE);
3551 }
3552 
3553 /**
3554   * @brief  Enable TX FIFO Empty Interrupt
3555   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3556   *         FIFO mode feature is supported by the USARTx instance.
3557   * @rmtoll CR1          TXFEIE        LL_USART_EnableIT_TXFE
3558   * @param  USARTx USART Instance
3559   * @retval None
3560   */
LL_USART_EnableIT_TXFE(USART_TypeDef * USARTx)3561 __STATIC_INLINE void LL_USART_EnableIT_TXFE(USART_TypeDef *USARTx)
3562 {
3563   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TXFEIE);
3564 }
3565 
3566 /**
3567   * @brief  Enable RX FIFO Full Interrupt
3568   * @rmtoll CR1          RXFFIE        LL_USART_EnableIT_RXFF
3569   * @param  USARTx USART Instance
3570   * @retval None
3571   */
LL_USART_EnableIT_RXFF(USART_TypeDef * USARTx)3572 __STATIC_INLINE void LL_USART_EnableIT_RXFF(USART_TypeDef *USARTx)
3573 {
3574   ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RXFFIE);
3575 }
3576 
3577 /**
3578   * @brief  Enable LIN Break Detection Interrupt
3579   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
3580   *         LIN feature is supported by the USARTx instance.
3581   * @rmtoll CR2          LBDIE         LL_USART_EnableIT_LBD
3582   * @param  USARTx USART Instance
3583   * @retval None
3584   */
LL_USART_EnableIT_LBD(USART_TypeDef * USARTx)3585 __STATIC_INLINE void LL_USART_EnableIT_LBD(USART_TypeDef *USARTx)
3586 {
3587   SET_BIT(USARTx->CR2, USART_CR2_LBDIE);
3588 }
3589 
3590 /**
3591   * @brief  Enable Error Interrupt
3592   * @note   When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing
3593   *         error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_ISR register).
3594   *           0: Interrupt is inhibited
3595   *           1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_ISR register.
3596   * @rmtoll CR3          EIE           LL_USART_EnableIT_ERROR
3597   * @param  USARTx USART Instance
3598   * @retval None
3599   */
LL_USART_EnableIT_ERROR(USART_TypeDef * USARTx)3600 __STATIC_INLINE void LL_USART_EnableIT_ERROR(USART_TypeDef *USARTx)
3601 {
3602   ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_EIE);
3603 }
3604 
3605 /**
3606   * @brief  Enable CTS Interrupt
3607   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
3608   *         Hardware Flow control feature is supported by the USARTx instance.
3609   * @rmtoll CR3          CTSIE         LL_USART_EnableIT_CTS
3610   * @param  USARTx USART Instance
3611   * @retval None
3612   */
LL_USART_EnableIT_CTS(USART_TypeDef * USARTx)3613 __STATIC_INLINE void LL_USART_EnableIT_CTS(USART_TypeDef *USARTx)
3614 {
3615   ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_CTSIE);
3616 }
3617 
3618 /**
3619   * @brief  Enable Wake Up from Stop Mode Interrupt
3620   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
3621   *         Wake-up from Stop mode feature is supported by the USARTx instance.
3622   * @rmtoll CR3          WUFIE         LL_USART_EnableIT_WKUP
3623   * @param  USARTx USART Instance
3624   * @retval None
3625   */
LL_USART_EnableIT_WKUP(USART_TypeDef * USARTx)3626 __STATIC_INLINE void LL_USART_EnableIT_WKUP(USART_TypeDef *USARTx)
3627 {
3628   ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_WUFIE);
3629 }
3630 
3631 /**
3632   * @brief  Enable TX FIFO Threshold Interrupt
3633   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3634   *         FIFO mode feature is supported by the USARTx instance.
3635   * @rmtoll CR3          TXFTIE        LL_USART_EnableIT_TXFT
3636   * @param  USARTx USART Instance
3637   * @retval None
3638   */
LL_USART_EnableIT_TXFT(USART_TypeDef * USARTx)3639 __STATIC_INLINE void LL_USART_EnableIT_TXFT(USART_TypeDef *USARTx)
3640 {
3641   ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_TXFTIE);
3642 }
3643 
3644 /**
3645   * @brief  Enable Smartcard Transmission Complete Before Guard Time Interrupt
3646   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
3647   *         Smartcard feature is supported by the USARTx instance.
3648   * @rmtoll CR3          TCBGTIE       LL_USART_EnableIT_TCBGT
3649   * @param  USARTx USART Instance
3650   * @retval None
3651   */
LL_USART_EnableIT_TCBGT(USART_TypeDef * USARTx)3652 __STATIC_INLINE void LL_USART_EnableIT_TCBGT(USART_TypeDef *USARTx)
3653 {
3654   ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
3655 }
3656 
3657 /**
3658   * @brief  Enable RX FIFO Threshold Interrupt
3659   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3660   *         FIFO mode feature is supported by the USARTx instance.
3661   * @rmtoll CR3          RXFTIE        LL_USART_EnableIT_RXFT
3662   * @param  USARTx USART Instance
3663   * @retval None
3664   */
LL_USART_EnableIT_RXFT(USART_TypeDef * USARTx)3665 __STATIC_INLINE void LL_USART_EnableIT_RXFT(USART_TypeDef *USARTx)
3666 {
3667   ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_RXFTIE);
3668 }
3669 
3670 /**
3671   * @brief  Disable IDLE Interrupt
3672   * @rmtoll CR1          IDLEIE        LL_USART_DisableIT_IDLE
3673   * @param  USARTx USART Instance
3674   * @retval None
3675   */
LL_USART_DisableIT_IDLE(USART_TypeDef * USARTx)3676 __STATIC_INLINE void LL_USART_DisableIT_IDLE(USART_TypeDef *USARTx)
3677 {
3678   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_IDLEIE);
3679 }
3680 
3681 /* Legacy define */
3682 #define LL_USART_DisableIT_RXNE  LL_USART_DisableIT_RXNE_RXFNE
3683 
3684 /**
3685   * @brief  Disable RX Not Empty and RX FIFO Not Empty Interrupt
3686   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3687   *         FIFO mode feature is supported by the USARTx instance.
3688   * @rmtoll CR1        RXNEIE_RXFNEIE  LL_USART_DisableIT_RXNE_RXFNE
3689   * @param  USARTx USART Instance
3690   * @retval None
3691   */
LL_USART_DisableIT_RXNE_RXFNE(USART_TypeDef * USARTx)3692 __STATIC_INLINE void LL_USART_DisableIT_RXNE_RXFNE(USART_TypeDef *USARTx)
3693 {
3694   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RXNEIE_RXFNEIE);
3695 }
3696 
3697 /**
3698   * @brief  Disable Transmission Complete Interrupt
3699   * @rmtoll CR1          TCIE          LL_USART_DisableIT_TC
3700   * @param  USARTx USART Instance
3701   * @retval None
3702   */
LL_USART_DisableIT_TC(USART_TypeDef * USARTx)3703 __STATIC_INLINE void LL_USART_DisableIT_TC(USART_TypeDef *USARTx)
3704 {
3705   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TCIE);
3706 }
3707 
3708 /* Legacy define */
3709 #define LL_USART_DisableIT_TXE  LL_USART_DisableIT_TXE_TXFNF
3710 
3711 /**
3712   * @brief  Disable TX Empty and TX FIFO Not Full Interrupt
3713   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3714   *         FIFO mode feature is supported by the USARTx instance.
3715   * @rmtoll CR1        TXEIE_TXFNFIE  LL_USART_DisableIT_TXE_TXFNF
3716   * @param  USARTx USART Instance
3717   * @retval None
3718   */
LL_USART_DisableIT_TXE_TXFNF(USART_TypeDef * USARTx)3719 __STATIC_INLINE void LL_USART_DisableIT_TXE_TXFNF(USART_TypeDef *USARTx)
3720 {
3721   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TXEIE_TXFNFIE);
3722 }
3723 
3724 /**
3725   * @brief  Disable Parity Error Interrupt
3726   * @rmtoll CR1          PEIE          LL_USART_DisableIT_PE
3727   * @param  USARTx USART Instance
3728   * @retval None
3729   */
LL_USART_DisableIT_PE(USART_TypeDef * USARTx)3730 __STATIC_INLINE void LL_USART_DisableIT_PE(USART_TypeDef *USARTx)
3731 {
3732   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_PEIE);
3733 }
3734 
3735 /**
3736   * @brief  Disable Character Match Interrupt
3737   * @rmtoll CR1          CMIE          LL_USART_DisableIT_CM
3738   * @param  USARTx USART Instance
3739   * @retval None
3740   */
LL_USART_DisableIT_CM(USART_TypeDef * USARTx)3741 __STATIC_INLINE void LL_USART_DisableIT_CM(USART_TypeDef *USARTx)
3742 {
3743   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_CMIE);
3744 }
3745 
3746 /**
3747   * @brief  Disable Receiver Timeout Interrupt
3748   * @rmtoll CR1          RTOIE         LL_USART_DisableIT_RTO
3749   * @param  USARTx USART Instance
3750   * @retval None
3751   */
LL_USART_DisableIT_RTO(USART_TypeDef * USARTx)3752 __STATIC_INLINE void LL_USART_DisableIT_RTO(USART_TypeDef *USARTx)
3753 {
3754   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RTOIE);
3755 }
3756 
3757 /**
3758   * @brief  Disable End Of Block Interrupt
3759   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
3760   *         Smartcard feature is supported by the USARTx instance.
3761   * @rmtoll CR1          EOBIE         LL_USART_DisableIT_EOB
3762   * @param  USARTx USART Instance
3763   * @retval None
3764   */
LL_USART_DisableIT_EOB(USART_TypeDef * USARTx)3765 __STATIC_INLINE void LL_USART_DisableIT_EOB(USART_TypeDef *USARTx)
3766 {
3767   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_EOBIE);
3768 }
3769 
3770 /**
3771   * @brief  Disable TX FIFO Empty Interrupt
3772   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3773   *         FIFO mode feature is supported by the USARTx instance.
3774   * @rmtoll CR1          TXFEIE        LL_USART_DisableIT_TXFE
3775   * @param  USARTx USART Instance
3776   * @retval None
3777   */
LL_USART_DisableIT_TXFE(USART_TypeDef * USARTx)3778 __STATIC_INLINE void LL_USART_DisableIT_TXFE(USART_TypeDef *USARTx)
3779 {
3780   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TXFEIE);
3781 }
3782 
3783 /**
3784   * @brief  Disable RX FIFO Full Interrupt
3785   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3786   *         FIFO mode feature is supported by the USARTx instance.
3787   * @rmtoll CR1          RXFFIE        LL_USART_DisableIT_RXFF
3788   * @param  USARTx USART Instance
3789   * @retval None
3790   */
LL_USART_DisableIT_RXFF(USART_TypeDef * USARTx)3791 __STATIC_INLINE void LL_USART_DisableIT_RXFF(USART_TypeDef *USARTx)
3792 {
3793   ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RXFFIE);
3794 }
3795 
3796 /**
3797   * @brief  Disable LIN Break Detection Interrupt
3798   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
3799   *         LIN feature is supported by the USARTx instance.
3800   * @rmtoll CR2          LBDIE         LL_USART_DisableIT_LBD
3801   * @param  USARTx USART Instance
3802   * @retval None
3803   */
LL_USART_DisableIT_LBD(USART_TypeDef * USARTx)3804 __STATIC_INLINE void LL_USART_DisableIT_LBD(USART_TypeDef *USARTx)
3805 {
3806   CLEAR_BIT(USARTx->CR2, USART_CR2_LBDIE);
3807 }
3808 
3809 /**
3810   * @brief  Disable Error Interrupt
3811   * @note   When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing
3812   *         error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_ISR register).
3813   *           0: Interrupt is inhibited
3814   *           1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_ISR register.
3815   * @rmtoll CR3          EIE           LL_USART_DisableIT_ERROR
3816   * @param  USARTx USART Instance
3817   * @retval None
3818   */
LL_USART_DisableIT_ERROR(USART_TypeDef * USARTx)3819 __STATIC_INLINE void LL_USART_DisableIT_ERROR(USART_TypeDef *USARTx)
3820 {
3821   ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_EIE);
3822 }
3823 
3824 /**
3825   * @brief  Disable CTS Interrupt
3826   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
3827   *         Hardware Flow control feature is supported by the USARTx instance.
3828   * @rmtoll CR3          CTSIE         LL_USART_DisableIT_CTS
3829   * @param  USARTx USART Instance
3830   * @retval None
3831   */
LL_USART_DisableIT_CTS(USART_TypeDef * USARTx)3832 __STATIC_INLINE void LL_USART_DisableIT_CTS(USART_TypeDef *USARTx)
3833 {
3834   ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_CTSIE);
3835 }
3836 
3837 /**
3838   * @brief  Disable Wake Up from Stop Mode Interrupt
3839   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
3840   *         Wake-up from Stop mode feature is supported by the USARTx instance.
3841   * @rmtoll CR3          WUFIE         LL_USART_DisableIT_WKUP
3842   * @param  USARTx USART Instance
3843   * @retval None
3844   */
LL_USART_DisableIT_WKUP(USART_TypeDef * USARTx)3845 __STATIC_INLINE void LL_USART_DisableIT_WKUP(USART_TypeDef *USARTx)
3846 {
3847   ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_WUFIE);
3848 }
3849 
3850 /**
3851   * @brief  Disable TX FIFO Threshold Interrupt
3852   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3853   *         FIFO mode feature is supported by the USARTx instance.
3854   * @rmtoll CR3          TXFTIE        LL_USART_DisableIT_TXFT
3855   * @param  USARTx USART Instance
3856   * @retval None
3857   */
LL_USART_DisableIT_TXFT(USART_TypeDef * USARTx)3858 __STATIC_INLINE void LL_USART_DisableIT_TXFT(USART_TypeDef *USARTx)
3859 {
3860   ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_TXFTIE);
3861 }
3862 
3863 /**
3864   * @brief  Disable Smartcard Transmission Complete Before Guard Time Interrupt
3865   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
3866   *         Smartcard feature is supported by the USARTx instance.
3867   * @rmtoll CR3          TCBGTIE       LL_USART_DisableIT_TCBGT
3868   * @param  USARTx USART Instance
3869   * @retval None
3870   */
LL_USART_DisableIT_TCBGT(USART_TypeDef * USARTx)3871 __STATIC_INLINE void LL_USART_DisableIT_TCBGT(USART_TypeDef *USARTx)
3872 {
3873   ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
3874 }
3875 
3876 /**
3877   * @brief  Disable RX FIFO Threshold Interrupt
3878   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3879   *         FIFO mode feature is supported by the USARTx instance.
3880   * @rmtoll CR3          RXFTIE        LL_USART_DisableIT_RXFT
3881   * @param  USARTx USART Instance
3882   * @retval None
3883   */
LL_USART_DisableIT_RXFT(USART_TypeDef * USARTx)3884 __STATIC_INLINE void LL_USART_DisableIT_RXFT(USART_TypeDef *USARTx)
3885 {
3886   ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_RXFTIE);
3887 }
3888 
3889 /**
3890   * @brief  Check if the USART IDLE Interrupt  source is enabled or disabled.
3891   * @rmtoll CR1          IDLEIE        LL_USART_IsEnabledIT_IDLE
3892   * @param  USARTx USART Instance
3893   * @retval State of bit (1 or 0).
3894   */
LL_USART_IsEnabledIT_IDLE(const USART_TypeDef * USARTx)3895 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_IDLE(const USART_TypeDef *USARTx)
3896 {
3897   return ((READ_BIT(USARTx->CR1, USART_CR1_IDLEIE) == (USART_CR1_IDLEIE)) ? 1UL : 0UL);
3898 }
3899 
3900 /* Legacy define */
3901 #define LL_USART_IsEnabledIT_RXNE  LL_USART_IsEnabledIT_RXNE_RXFNE
3902 
3903 /**
3904   * @brief  Check if the USART RX Not Empty and USART RX FIFO Not Empty Interrupt is enabled or disabled.
3905   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3906   *         FIFO mode feature is supported by the USARTx instance.
3907   * @rmtoll CR1        RXNEIE_RXFNEIE  LL_USART_IsEnabledIT_RXNE_RXFNE
3908   * @param  USARTx USART Instance
3909   * @retval State of bit (1 or 0).
3910   */
LL_USART_IsEnabledIT_RXNE_RXFNE(const USART_TypeDef * USARTx)3911 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXNE_RXFNE(const USART_TypeDef *USARTx)
3912 {
3913   return ((READ_BIT(USARTx->CR1, USART_CR1_RXNEIE_RXFNEIE) == (USART_CR1_RXNEIE_RXFNEIE)) ? 1UL : 0UL);
3914 }
3915 
3916 /**
3917   * @brief  Check if the USART Transmission Complete Interrupt is enabled or disabled.
3918   * @rmtoll CR1          TCIE          LL_USART_IsEnabledIT_TC
3919   * @param  USARTx USART Instance
3920   * @retval State of bit (1 or 0).
3921   */
LL_USART_IsEnabledIT_TC(const USART_TypeDef * USARTx)3922 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TC(const USART_TypeDef *USARTx)
3923 {
3924   return ((READ_BIT(USARTx->CR1, USART_CR1_TCIE) == (USART_CR1_TCIE)) ? 1UL : 0UL);
3925 }
3926 
3927 /* Legacy define */
3928 #define LL_USART_IsEnabledIT_TXE  LL_USART_IsEnabledIT_TXE_TXFNF
3929 
3930 /**
3931   * @brief  Check if the USART TX Empty and USART TX FIFO Not Full Interrupt is enabled or disabled
3932   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3933   *         FIFO mode feature is supported by the USARTx instance.
3934   * @rmtoll CR1         TXEIE_TXFNFIE  LL_USART_IsEnabledIT_TXE_TXFNF
3935   * @param  USARTx USART Instance
3936   * @retval State of bit (1 or 0).
3937   */
LL_USART_IsEnabledIT_TXE_TXFNF(const USART_TypeDef * USARTx)3938 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXE_TXFNF(const USART_TypeDef *USARTx)
3939 {
3940   return ((READ_BIT(USARTx->CR1, USART_CR1_TXEIE_TXFNFIE) == (USART_CR1_TXEIE_TXFNFIE)) ? 1UL : 0UL);
3941 }
3942 
3943 /**
3944   * @brief  Check if the USART Parity Error Interrupt is enabled or disabled.
3945   * @rmtoll CR1          PEIE          LL_USART_IsEnabledIT_PE
3946   * @param  USARTx USART Instance
3947   * @retval State of bit (1 or 0).
3948   */
LL_USART_IsEnabledIT_PE(const USART_TypeDef * USARTx)3949 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_PE(const USART_TypeDef *USARTx)
3950 {
3951   return ((READ_BIT(USARTx->CR1, USART_CR1_PEIE) == (USART_CR1_PEIE)) ? 1UL : 0UL);
3952 }
3953 
3954 /**
3955   * @brief  Check if the USART Character Match Interrupt is enabled or disabled.
3956   * @rmtoll CR1          CMIE          LL_USART_IsEnabledIT_CM
3957   * @param  USARTx USART Instance
3958   * @retval State of bit (1 or 0).
3959   */
LL_USART_IsEnabledIT_CM(const USART_TypeDef * USARTx)3960 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CM(const USART_TypeDef *USARTx)
3961 {
3962   return ((READ_BIT(USARTx->CR1, USART_CR1_CMIE) == (USART_CR1_CMIE)) ? 1UL : 0UL);
3963 }
3964 
3965 /**
3966   * @brief  Check if the USART Receiver Timeout Interrupt is enabled or disabled.
3967   * @rmtoll CR1          RTOIE         LL_USART_IsEnabledIT_RTO
3968   * @param  USARTx USART Instance
3969   * @retval State of bit (1 or 0).
3970   */
LL_USART_IsEnabledIT_RTO(const USART_TypeDef * USARTx)3971 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RTO(const USART_TypeDef *USARTx)
3972 {
3973   return ((READ_BIT(USARTx->CR1, USART_CR1_RTOIE) == (USART_CR1_RTOIE)) ? 1UL : 0UL);
3974 }
3975 
3976 /**
3977   * @brief  Check if the USART End Of Block Interrupt is enabled or disabled.
3978   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
3979   *         Smartcard feature is supported by the USARTx instance.
3980   * @rmtoll CR1          EOBIE         LL_USART_IsEnabledIT_EOB
3981   * @param  USARTx USART Instance
3982   * @retval State of bit (1 or 0).
3983   */
LL_USART_IsEnabledIT_EOB(const USART_TypeDef * USARTx)3984 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_EOB(const USART_TypeDef *USARTx)
3985 {
3986   return ((READ_BIT(USARTx->CR1, USART_CR1_EOBIE) == (USART_CR1_EOBIE)) ? 1UL : 0UL);
3987 }
3988 
3989 /**
3990   * @brief  Check if the USART TX FIFO Empty Interrupt is enabled or disabled
3991   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
3992   *         FIFO mode feature is supported by the USARTx instance.
3993   * @rmtoll CR1          TXFEIE        LL_USART_IsEnabledIT_TXFE
3994   * @param  USARTx USART Instance
3995   * @retval State of bit (1 or 0).
3996   */
LL_USART_IsEnabledIT_TXFE(const USART_TypeDef * USARTx)3997 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXFE(const USART_TypeDef *USARTx)
3998 {
3999   return ((READ_BIT(USARTx->CR1, USART_CR1_TXFEIE) == (USART_CR1_TXFEIE)) ? 1UL : 0UL);
4000 }
4001 
4002 /**
4003   * @brief  Check if the USART RX FIFO Full Interrupt is enabled or disabled
4004   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
4005   *         FIFO mode feature is supported by the USARTx instance.
4006   * @rmtoll CR1          RXFFIE        LL_USART_IsEnabledIT_RXFF
4007   * @param  USARTx USART Instance
4008   * @retval State of bit (1 or 0).
4009   */
LL_USART_IsEnabledIT_RXFF(const USART_TypeDef * USARTx)4010 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXFF(const USART_TypeDef *USARTx)
4011 {
4012   return ((READ_BIT(USARTx->CR1, USART_CR1_RXFFIE) == (USART_CR1_RXFFIE)) ? 1UL : 0UL);
4013 }
4014 
4015 /**
4016   * @brief  Check if the USART LIN Break Detection Interrupt is enabled or disabled.
4017   * @note   Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not
4018   *         LIN feature is supported by the USARTx instance.
4019   * @rmtoll CR2          LBDIE         LL_USART_IsEnabledIT_LBD
4020   * @param  USARTx USART Instance
4021   * @retval State of bit (1 or 0).
4022   */
LL_USART_IsEnabledIT_LBD(const USART_TypeDef * USARTx)4023 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_LBD(const USART_TypeDef *USARTx)
4024 {
4025   return ((READ_BIT(USARTx->CR2, USART_CR2_LBDIE) == (USART_CR2_LBDIE)) ? 1UL : 0UL);
4026 }
4027 
4028 /**
4029   * @brief  Check if the USART Error Interrupt is enabled or disabled.
4030   * @rmtoll CR3          EIE           LL_USART_IsEnabledIT_ERROR
4031   * @param  USARTx USART Instance
4032   * @retval State of bit (1 or 0).
4033   */
LL_USART_IsEnabledIT_ERROR(const USART_TypeDef * USARTx)4034 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_ERROR(const USART_TypeDef *USARTx)
4035 {
4036   return ((READ_BIT(USARTx->CR3, USART_CR3_EIE) == (USART_CR3_EIE)) ? 1UL : 0UL);
4037 }
4038 
4039 /**
4040   * @brief  Check if the USART CTS Interrupt is enabled or disabled.
4041   * @note   Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not
4042   *         Hardware Flow control feature is supported by the USARTx instance.
4043   * @rmtoll CR3          CTSIE         LL_USART_IsEnabledIT_CTS
4044   * @param  USARTx USART Instance
4045   * @retval State of bit (1 or 0).
4046   */
LL_USART_IsEnabledIT_CTS(const USART_TypeDef * USARTx)4047 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CTS(const USART_TypeDef *USARTx)
4048 {
4049   return ((READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE)) ? 1UL : 0UL);
4050 }
4051 
4052 /**
4053   * @brief  Check if the USART Wake Up from Stop Mode Interrupt is enabled or disabled.
4054   * @note   Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
4055   *         Wake-up from Stop mode feature is supported by the USARTx instance.
4056   * @rmtoll CR3          WUFIE         LL_USART_IsEnabledIT_WKUP
4057   * @param  USARTx USART Instance
4058   * @retval State of bit (1 or 0).
4059   */
LL_USART_IsEnabledIT_WKUP(const USART_TypeDef * USARTx)4060 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_WKUP(const USART_TypeDef *USARTx)
4061 {
4062   return ((READ_BIT(USARTx->CR3, USART_CR3_WUFIE) == (USART_CR3_WUFIE)) ? 1UL : 0UL);
4063 }
4064 
4065 /**
4066   * @brief  Check if USART TX FIFO Threshold Interrupt is enabled or disabled
4067   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
4068   *         FIFO mode feature is supported by the USARTx instance.
4069   * @rmtoll CR3          TXFTIE        LL_USART_IsEnabledIT_TXFT
4070   * @param  USARTx USART Instance
4071   * @retval State of bit (1 or 0).
4072   */
LL_USART_IsEnabledIT_TXFT(const USART_TypeDef * USARTx)4073 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXFT(const USART_TypeDef *USARTx)
4074 {
4075   return ((READ_BIT(USARTx->CR3, USART_CR3_TXFTIE) == (USART_CR3_TXFTIE)) ? 1UL : 0UL);
4076 }
4077 
4078 /**
4079   * @brief  Check if the Smartcard Transmission Complete Before Guard Time Interrupt is enabled or disabled.
4080   * @note   Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not
4081   *         Smartcard feature is supported by the USARTx instance.
4082   * @rmtoll CR3          TCBGTIE       LL_USART_IsEnabledIT_TCBGT
4083   * @param  USARTx USART Instance
4084   * @retval State of bit (1 or 0).
4085   */
LL_USART_IsEnabledIT_TCBGT(const USART_TypeDef * USARTx)4086 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TCBGT(const USART_TypeDef *USARTx)
4087 {
4088   return ((READ_BIT(USARTx->CR3, USART_CR3_TCBGTIE) == (USART_CR3_TCBGTIE)) ? 1UL : 0UL);
4089 }
4090 
4091 /**
4092   * @brief  Check if USART RX FIFO Threshold Interrupt is enabled or disabled
4093   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
4094   *         FIFO mode feature is supported by the USARTx instance.
4095   * @rmtoll CR3          RXFTIE        LL_USART_IsEnabledIT_RXFT
4096   * @param  USARTx USART Instance
4097   * @retval State of bit (1 or 0).
4098   */
LL_USART_IsEnabledIT_RXFT(const USART_TypeDef * USARTx)4099 __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXFT(const USART_TypeDef *USARTx)
4100 {
4101   return ((READ_BIT(USARTx->CR3, USART_CR3_RXFTIE) == (USART_CR3_RXFTIE)) ? 1UL : 0UL);
4102 }
4103 
4104 /**
4105   * @}
4106   */
4107 
4108 /** @defgroup USART_LL_EF_DMA_Management DMA_Management
4109   * @{
4110   */
4111 
4112 /**
4113   * @brief  Enable DMA Mode for reception
4114   * @rmtoll CR3          DMAR          LL_USART_EnableDMAReq_RX
4115   * @param  USARTx USART Instance
4116   * @retval None
4117   */
LL_USART_EnableDMAReq_RX(USART_TypeDef * USARTx)4118 __STATIC_INLINE void LL_USART_EnableDMAReq_RX(USART_TypeDef *USARTx)
4119 {
4120   ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_DMAR);
4121 }
4122 
4123 /**
4124   * @brief  Disable DMA Mode for reception
4125   * @rmtoll CR3          DMAR          LL_USART_DisableDMAReq_RX
4126   * @param  USARTx USART Instance
4127   * @retval None
4128   */
LL_USART_DisableDMAReq_RX(USART_TypeDef * USARTx)4129 __STATIC_INLINE void LL_USART_DisableDMAReq_RX(USART_TypeDef *USARTx)
4130 {
4131   ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_DMAR);
4132 }
4133 
4134 /**
4135   * @brief  Check if DMA Mode is enabled for reception
4136   * @rmtoll CR3          DMAR          LL_USART_IsEnabledDMAReq_RX
4137   * @param  USARTx USART Instance
4138   * @retval State of bit (1 or 0).
4139   */
LL_USART_IsEnabledDMAReq_RX(const USART_TypeDef * USARTx)4140 __STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_RX(const USART_TypeDef *USARTx)
4141 {
4142   return ((READ_BIT(USARTx->CR3, USART_CR3_DMAR) == (USART_CR3_DMAR)) ? 1UL : 0UL);
4143 }
4144 
4145 /**
4146   * @brief  Enable DMA Mode for transmission
4147   * @rmtoll CR3          DMAT          LL_USART_EnableDMAReq_TX
4148   * @param  USARTx USART Instance
4149   * @retval None
4150   */
LL_USART_EnableDMAReq_TX(USART_TypeDef * USARTx)4151 __STATIC_INLINE void LL_USART_EnableDMAReq_TX(USART_TypeDef *USARTx)
4152 {
4153   ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_DMAT);
4154 }
4155 
4156 /**
4157   * @brief  Disable DMA Mode for transmission
4158   * @rmtoll CR3          DMAT          LL_USART_DisableDMAReq_TX
4159   * @param  USARTx USART Instance
4160   * @retval None
4161   */
LL_USART_DisableDMAReq_TX(USART_TypeDef * USARTx)4162 __STATIC_INLINE void LL_USART_DisableDMAReq_TX(USART_TypeDef *USARTx)
4163 {
4164   ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_DMAT);
4165 }
4166 
4167 /**
4168   * @brief  Check if DMA Mode is enabled for transmission
4169   * @rmtoll CR3          DMAT          LL_USART_IsEnabledDMAReq_TX
4170   * @param  USARTx USART Instance
4171   * @retval State of bit (1 or 0).
4172   */
LL_USART_IsEnabledDMAReq_TX(const USART_TypeDef * USARTx)4173 __STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_TX(const USART_TypeDef *USARTx)
4174 {
4175   return ((READ_BIT(USARTx->CR3, USART_CR3_DMAT) == (USART_CR3_DMAT)) ? 1UL : 0UL);
4176 }
4177 
4178 /**
4179   * @brief  Enable DMA Disabling on Reception Error
4180   * @rmtoll CR3          DDRE          LL_USART_EnableDMADeactOnRxErr
4181   * @param  USARTx USART Instance
4182   * @retval None
4183   */
LL_USART_EnableDMADeactOnRxErr(USART_TypeDef * USARTx)4184 __STATIC_INLINE void LL_USART_EnableDMADeactOnRxErr(USART_TypeDef *USARTx)
4185 {
4186   SET_BIT(USARTx->CR3, USART_CR3_DDRE);
4187 }
4188 
4189 /**
4190   * @brief  Disable DMA Disabling on Reception Error
4191   * @rmtoll CR3          DDRE          LL_USART_DisableDMADeactOnRxErr
4192   * @param  USARTx USART Instance
4193   * @retval None
4194   */
LL_USART_DisableDMADeactOnRxErr(USART_TypeDef * USARTx)4195 __STATIC_INLINE void LL_USART_DisableDMADeactOnRxErr(USART_TypeDef *USARTx)
4196 {
4197   CLEAR_BIT(USARTx->CR3, USART_CR3_DDRE);
4198 }
4199 
4200 /**
4201   * @brief  Indicate if DMA Disabling on Reception Error is disabled
4202   * @rmtoll CR3          DDRE          LL_USART_IsEnabledDMADeactOnRxErr
4203   * @param  USARTx USART Instance
4204   * @retval State of bit (1 or 0).
4205   */
LL_USART_IsEnabledDMADeactOnRxErr(const USART_TypeDef * USARTx)4206 __STATIC_INLINE uint32_t LL_USART_IsEnabledDMADeactOnRxErr(const USART_TypeDef *USARTx)
4207 {
4208   return ((READ_BIT(USARTx->CR3, USART_CR3_DDRE) == (USART_CR3_DDRE)) ? 1UL : 0UL);
4209 }
4210 
4211 /**
4212   * @brief  Get the data register address used for DMA transfer
4213   * @rmtoll RDR          RDR           LL_USART_DMA_GetRegAddr\n
4214   * @rmtoll TDR          TDR           LL_USART_DMA_GetRegAddr
4215   * @param  USARTx USART Instance
4216   * @param  Direction This parameter can be one of the following values:
4217   *         @arg @ref LL_USART_DMA_REG_DATA_TRANSMIT
4218   *         @arg @ref LL_USART_DMA_REG_DATA_RECEIVE
4219   * @retval Address of data register
4220   */
LL_USART_DMA_GetRegAddr(const USART_TypeDef * USARTx,uint32_t Direction)4221 __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(const USART_TypeDef *USARTx, uint32_t Direction)
4222 {
4223   uint32_t data_reg_addr;
4224 
4225   if (Direction == LL_USART_DMA_REG_DATA_TRANSMIT)
4226   {
4227     /* return address of TDR register */
4228     data_reg_addr = (uint32_t) &(USARTx->TDR);
4229   }
4230   else
4231   {
4232     /* return address of RDR register */
4233     data_reg_addr = (uint32_t) &(USARTx->RDR);
4234   }
4235 
4236   return data_reg_addr;
4237 }
4238 
4239 /**
4240   * @}
4241   */
4242 
4243 /** @defgroup USART_LL_EF_Data_Management Data_Management
4244   * @{
4245   */
4246 
4247 /**
4248   * @brief  Read Receiver Data register (Receive Data value, 8 bits)
4249   * @rmtoll RDR          RDR           LL_USART_ReceiveData8
4250   * @param  USARTx USART Instance
4251   * @retval Value between Min_Data=0x00 and Max_Data=0xFF
4252   */
LL_USART_ReceiveData8(const USART_TypeDef * USARTx)4253 __STATIC_INLINE uint8_t LL_USART_ReceiveData8(const USART_TypeDef *USARTx)
4254 {
4255   return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR) & 0xFFU);
4256 }
4257 
4258 /**
4259   * @brief  Read Receiver Data register (Receive Data value, 9 bits)
4260   * @rmtoll RDR          RDR           LL_USART_ReceiveData9
4261   * @param  USARTx USART Instance
4262   * @retval Value between Min_Data=0x00 and Max_Data=0x1FF
4263   */
LL_USART_ReceiveData9(const USART_TypeDef * USARTx)4264 __STATIC_INLINE uint16_t LL_USART_ReceiveData9(const USART_TypeDef *USARTx)
4265 {
4266   return (uint16_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR));
4267 }
4268 
4269 /**
4270   * @brief  Write in Transmitter Data Register (Transmit Data value, 8 bits)
4271   * @rmtoll TDR          TDR           LL_USART_TransmitData8
4272   * @param  USARTx USART Instance
4273   * @param  Value between Min_Data=0x00 and Max_Data=0xFF
4274   * @retval None
4275   */
LL_USART_TransmitData8(USART_TypeDef * USARTx,uint8_t Value)4276 __STATIC_INLINE void LL_USART_TransmitData8(USART_TypeDef *USARTx, uint8_t Value)
4277 {
4278   USARTx->TDR = Value;
4279 }
4280 
4281 /**
4282   * @brief  Write in Transmitter Data Register (Transmit Data value, 9 bits)
4283   * @rmtoll TDR          TDR           LL_USART_TransmitData9
4284   * @param  USARTx USART Instance
4285   * @param  Value between Min_Data=0x00 and Max_Data=0x1FF
4286   * @retval None
4287   */
LL_USART_TransmitData9(USART_TypeDef * USARTx,uint16_t Value)4288 __STATIC_INLINE void LL_USART_TransmitData9(USART_TypeDef *USARTx, uint16_t Value)
4289 {
4290   USARTx->TDR = (uint16_t)(Value & 0x1FFUL);
4291 }
4292 
4293 /**
4294   * @}
4295   */
4296 
4297 /** @defgroup USART_LL_EF_Execution Execution
4298   * @{
4299   */
4300 
4301 /**
4302   * @brief  Request an Automatic Baud Rate measurement on next received data frame
4303   * @note   Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not
4304   *         Auto Baud Rate detection feature is supported by the USARTx instance.
4305   * @rmtoll RQR          ABRRQ         LL_USART_RequestAutoBaudRate
4306   * @param  USARTx USART Instance
4307   * @retval None
4308   */
LL_USART_RequestAutoBaudRate(USART_TypeDef * USARTx)4309 __STATIC_INLINE void LL_USART_RequestAutoBaudRate(USART_TypeDef *USARTx)
4310 {
4311   SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_ABRRQ);
4312 }
4313 
4314 /**
4315   * @brief  Request Break sending
4316   * @rmtoll RQR          SBKRQ         LL_USART_RequestBreakSending
4317   * @param  USARTx USART Instance
4318   * @retval None
4319   */
LL_USART_RequestBreakSending(USART_TypeDef * USARTx)4320 __STATIC_INLINE void LL_USART_RequestBreakSending(USART_TypeDef *USARTx)
4321 {
4322   SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_SBKRQ);
4323 }
4324 
4325 /**
4326   * @brief  Put USART in mute mode and set the RWU flag
4327   * @rmtoll RQR          MMRQ          LL_USART_RequestEnterMuteMode
4328   * @param  USARTx USART Instance
4329   * @retval None
4330   */
LL_USART_RequestEnterMuteMode(USART_TypeDef * USARTx)4331 __STATIC_INLINE void LL_USART_RequestEnterMuteMode(USART_TypeDef *USARTx)
4332 {
4333   SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_MMRQ);
4334 }
4335 
4336 /**
4337   * @brief  Request a Receive Data and FIFO flush
4338   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
4339   *         FIFO mode feature is supported by the USARTx instance.
4340   * @note   Allows to discard the received data without reading them, and avoid an overrun
4341   *         condition.
4342   * @rmtoll RQR          RXFRQ         LL_USART_RequestRxDataFlush
4343   * @param  USARTx USART Instance
4344   * @retval None
4345   */
LL_USART_RequestRxDataFlush(USART_TypeDef * USARTx)4346 __STATIC_INLINE void LL_USART_RequestRxDataFlush(USART_TypeDef *USARTx)
4347 {
4348   SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_RXFRQ);
4349 }
4350 
4351 /**
4352   * @brief  Request a Transmit data and FIFO flush
4353   * @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not
4354   *         FIFO mode feature is supported by the USARTx instance.
4355   * @rmtoll RQR          TXFRQ         LL_USART_RequestTxDataFlush
4356   * @param  USARTx USART Instance
4357   * @retval None
4358   */
LL_USART_RequestTxDataFlush(USART_TypeDef * USARTx)4359 __STATIC_INLINE void LL_USART_RequestTxDataFlush(USART_TypeDef *USARTx)
4360 {
4361   SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_TXFRQ);
4362 }
4363 
4364 /**
4365   * @}
4366   */
4367 
4368 #if defined(USE_FULL_LL_DRIVER)
4369 /** @defgroup USART_LL_EF_Init Initialization and de-initialization functions
4370   * @{
4371   */
4372 ErrorStatus LL_USART_DeInit(const USART_TypeDef *USARTx);
4373 ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, const LL_USART_InitTypeDef *USART_InitStruct);
4374 void        LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct);
4375 ErrorStatus LL_USART_ClockInit(USART_TypeDef *USARTx, const LL_USART_ClockInitTypeDef *USART_ClockInitStruct);
4376 void        LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct);
4377 /**
4378   * @}
4379   */
4380 #endif /* USE_FULL_LL_DRIVER */
4381 
4382 /**
4383   * @}
4384   */
4385 
4386 /**
4387   * @}
4388   */
4389 
4390 #endif /* USART1 || USART2 || USART3 || USART4 || USART5 || USART6 */
4391 
4392 /**
4393   * @}
4394   */
4395 
4396 #ifdef __cplusplus
4397 }
4398 #endif
4399 
4400 #endif /* STM32G0xx_LL_USART_H */
4401 
4402