1 /**
2   ******************************************************************************
3   * @file    stm32f1xx_ll_spi.h
4   * @author  MCD Application Team
5   * @brief   Header file of SPI LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32F1xx_LL_SPI_H
22 #define STM32F1xx_LL_SPI_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32f1xx.h"
30 
31 /** @addtogroup STM32F1xx_LL_Driver
32   * @{
33   */
34 
35 #if defined (SPI1) || defined (SPI2) || defined (SPI3)
36 
37 /** @defgroup SPI_LL SPI
38   * @{
39   */
40 
41 /* Private types -------------------------------------------------------------*/
42 /* Private variables ---------------------------------------------------------*/
43 /* Private macros ------------------------------------------------------------*/
44 
45 /* Exported types ------------------------------------------------------------*/
46 #if defined(USE_FULL_LL_DRIVER)
47 /** @defgroup SPI_LL_ES_INIT SPI Exported Init structure
48   * @{
49   */
50 
51 /**
52   * @brief  SPI Init structures definition
53   */
54 typedef struct
55 {
56   uint32_t TransferDirection;       /*!< Specifies the SPI unidirectional or bidirectional data mode.
57                                          This parameter can be a value of @ref SPI_LL_EC_TRANSFER_MODE.
58 
59                                          This feature can be modified afterwards using unitary function @ref LL_SPI_SetTransferDirection().*/
60 
61   uint32_t Mode;                    /*!< Specifies the SPI mode (Master/Slave).
62                                          This parameter can be a value of @ref SPI_LL_EC_MODE.
63 
64                                          This feature can be modified afterwards using unitary function @ref LL_SPI_SetMode().*/
65 
66   uint32_t DataWidth;               /*!< Specifies the SPI data width.
67                                          This parameter can be a value of @ref SPI_LL_EC_DATAWIDTH.
68 
69                                          This feature can be modified afterwards using unitary function @ref LL_SPI_SetDataWidth().*/
70 
71   uint32_t ClockPolarity;           /*!< Specifies the serial clock steady state.
72                                          This parameter can be a value of @ref SPI_LL_EC_POLARITY.
73 
74                                          This feature can be modified afterwards using unitary function @ref LL_SPI_SetClockPolarity().*/
75 
76   uint32_t ClockPhase;              /*!< Specifies the clock active edge for the bit capture.
77                                          This parameter can be a value of @ref SPI_LL_EC_PHASE.
78 
79                                          This feature can be modified afterwards using unitary function @ref LL_SPI_SetClockPhase().*/
80 
81   uint32_t NSS;                     /*!< Specifies whether the NSS signal is managed by hardware (NSS pin) or by software using the SSI bit.
82                                          This parameter can be a value of @ref SPI_LL_EC_NSS_MODE.
83 
84                                          This feature can be modified afterwards using unitary function @ref LL_SPI_SetNSSMode().*/
85 
86   uint32_t BaudRate;                /*!< Specifies the BaudRate prescaler value which will be used to configure the transmit and receive SCK clock.
87                                          This parameter can be a value of @ref SPI_LL_EC_BAUDRATEPRESCALER.
88                                          @note The communication clock is derived from the master clock. The slave clock does not need to be set.
89 
90                                          This feature can be modified afterwards using unitary function @ref LL_SPI_SetBaudRatePrescaler().*/
91 
92   uint32_t BitOrder;                /*!< Specifies whether data transfers start from MSB or LSB bit.
93                                          This parameter can be a value of @ref SPI_LL_EC_BIT_ORDER.
94 
95                                          This feature can be modified afterwards using unitary function @ref LL_SPI_SetTransferBitOrder().*/
96 
97   uint32_t CRCCalculation;          /*!< Specifies if the CRC calculation is enabled or not.
98                                          This parameter can be a value of @ref SPI_LL_EC_CRC_CALCULATION.
99 
100                                          This feature can be modified afterwards using unitary functions @ref LL_SPI_EnableCRC() and @ref LL_SPI_DisableCRC().*/
101 
102   uint32_t CRCPoly;                 /*!< Specifies the polynomial used for the CRC calculation.
103                                          This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFF.
104 
105                                          This feature can be modified afterwards using unitary function @ref LL_SPI_SetCRCPolynomial().*/
106 
107 } LL_SPI_InitTypeDef;
108 
109 /**
110   * @}
111   */
112 #endif /* USE_FULL_LL_DRIVER */
113 
114 /* Exported constants --------------------------------------------------------*/
115 /** @defgroup SPI_LL_Exported_Constants SPI Exported Constants
116   * @{
117   */
118 
119 /** @defgroup SPI_LL_EC_GET_FLAG Get Flags Defines
120   * @brief    Flags defines which can be used with LL_SPI_ReadReg function
121   * @{
122   */
123 #define LL_SPI_SR_RXNE                     SPI_SR_RXNE               /*!< Rx buffer not empty flag         */
124 #define LL_SPI_SR_TXE                      SPI_SR_TXE                /*!< Tx buffer empty flag             */
125 #define LL_SPI_SR_BSY                      SPI_SR_BSY                /*!< Busy flag                        */
126 #define LL_SPI_SR_CRCERR                   SPI_SR_CRCERR             /*!< CRC error flag                   */
127 #define LL_SPI_SR_MODF                     SPI_SR_MODF               /*!< Mode fault flag                  */
128 #define LL_SPI_SR_OVR                      SPI_SR_OVR                /*!< Overrun flag                     */
129 #define LL_SPI_SR_FRE                      SPI_SR_FRE                /*!< TI mode frame format error flag  */
130 /**
131   * @}
132   */
133 
134 /** @defgroup SPI_LL_EC_IT IT Defines
135   * @brief    IT defines which can be used with LL_SPI_ReadReg and  LL_SPI_WriteReg functions
136   * @{
137   */
138 #define LL_SPI_CR2_RXNEIE                  SPI_CR2_RXNEIE            /*!< Rx buffer not empty interrupt enable */
139 #define LL_SPI_CR2_TXEIE                   SPI_CR2_TXEIE             /*!< Tx buffer empty interrupt enable     */
140 #define LL_SPI_CR2_ERRIE                   SPI_CR2_ERRIE             /*!< Error interrupt enable               */
141 /**
142   * @}
143   */
144 
145 /** @defgroup SPI_LL_EC_MODE Operation Mode
146   * @{
147   */
148 #define LL_SPI_MODE_MASTER                 (SPI_CR1_MSTR | SPI_CR1_SSI)    /*!< Master configuration  */
149 #define LL_SPI_MODE_SLAVE                  0x00000000U                     /*!< Slave configuration   */
150 /**
151   * @}
152   */
153 
154 
155 /** @defgroup SPI_LL_EC_PHASE Clock Phase
156   * @{
157   */
158 #define LL_SPI_PHASE_1EDGE                 0x00000000U               /*!< First clock transition is the first data capture edge  */
159 #define LL_SPI_PHASE_2EDGE                 (SPI_CR1_CPHA)            /*!< Second clock transition is the first data capture edge */
160 /**
161   * @}
162   */
163 
164 /** @defgroup SPI_LL_EC_POLARITY Clock Polarity
165   * @{
166   */
167 #define LL_SPI_POLARITY_LOW                0x00000000U               /*!< Clock to 0 when idle */
168 #define LL_SPI_POLARITY_HIGH               (SPI_CR1_CPOL)            /*!< Clock to 1 when idle */
169 /**
170   * @}
171   */
172 
173 /** @defgroup SPI_LL_EC_BAUDRATEPRESCALER Baud Rate Prescaler
174   * @{
175   */
176 #define LL_SPI_BAUDRATEPRESCALER_DIV2      0x00000000U                                    /*!< BaudRate control equal to fPCLK/2   */
177 #define LL_SPI_BAUDRATEPRESCALER_DIV4      (SPI_CR1_BR_0)                                 /*!< BaudRate control equal to fPCLK/4   */
178 #define LL_SPI_BAUDRATEPRESCALER_DIV8      (SPI_CR1_BR_1)                                 /*!< BaudRate control equal to fPCLK/8   */
179 #define LL_SPI_BAUDRATEPRESCALER_DIV16     (SPI_CR1_BR_1 | SPI_CR1_BR_0)                  /*!< BaudRate control equal to fPCLK/16  */
180 #define LL_SPI_BAUDRATEPRESCALER_DIV32     (SPI_CR1_BR_2)                                 /*!< BaudRate control equal to fPCLK/32  */
181 #define LL_SPI_BAUDRATEPRESCALER_DIV64     (SPI_CR1_BR_2 | SPI_CR1_BR_0)                  /*!< BaudRate control equal to fPCLK/64  */
182 #define LL_SPI_BAUDRATEPRESCALER_DIV128    (SPI_CR1_BR_2 | SPI_CR1_BR_1)                  /*!< BaudRate control equal to fPCLK/128 */
183 #define LL_SPI_BAUDRATEPRESCALER_DIV256    (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0)   /*!< BaudRate control equal to fPCLK/256 */
184 /**
185   * @}
186   */
187 
188 /** @defgroup SPI_LL_EC_BIT_ORDER Transmission Bit Order
189   * @{
190   */
191 #define LL_SPI_LSB_FIRST                   (SPI_CR1_LSBFIRST)        /*!< Data is transmitted/received with the LSB first */
192 #define LL_SPI_MSB_FIRST                   0x00000000U               /*!< Data is transmitted/received with the MSB first */
193 /**
194   * @}
195   */
196 
197 /** @defgroup SPI_LL_EC_TRANSFER_MODE Transfer Mode
198   * @{
199   */
200 #define LL_SPI_FULL_DUPLEX                 0x00000000U                          /*!< Full-Duplex mode. Rx and Tx transfer on 2 lines */
201 #define LL_SPI_SIMPLEX_RX                  (SPI_CR1_RXONLY)                     /*!< Simplex Rx mode.  Rx transfer only on 1 line    */
202 #define LL_SPI_HALF_DUPLEX_RX              (SPI_CR1_BIDIMODE)                   /*!< Half-Duplex Rx mode. Rx transfer on 1 line      */
203 #define LL_SPI_HALF_DUPLEX_TX              (SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE)  /*!< Half-Duplex Tx mode. Tx transfer on 1 line      */
204 /**
205   * @}
206   */
207 
208 /** @defgroup SPI_LL_EC_NSS_MODE Slave Select Pin Mode
209   * @{
210   */
211 #define LL_SPI_NSS_SOFT                    (SPI_CR1_SSM)                     /*!< NSS managed internally. NSS pin not used and free              */
212 #define LL_SPI_NSS_HARD_INPUT              0x00000000U                       /*!< NSS pin used in Input. Only used in Master mode                */
213 #define LL_SPI_NSS_HARD_OUTPUT             (((uint32_t)SPI_CR2_SSOE << 16U)) /*!< NSS pin used in Output. Only used in Slave mode as chip select */
214 /**
215   * @}
216   */
217 
218 /** @defgroup SPI_LL_EC_DATAWIDTH Datawidth
219   * @{
220   */
221 #define LL_SPI_DATAWIDTH_8BIT              0x00000000U                       /*!< Data length for SPI transfer:  8 bits */
222 #define LL_SPI_DATAWIDTH_16BIT             (SPI_CR1_DFF)                     /*!< Data length for SPI transfer:  16 bits */
223 /**
224   * @}
225   */
226 #if defined(USE_FULL_LL_DRIVER)
227 
228 /** @defgroup SPI_LL_EC_CRC_CALCULATION CRC Calculation
229   * @{
230   */
231 #define LL_SPI_CRCCALCULATION_DISABLE      0x00000000U               /*!< CRC calculation disabled */
232 #define LL_SPI_CRCCALCULATION_ENABLE       (SPI_CR1_CRCEN)           /*!< CRC calculation enabled  */
233 /**
234   * @}
235   */
236 #endif /* USE_FULL_LL_DRIVER */
237 
238 /**
239   * @}
240   */
241 
242 /* Exported macro ------------------------------------------------------------*/
243 /** @defgroup SPI_LL_Exported_Macros SPI Exported Macros
244   * @{
245   */
246 
247 /** @defgroup SPI_LL_EM_WRITE_READ Common Write and read registers Macros
248   * @{
249   */
250 
251 /**
252   * @brief  Write a value in SPI register
253   * @param  __INSTANCE__ SPI Instance
254   * @param  __REG__ Register to be written
255   * @param  __VALUE__ Value to be written in the register
256   * @retval None
257   */
258 #define LL_SPI_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
259 
260 /**
261   * @brief  Read a value in SPI register
262   * @param  __INSTANCE__ SPI Instance
263   * @param  __REG__ Register to be read
264   * @retval Register value
265   */
266 #define LL_SPI_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
267 /**
268   * @}
269   */
270 
271 /**
272   * @}
273   */
274 
275 /* Exported functions --------------------------------------------------------*/
276 /** @defgroup SPI_LL_Exported_Functions SPI Exported Functions
277   * @{
278   */
279 
280 /** @defgroup SPI_LL_EF_Configuration Configuration
281   * @{
282   */
283 
284 /**
285   * @brief  Enable SPI peripheral
286   * @rmtoll CR1          SPE           LL_SPI_Enable
287   * @param  SPIx SPI Instance
288   * @retval None
289   */
LL_SPI_Enable(SPI_TypeDef * SPIx)290 __STATIC_INLINE void LL_SPI_Enable(SPI_TypeDef *SPIx)
291 {
292   SET_BIT(SPIx->CR1, SPI_CR1_SPE);
293 }
294 
295 /**
296   * @brief  Disable SPI peripheral
297   * @note   When disabling the SPI, follow the procedure described in the Reference Manual.
298   * @rmtoll CR1          SPE           LL_SPI_Disable
299   * @param  SPIx SPI Instance
300   * @retval None
301   */
LL_SPI_Disable(SPI_TypeDef * SPIx)302 __STATIC_INLINE void LL_SPI_Disable(SPI_TypeDef *SPIx)
303 {
304   CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE);
305 }
306 
307 /**
308   * @brief  Check if SPI peripheral is enabled
309   * @rmtoll CR1          SPE           LL_SPI_IsEnabled
310   * @param  SPIx SPI Instance
311   * @retval State of bit (1 or 0).
312   */
LL_SPI_IsEnabled(SPI_TypeDef * SPIx)313 __STATIC_INLINE uint32_t LL_SPI_IsEnabled(SPI_TypeDef *SPIx)
314 {
315   return ((READ_BIT(SPIx->CR1, SPI_CR1_SPE) == (SPI_CR1_SPE)) ? 1UL : 0UL);
316 }
317 
318 /**
319   * @brief  Set SPI operation mode to Master or Slave
320   * @note   This bit should not be changed when communication is ongoing.
321   * @rmtoll CR1          MSTR          LL_SPI_SetMode\n
322   *         CR1          SSI           LL_SPI_SetMode
323   * @param  SPIx SPI Instance
324   * @param  Mode This parameter can be one of the following values:
325   *         @arg @ref LL_SPI_MODE_MASTER
326   *         @arg @ref LL_SPI_MODE_SLAVE
327   * @retval None
328   */
LL_SPI_SetMode(SPI_TypeDef * SPIx,uint32_t Mode)329 __STATIC_INLINE void LL_SPI_SetMode(SPI_TypeDef *SPIx, uint32_t Mode)
330 {
331   MODIFY_REG(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI, Mode);
332 }
333 
334 /**
335   * @brief  Get SPI operation mode (Master or Slave)
336   * @rmtoll CR1          MSTR          LL_SPI_GetMode\n
337   *         CR1          SSI           LL_SPI_GetMode
338   * @param  SPIx SPI Instance
339   * @retval Returned value can be one of the following values:
340   *         @arg @ref LL_SPI_MODE_MASTER
341   *         @arg @ref LL_SPI_MODE_SLAVE
342   */
LL_SPI_GetMode(SPI_TypeDef * SPIx)343 __STATIC_INLINE uint32_t LL_SPI_GetMode(SPI_TypeDef *SPIx)
344 {
345   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI));
346 }
347 
348 
349 /**
350   * @brief  Set clock phase
351   * @note   This bit should not be changed when communication is ongoing.
352   *         This bit is not used in SPI TI mode.
353   * @rmtoll CR1          CPHA          LL_SPI_SetClockPhase
354   * @param  SPIx SPI Instance
355   * @param  ClockPhase This parameter can be one of the following values:
356   *         @arg @ref LL_SPI_PHASE_1EDGE
357   *         @arg @ref LL_SPI_PHASE_2EDGE
358   * @retval None
359   */
LL_SPI_SetClockPhase(SPI_TypeDef * SPIx,uint32_t ClockPhase)360 __STATIC_INLINE void LL_SPI_SetClockPhase(SPI_TypeDef *SPIx, uint32_t ClockPhase)
361 {
362   MODIFY_REG(SPIx->CR1, SPI_CR1_CPHA, ClockPhase);
363 }
364 
365 /**
366   * @brief  Get clock phase
367   * @rmtoll CR1          CPHA          LL_SPI_GetClockPhase
368   * @param  SPIx SPI Instance
369   * @retval Returned value can be one of the following values:
370   *         @arg @ref LL_SPI_PHASE_1EDGE
371   *         @arg @ref LL_SPI_PHASE_2EDGE
372   */
LL_SPI_GetClockPhase(SPI_TypeDef * SPIx)373 __STATIC_INLINE uint32_t LL_SPI_GetClockPhase(SPI_TypeDef *SPIx)
374 {
375   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPHA));
376 }
377 
378 /**
379   * @brief  Set clock polarity
380   * @note   This bit should not be changed when communication is ongoing.
381   *         This bit is not used in SPI TI mode.
382   * @rmtoll CR1          CPOL          LL_SPI_SetClockPolarity
383   * @param  SPIx SPI Instance
384   * @param  ClockPolarity This parameter can be one of the following values:
385   *         @arg @ref LL_SPI_POLARITY_LOW
386   *         @arg @ref LL_SPI_POLARITY_HIGH
387   * @retval None
388   */
LL_SPI_SetClockPolarity(SPI_TypeDef * SPIx,uint32_t ClockPolarity)389 __STATIC_INLINE void LL_SPI_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity)
390 {
391   MODIFY_REG(SPIx->CR1, SPI_CR1_CPOL, ClockPolarity);
392 }
393 
394 /**
395   * @brief  Get clock polarity
396   * @rmtoll CR1          CPOL          LL_SPI_GetClockPolarity
397   * @param  SPIx SPI Instance
398   * @retval Returned value can be one of the following values:
399   *         @arg @ref LL_SPI_POLARITY_LOW
400   *         @arg @ref LL_SPI_POLARITY_HIGH
401   */
LL_SPI_GetClockPolarity(SPI_TypeDef * SPIx)402 __STATIC_INLINE uint32_t LL_SPI_GetClockPolarity(SPI_TypeDef *SPIx)
403 {
404   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPOL));
405 }
406 
407 /**
408   * @brief  Set baud rate prescaler
409   * @note   These bits should not be changed when communication is ongoing. SPI BaudRate = fPCLK/Prescaler.
410   * @rmtoll CR1          BR            LL_SPI_SetBaudRatePrescaler
411   * @param  SPIx SPI Instance
412   * @param  BaudRate This parameter can be one of the following values:
413   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2
414   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4
415   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8
416   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16
417   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32
418   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64
419   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128
420   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256
421   * @retval None
422   */
LL_SPI_SetBaudRatePrescaler(SPI_TypeDef * SPIx,uint32_t BaudRate)423 __STATIC_INLINE void LL_SPI_SetBaudRatePrescaler(SPI_TypeDef *SPIx, uint32_t BaudRate)
424 {
425   MODIFY_REG(SPIx->CR1, SPI_CR1_BR, BaudRate);
426 }
427 
428 /**
429   * @brief  Get baud rate prescaler
430   * @rmtoll CR1          BR            LL_SPI_GetBaudRatePrescaler
431   * @param  SPIx SPI Instance
432   * @retval Returned value can be one of the following values:
433   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2
434   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4
435   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8
436   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16
437   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32
438   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64
439   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128
440   *         @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256
441   */
LL_SPI_GetBaudRatePrescaler(SPI_TypeDef * SPIx)442 __STATIC_INLINE uint32_t LL_SPI_GetBaudRatePrescaler(SPI_TypeDef *SPIx)
443 {
444   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_BR));
445 }
446 
447 /**
448   * @brief  Set transfer bit order
449   * @note   This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode.
450   * @rmtoll CR1          LSBFIRST      LL_SPI_SetTransferBitOrder
451   * @param  SPIx SPI Instance
452   * @param  BitOrder This parameter can be one of the following values:
453   *         @arg @ref LL_SPI_LSB_FIRST
454   *         @arg @ref LL_SPI_MSB_FIRST
455   * @retval None
456   */
LL_SPI_SetTransferBitOrder(SPI_TypeDef * SPIx,uint32_t BitOrder)457 __STATIC_INLINE void LL_SPI_SetTransferBitOrder(SPI_TypeDef *SPIx, uint32_t BitOrder)
458 {
459   MODIFY_REG(SPIx->CR1, SPI_CR1_LSBFIRST, BitOrder);
460 }
461 
462 /**
463   * @brief  Get transfer bit order
464   * @rmtoll CR1          LSBFIRST      LL_SPI_GetTransferBitOrder
465   * @param  SPIx SPI Instance
466   * @retval Returned value can be one of the following values:
467   *         @arg @ref LL_SPI_LSB_FIRST
468   *         @arg @ref LL_SPI_MSB_FIRST
469   */
LL_SPI_GetTransferBitOrder(SPI_TypeDef * SPIx)470 __STATIC_INLINE uint32_t LL_SPI_GetTransferBitOrder(SPI_TypeDef *SPIx)
471 {
472   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_LSBFIRST));
473 }
474 
475 /**
476   * @brief  Set transfer direction mode
477   * @note   For Half-Duplex mode, Rx Direction is set by default.
478   *         In master mode, the MOSI pin is used and in slave mode, the MISO pin is used for Half-Duplex.
479   * @rmtoll CR1          RXONLY        LL_SPI_SetTransferDirection\n
480   *         CR1          BIDIMODE      LL_SPI_SetTransferDirection\n
481   *         CR1          BIDIOE        LL_SPI_SetTransferDirection
482   * @param  SPIx SPI Instance
483   * @param  TransferDirection This parameter can be one of the following values:
484   *         @arg @ref LL_SPI_FULL_DUPLEX
485   *         @arg @ref LL_SPI_SIMPLEX_RX
486   *         @arg @ref LL_SPI_HALF_DUPLEX_RX
487   *         @arg @ref LL_SPI_HALF_DUPLEX_TX
488   * @retval None
489   */
LL_SPI_SetTransferDirection(SPI_TypeDef * SPIx,uint32_t TransferDirection)490 __STATIC_INLINE void LL_SPI_SetTransferDirection(SPI_TypeDef *SPIx, uint32_t TransferDirection)
491 {
492   MODIFY_REG(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE, TransferDirection);
493 }
494 
495 /**
496   * @brief  Get transfer direction mode
497   * @rmtoll CR1          RXONLY        LL_SPI_GetTransferDirection\n
498   *         CR1          BIDIMODE      LL_SPI_GetTransferDirection\n
499   *         CR1          BIDIOE        LL_SPI_GetTransferDirection
500   * @param  SPIx SPI Instance
501   * @retval Returned value can be one of the following values:
502   *         @arg @ref LL_SPI_FULL_DUPLEX
503   *         @arg @ref LL_SPI_SIMPLEX_RX
504   *         @arg @ref LL_SPI_HALF_DUPLEX_RX
505   *         @arg @ref LL_SPI_HALF_DUPLEX_TX
506   */
LL_SPI_GetTransferDirection(SPI_TypeDef * SPIx)507 __STATIC_INLINE uint32_t LL_SPI_GetTransferDirection(SPI_TypeDef *SPIx)
508 {
509   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE));
510 }
511 
512 /**
513   * @brief  Set frame data width
514   * @rmtoll CR1          DFF           LL_SPI_SetDataWidth
515   * @param  SPIx SPI Instance
516   * @param  DataWidth This parameter can be one of the following values:
517   *         @arg @ref LL_SPI_DATAWIDTH_8BIT
518   *         @arg @ref LL_SPI_DATAWIDTH_16BIT
519   * @retval None
520   */
LL_SPI_SetDataWidth(SPI_TypeDef * SPIx,uint32_t DataWidth)521 __STATIC_INLINE void LL_SPI_SetDataWidth(SPI_TypeDef *SPIx, uint32_t DataWidth)
522 {
523   MODIFY_REG(SPIx->CR1, SPI_CR1_DFF, DataWidth);
524 }
525 
526 /**
527   * @brief  Get frame data width
528   * @rmtoll CR1          DFF           LL_SPI_GetDataWidth
529   * @param  SPIx SPI Instance
530   * @retval Returned value can be one of the following values:
531   *         @arg @ref LL_SPI_DATAWIDTH_8BIT
532   *         @arg @ref LL_SPI_DATAWIDTH_16BIT
533   */
LL_SPI_GetDataWidth(SPI_TypeDef * SPIx)534 __STATIC_INLINE uint32_t LL_SPI_GetDataWidth(SPI_TypeDef *SPIx)
535 {
536   return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_DFF));
537 }
538 
539 /**
540   * @}
541   */
542 
543 /** @defgroup SPI_LL_EF_CRC_Management CRC Management
544   * @{
545   */
546 
547 /**
548   * @brief  Enable CRC
549   * @note   This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
550   * @rmtoll CR1          CRCEN         LL_SPI_EnableCRC
551   * @param  SPIx SPI Instance
552   * @retval None
553   */
LL_SPI_EnableCRC(SPI_TypeDef * SPIx)554 __STATIC_INLINE void LL_SPI_EnableCRC(SPI_TypeDef *SPIx)
555 {
556   SET_BIT(SPIx->CR1, SPI_CR1_CRCEN);
557 }
558 
559 /**
560   * @brief  Disable CRC
561   * @note   This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
562   * @rmtoll CR1          CRCEN         LL_SPI_DisableCRC
563   * @param  SPIx SPI Instance
564   * @retval None
565   */
LL_SPI_DisableCRC(SPI_TypeDef * SPIx)566 __STATIC_INLINE void LL_SPI_DisableCRC(SPI_TypeDef *SPIx)
567 {
568   CLEAR_BIT(SPIx->CR1, SPI_CR1_CRCEN);
569 }
570 
571 /**
572   * @brief  Check if CRC is enabled
573   * @note   This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
574   * @rmtoll CR1          CRCEN         LL_SPI_IsEnabledCRC
575   * @param  SPIx SPI Instance
576   * @retval State of bit (1 or 0).
577   */
LL_SPI_IsEnabledCRC(SPI_TypeDef * SPIx)578 __STATIC_INLINE uint32_t LL_SPI_IsEnabledCRC(SPI_TypeDef *SPIx)
579 {
580   return ((READ_BIT(SPIx->CR1, SPI_CR1_CRCEN) == (SPI_CR1_CRCEN)) ? 1UL : 0UL);
581 }
582 
583 /**
584   * @brief  Set CRCNext to transfer CRC on the line
585   * @note   This bit has to be written as soon as the last data is written in the SPIx_DR register.
586   * @rmtoll CR1          CRCNEXT       LL_SPI_SetCRCNext
587   * @param  SPIx SPI Instance
588   * @retval None
589   */
LL_SPI_SetCRCNext(SPI_TypeDef * SPIx)590 __STATIC_INLINE void LL_SPI_SetCRCNext(SPI_TypeDef *SPIx)
591 {
592   SET_BIT(SPIx->CR1, SPI_CR1_CRCNEXT);
593 }
594 
595 /**
596   * @brief  Set polynomial for CRC calculation
597   * @rmtoll CRCPR        CRCPOLY       LL_SPI_SetCRCPolynomial
598   * @param  SPIx SPI Instance
599   * @param  CRCPoly This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFF
600   * @retval None
601   */
LL_SPI_SetCRCPolynomial(SPI_TypeDef * SPIx,uint32_t CRCPoly)602 __STATIC_INLINE void LL_SPI_SetCRCPolynomial(SPI_TypeDef *SPIx, uint32_t CRCPoly)
603 {
604   WRITE_REG(SPIx->CRCPR, (uint16_t)CRCPoly);
605 }
606 
607 /**
608   * @brief  Get polynomial for CRC calculation
609   * @rmtoll CRCPR        CRCPOLY       LL_SPI_GetCRCPolynomial
610   * @param  SPIx SPI Instance
611   * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF
612   */
LL_SPI_GetCRCPolynomial(SPI_TypeDef * SPIx)613 __STATIC_INLINE uint32_t LL_SPI_GetCRCPolynomial(SPI_TypeDef *SPIx)
614 {
615   return (uint32_t)(READ_REG(SPIx->CRCPR));
616 }
617 
618 /**
619   * @brief  Get Rx CRC
620   * @rmtoll RXCRCR       RXCRC         LL_SPI_GetRxCRC
621   * @param  SPIx SPI Instance
622   * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF
623   */
LL_SPI_GetRxCRC(SPI_TypeDef * SPIx)624 __STATIC_INLINE uint32_t LL_SPI_GetRxCRC(SPI_TypeDef *SPIx)
625 {
626   return (uint32_t)(READ_REG(SPIx->RXCRCR));
627 }
628 
629 /**
630   * @brief  Get Tx CRC
631   * @rmtoll TXCRCR       TXCRC         LL_SPI_GetTxCRC
632   * @param  SPIx SPI Instance
633   * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF
634   */
LL_SPI_GetTxCRC(SPI_TypeDef * SPIx)635 __STATIC_INLINE uint32_t LL_SPI_GetTxCRC(SPI_TypeDef *SPIx)
636 {
637   return (uint32_t)(READ_REG(SPIx->TXCRCR));
638 }
639 
640 /**
641   * @}
642   */
643 
644 /** @defgroup SPI_LL_EF_NSS_Management Slave Select Pin Management
645   * @{
646   */
647 
648 /**
649   * @brief  Set NSS mode
650   * @note   LL_SPI_NSS_SOFT Mode is not used in SPI TI mode.
651   * @rmtoll CR1          SSM           LL_SPI_SetNSSMode\n
652   * @rmtoll CR2          SSOE          LL_SPI_SetNSSMode
653   * @param  SPIx SPI Instance
654   * @param  NSS This parameter can be one of the following values:
655   *         @arg @ref LL_SPI_NSS_SOFT
656   *         @arg @ref LL_SPI_NSS_HARD_INPUT
657   *         @arg @ref LL_SPI_NSS_HARD_OUTPUT
658   * @retval None
659   */
LL_SPI_SetNSSMode(SPI_TypeDef * SPIx,uint32_t NSS)660 __STATIC_INLINE void LL_SPI_SetNSSMode(SPI_TypeDef *SPIx, uint32_t NSS)
661 {
662   MODIFY_REG(SPIx->CR1, SPI_CR1_SSM,  NSS);
663   MODIFY_REG(SPIx->CR2, SPI_CR2_SSOE, ((uint32_t)(NSS >> 16U)));
664 }
665 
666 /**
667   * @brief  Get NSS mode
668   * @rmtoll CR1          SSM           LL_SPI_GetNSSMode\n
669   * @rmtoll CR2          SSOE          LL_SPI_GetNSSMode
670   * @param  SPIx SPI Instance
671   * @retval Returned value can be one of the following values:
672   *         @arg @ref LL_SPI_NSS_SOFT
673   *         @arg @ref LL_SPI_NSS_HARD_INPUT
674   *         @arg @ref LL_SPI_NSS_HARD_OUTPUT
675   */
LL_SPI_GetNSSMode(SPI_TypeDef * SPIx)676 __STATIC_INLINE uint32_t LL_SPI_GetNSSMode(SPI_TypeDef *SPIx)
677 {
678   uint32_t Ssm  = (READ_BIT(SPIx->CR1, SPI_CR1_SSM));
679   uint32_t Ssoe = (READ_BIT(SPIx->CR2,  SPI_CR2_SSOE) << 16U);
680   return (Ssm | Ssoe);
681 }
682 
683 /**
684   * @}
685   */
686 
687 /** @defgroup SPI_LL_EF_FLAG_Management FLAG Management
688   * @{
689   */
690 
691 /**
692   * @brief  Check if Rx buffer is not empty
693   * @rmtoll SR           RXNE          LL_SPI_IsActiveFlag_RXNE
694   * @param  SPIx SPI Instance
695   * @retval State of bit (1 or 0).
696   */
LL_SPI_IsActiveFlag_RXNE(SPI_TypeDef * SPIx)697 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_RXNE(SPI_TypeDef *SPIx)
698 {
699   return ((READ_BIT(SPIx->SR, SPI_SR_RXNE) == (SPI_SR_RXNE)) ? 1UL : 0UL);
700 }
701 
702 /**
703   * @brief  Check if Tx buffer is empty
704   * @rmtoll SR           TXE           LL_SPI_IsActiveFlag_TXE
705   * @param  SPIx SPI Instance
706   * @retval State of bit (1 or 0).
707   */
LL_SPI_IsActiveFlag_TXE(SPI_TypeDef * SPIx)708 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_TXE(SPI_TypeDef *SPIx)
709 {
710   return ((READ_BIT(SPIx->SR, SPI_SR_TXE) == (SPI_SR_TXE)) ? 1UL : 0UL);
711 }
712 
713 /**
714   * @brief  Get CRC error flag
715   * @rmtoll SR           CRCERR        LL_SPI_IsActiveFlag_CRCERR
716   * @param  SPIx SPI Instance
717   * @retval State of bit (1 or 0).
718   */
LL_SPI_IsActiveFlag_CRCERR(SPI_TypeDef * SPIx)719 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_CRCERR(SPI_TypeDef *SPIx)
720 {
721   return ((READ_BIT(SPIx->SR, SPI_SR_CRCERR) == (SPI_SR_CRCERR)) ? 1UL : 0UL);
722 }
723 
724 /**
725   * @brief  Get mode fault error flag
726   * @rmtoll SR           MODF          LL_SPI_IsActiveFlag_MODF
727   * @param  SPIx SPI Instance
728   * @retval State of bit (1 or 0).
729   */
LL_SPI_IsActiveFlag_MODF(SPI_TypeDef * SPIx)730 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_MODF(SPI_TypeDef *SPIx)
731 {
732   return ((READ_BIT(SPIx->SR, SPI_SR_MODF) == (SPI_SR_MODF)) ? 1UL : 0UL);
733 }
734 
735 /**
736   * @brief  Get overrun error flag
737   * @rmtoll SR           OVR           LL_SPI_IsActiveFlag_OVR
738   * @param  SPIx SPI Instance
739   * @retval State of bit (1 or 0).
740   */
LL_SPI_IsActiveFlag_OVR(SPI_TypeDef * SPIx)741 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_OVR(SPI_TypeDef *SPIx)
742 {
743   return ((READ_BIT(SPIx->SR, SPI_SR_OVR) == (SPI_SR_OVR)) ? 1UL : 0UL);
744 }
745 
746 /**
747   * @brief  Get busy flag
748   * @note   The BSY flag is cleared under any one of the following conditions:
749   * -When the SPI is correctly disabled
750   * -When a fault is detected in Master mode (MODF bit set to 1)
751   * -In Master mode, when it finishes a data transmission and no new data is ready to be
752   * sent
753   * -In Slave mode, when the BSY flag is set to '0' for at least one SPI clock cycle between
754   * each data transfer.
755   * @rmtoll SR           BSY           LL_SPI_IsActiveFlag_BSY
756   * @param  SPIx SPI Instance
757   * @retval State of bit (1 or 0).
758   */
LL_SPI_IsActiveFlag_BSY(SPI_TypeDef * SPIx)759 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_BSY(SPI_TypeDef *SPIx)
760 {
761   return ((READ_BIT(SPIx->SR, SPI_SR_BSY) == (SPI_SR_BSY)) ? 1UL : 0UL);
762 }
763 
764 
765 /**
766   * @brief  Clear CRC error flag
767   * @rmtoll SR           CRCERR        LL_SPI_ClearFlag_CRCERR
768   * @param  SPIx SPI Instance
769   * @retval None
770   */
LL_SPI_ClearFlag_CRCERR(SPI_TypeDef * SPIx)771 __STATIC_INLINE void LL_SPI_ClearFlag_CRCERR(SPI_TypeDef *SPIx)
772 {
773   CLEAR_BIT(SPIx->SR, SPI_SR_CRCERR);
774 }
775 
776 /**
777   * @brief  Clear mode fault error flag
778   * @note   Clearing this flag is done by a read access to the SPIx_SR
779   *         register followed by a write access to the SPIx_CR1 register
780   * @rmtoll SR           MODF          LL_SPI_ClearFlag_MODF
781   * @param  SPIx SPI Instance
782   * @retval None
783   */
LL_SPI_ClearFlag_MODF(SPI_TypeDef * SPIx)784 __STATIC_INLINE void LL_SPI_ClearFlag_MODF(SPI_TypeDef *SPIx)
785 {
786   __IO uint32_t tmpreg_sr;
787   tmpreg_sr = SPIx->SR;
788   (void) tmpreg_sr;
789   CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE);
790 }
791 
792 /**
793   * @brief  Clear overrun error flag
794   * @note   Clearing this flag is done by a read access to the SPIx_DR
795   *         register followed by a read access to the SPIx_SR register
796   * @rmtoll SR           OVR           LL_SPI_ClearFlag_OVR
797   * @param  SPIx SPI Instance
798   * @retval None
799   */
LL_SPI_ClearFlag_OVR(SPI_TypeDef * SPIx)800 __STATIC_INLINE void LL_SPI_ClearFlag_OVR(SPI_TypeDef *SPIx)
801 {
802   __IO uint32_t tmpreg;
803   tmpreg = SPIx->DR;
804   (void) tmpreg;
805   tmpreg = SPIx->SR;
806   (void) tmpreg;
807 }
808 
809 /**
810   * @brief  Clear frame format error flag
811   * @note   Clearing this flag is done by reading SPIx_SR register
812   * @rmtoll SR           FRE           LL_SPI_ClearFlag_FRE
813   * @param  SPIx SPI Instance
814   * @retval None
815   */
LL_SPI_ClearFlag_FRE(SPI_TypeDef * SPIx)816 __STATIC_INLINE void LL_SPI_ClearFlag_FRE(SPI_TypeDef *SPIx)
817 {
818   __IO uint32_t tmpreg;
819   tmpreg = SPIx->SR;
820   (void) tmpreg;
821 }
822 
823 /**
824   * @}
825   */
826 
827 /** @defgroup SPI_LL_EF_IT_Management Interrupt Management
828   * @{
829   */
830 
831 /**
832   * @brief  Enable error interrupt
833   * @note   This bit controls the generation of an interrupt when an error condition occurs (CRCERR, OVR, MODF in SPI mode, FRE at TI mode).
834   * @rmtoll CR2          ERRIE         LL_SPI_EnableIT_ERR
835   * @param  SPIx SPI Instance
836   * @retval None
837   */
LL_SPI_EnableIT_ERR(SPI_TypeDef * SPIx)838 __STATIC_INLINE void LL_SPI_EnableIT_ERR(SPI_TypeDef *SPIx)
839 {
840   SET_BIT(SPIx->CR2, SPI_CR2_ERRIE);
841 }
842 
843 /**
844   * @brief  Enable Rx buffer not empty interrupt
845   * @rmtoll CR2          RXNEIE        LL_SPI_EnableIT_RXNE
846   * @param  SPIx SPI Instance
847   * @retval None
848   */
LL_SPI_EnableIT_RXNE(SPI_TypeDef * SPIx)849 __STATIC_INLINE void LL_SPI_EnableIT_RXNE(SPI_TypeDef *SPIx)
850 {
851   SET_BIT(SPIx->CR2, SPI_CR2_RXNEIE);
852 }
853 
854 /**
855   * @brief  Enable Tx buffer empty interrupt
856   * @rmtoll CR2          TXEIE         LL_SPI_EnableIT_TXE
857   * @param  SPIx SPI Instance
858   * @retval None
859   */
LL_SPI_EnableIT_TXE(SPI_TypeDef * SPIx)860 __STATIC_INLINE void LL_SPI_EnableIT_TXE(SPI_TypeDef *SPIx)
861 {
862   SET_BIT(SPIx->CR2, SPI_CR2_TXEIE);
863 }
864 
865 /**
866   * @brief  Disable error interrupt
867   * @note   This bit controls the generation of an interrupt when an error condition occurs (CRCERR, OVR, MODF in SPI mode, FRE at TI mode).
868   * @rmtoll CR2          ERRIE         LL_SPI_DisableIT_ERR
869   * @param  SPIx SPI Instance
870   * @retval None
871   */
LL_SPI_DisableIT_ERR(SPI_TypeDef * SPIx)872 __STATIC_INLINE void LL_SPI_DisableIT_ERR(SPI_TypeDef *SPIx)
873 {
874   CLEAR_BIT(SPIx->CR2, SPI_CR2_ERRIE);
875 }
876 
877 /**
878   * @brief  Disable Rx buffer not empty interrupt
879   * @rmtoll CR2          RXNEIE        LL_SPI_DisableIT_RXNE
880   * @param  SPIx SPI Instance
881   * @retval None
882   */
LL_SPI_DisableIT_RXNE(SPI_TypeDef * SPIx)883 __STATIC_INLINE void LL_SPI_DisableIT_RXNE(SPI_TypeDef *SPIx)
884 {
885   CLEAR_BIT(SPIx->CR2, SPI_CR2_RXNEIE);
886 }
887 
888 /**
889   * @brief  Disable Tx buffer empty interrupt
890   * @rmtoll CR2          TXEIE         LL_SPI_DisableIT_TXE
891   * @param  SPIx SPI Instance
892   * @retval None
893   */
LL_SPI_DisableIT_TXE(SPI_TypeDef * SPIx)894 __STATIC_INLINE void LL_SPI_DisableIT_TXE(SPI_TypeDef *SPIx)
895 {
896   CLEAR_BIT(SPIx->CR2, SPI_CR2_TXEIE);
897 }
898 
899 /**
900   * @brief  Check if error interrupt is enabled
901   * @rmtoll CR2          ERRIE         LL_SPI_IsEnabledIT_ERR
902   * @param  SPIx SPI Instance
903   * @retval State of bit (1 or 0).
904   */
LL_SPI_IsEnabledIT_ERR(SPI_TypeDef * SPIx)905 __STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_ERR(SPI_TypeDef *SPIx)
906 {
907   return ((READ_BIT(SPIx->CR2, SPI_CR2_ERRIE) == (SPI_CR2_ERRIE)) ? 1UL : 0UL);
908 }
909 
910 /**
911   * @brief  Check if Rx buffer not empty interrupt is enabled
912   * @rmtoll CR2          RXNEIE        LL_SPI_IsEnabledIT_RXNE
913   * @param  SPIx SPI Instance
914   * @retval State of bit (1 or 0).
915   */
LL_SPI_IsEnabledIT_RXNE(SPI_TypeDef * SPIx)916 __STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_RXNE(SPI_TypeDef *SPIx)
917 {
918   return ((READ_BIT(SPIx->CR2, SPI_CR2_RXNEIE) == (SPI_CR2_RXNEIE)) ? 1UL : 0UL);
919 }
920 
921 /**
922   * @brief  Check if Tx buffer empty interrupt
923   * @rmtoll CR2          TXEIE         LL_SPI_IsEnabledIT_TXE
924   * @param  SPIx SPI Instance
925   * @retval State of bit (1 or 0).
926   */
LL_SPI_IsEnabledIT_TXE(SPI_TypeDef * SPIx)927 __STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_TXE(SPI_TypeDef *SPIx)
928 {
929   return ((READ_BIT(SPIx->CR2, SPI_CR2_TXEIE) == (SPI_CR2_TXEIE)) ? 1UL : 0UL);
930 }
931 
932 /**
933   * @}
934   */
935 
936 /** @defgroup SPI_LL_EF_DMA_Management DMA Management
937   * @{
938   */
939 
940 /**
941   * @brief  Enable DMA Rx
942   * @rmtoll CR2          RXDMAEN       LL_SPI_EnableDMAReq_RX
943   * @param  SPIx SPI Instance
944   * @retval None
945   */
LL_SPI_EnableDMAReq_RX(SPI_TypeDef * SPIx)946 __STATIC_INLINE void LL_SPI_EnableDMAReq_RX(SPI_TypeDef *SPIx)
947 {
948   SET_BIT(SPIx->CR2, SPI_CR2_RXDMAEN);
949 }
950 
951 /**
952   * @brief  Disable DMA Rx
953   * @rmtoll CR2          RXDMAEN       LL_SPI_DisableDMAReq_RX
954   * @param  SPIx SPI Instance
955   * @retval None
956   */
LL_SPI_DisableDMAReq_RX(SPI_TypeDef * SPIx)957 __STATIC_INLINE void LL_SPI_DisableDMAReq_RX(SPI_TypeDef *SPIx)
958 {
959   CLEAR_BIT(SPIx->CR2, SPI_CR2_RXDMAEN);
960 }
961 
962 /**
963   * @brief  Check if DMA Rx is enabled
964   * @rmtoll CR2          RXDMAEN       LL_SPI_IsEnabledDMAReq_RX
965   * @param  SPIx SPI Instance
966   * @retval State of bit (1 or 0).
967   */
LL_SPI_IsEnabledDMAReq_RX(SPI_TypeDef * SPIx)968 __STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx)
969 {
970   return ((READ_BIT(SPIx->CR2, SPI_CR2_RXDMAEN) == (SPI_CR2_RXDMAEN)) ? 1UL : 0UL);
971 }
972 
973 /**
974   * @brief  Enable DMA Tx
975   * @rmtoll CR2          TXDMAEN       LL_SPI_EnableDMAReq_TX
976   * @param  SPIx SPI Instance
977   * @retval None
978   */
LL_SPI_EnableDMAReq_TX(SPI_TypeDef * SPIx)979 __STATIC_INLINE void LL_SPI_EnableDMAReq_TX(SPI_TypeDef *SPIx)
980 {
981   SET_BIT(SPIx->CR2, SPI_CR2_TXDMAEN);
982 }
983 
984 /**
985   * @brief  Disable DMA Tx
986   * @rmtoll CR2          TXDMAEN       LL_SPI_DisableDMAReq_TX
987   * @param  SPIx SPI Instance
988   * @retval None
989   */
LL_SPI_DisableDMAReq_TX(SPI_TypeDef * SPIx)990 __STATIC_INLINE void LL_SPI_DisableDMAReq_TX(SPI_TypeDef *SPIx)
991 {
992   CLEAR_BIT(SPIx->CR2, SPI_CR2_TXDMAEN);
993 }
994 
995 /**
996   * @brief  Check if DMA Tx is enabled
997   * @rmtoll CR2          TXDMAEN       LL_SPI_IsEnabledDMAReq_TX
998   * @param  SPIx SPI Instance
999   * @retval State of bit (1 or 0).
1000   */
LL_SPI_IsEnabledDMAReq_TX(SPI_TypeDef * SPIx)1001 __STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx)
1002 {
1003   return ((READ_BIT(SPIx->CR2, SPI_CR2_TXDMAEN) == (SPI_CR2_TXDMAEN)) ? 1UL : 0UL);
1004 }
1005 
1006 /**
1007   * @brief  Get the data register address used for DMA transfer
1008   * @rmtoll DR           DR            LL_SPI_DMA_GetRegAddr
1009   * @param  SPIx SPI Instance
1010   * @retval Address of data register
1011   */
LL_SPI_DMA_GetRegAddr(SPI_TypeDef * SPIx)1012 __STATIC_INLINE uint32_t LL_SPI_DMA_GetRegAddr(SPI_TypeDef *SPIx)
1013 {
1014   return (uint32_t) &(SPIx->DR);
1015 }
1016 
1017 /**
1018   * @}
1019   */
1020 
1021 /** @defgroup SPI_LL_EF_DATA_Management DATA Management
1022   * @{
1023   */
1024 
1025 /**
1026   * @brief  Read 8-Bits in the data register
1027   * @rmtoll DR           DR            LL_SPI_ReceiveData8
1028   * @param  SPIx SPI Instance
1029   * @retval RxData Value between Min_Data=0x00 and Max_Data=0xFF
1030   */
LL_SPI_ReceiveData8(SPI_TypeDef * SPIx)1031 __STATIC_INLINE uint8_t LL_SPI_ReceiveData8(SPI_TypeDef *SPIx)
1032 {
1033   return (*((__IO uint8_t *)&SPIx->DR));
1034 }
1035 
1036 /**
1037   * @brief  Read 16-Bits in the data register
1038   * @rmtoll DR           DR            LL_SPI_ReceiveData16
1039   * @param  SPIx SPI Instance
1040   * @retval RxData Value between Min_Data=0x00 and Max_Data=0xFFFF
1041   */
LL_SPI_ReceiveData16(SPI_TypeDef * SPIx)1042 __STATIC_INLINE uint16_t LL_SPI_ReceiveData16(SPI_TypeDef *SPIx)
1043 {
1044   return (uint16_t)(READ_REG(SPIx->DR));
1045 }
1046 
1047 /**
1048   * @brief  Write 8-Bits in the data register
1049   * @rmtoll DR           DR            LL_SPI_TransmitData8
1050   * @param  SPIx SPI Instance
1051   * @param  TxData Value between Min_Data=0x00 and Max_Data=0xFF
1052   * @retval None
1053   */
LL_SPI_TransmitData8(SPI_TypeDef * SPIx,uint8_t TxData)1054 __STATIC_INLINE void LL_SPI_TransmitData8(SPI_TypeDef *SPIx, uint8_t TxData)
1055 {
1056 #if defined (__GNUC__)
1057   __IO uint8_t *spidr = ((__IO uint8_t *)&SPIx->DR);
1058   *spidr = TxData;
1059 #else
1060   *((__IO uint8_t *)&SPIx->DR) = TxData;
1061 #endif /* __GNUC__ */
1062 }
1063 
1064 /**
1065   * @brief  Write 16-Bits in the data register
1066   * @rmtoll DR           DR            LL_SPI_TransmitData16
1067   * @param  SPIx SPI Instance
1068   * @param  TxData Value between Min_Data=0x00 and Max_Data=0xFFFF
1069   * @retval None
1070   */
LL_SPI_TransmitData16(SPI_TypeDef * SPIx,uint16_t TxData)1071 __STATIC_INLINE void LL_SPI_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData)
1072 {
1073 #if defined (__GNUC__)
1074   __IO uint16_t *spidr = ((__IO uint16_t *)&SPIx->DR);
1075   *spidr = TxData;
1076 #else
1077   SPIx->DR = TxData;
1078 #endif /* __GNUC__ */
1079 }
1080 
1081 /**
1082   * @}
1083   */
1084 #if defined(USE_FULL_LL_DRIVER)
1085 /** @defgroup SPI_LL_EF_Init Initialization and de-initialization functions
1086   * @{
1087   */
1088 
1089 ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx);
1090 ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct);
1091 void        LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct);
1092 
1093 /**
1094   * @}
1095   */
1096 #endif /* USE_FULL_LL_DRIVER */
1097 /**
1098   * @}
1099   */
1100 
1101 /**
1102   * @}
1103   */
1104 
1105 #if defined(SPI_I2S_SUPPORT)
1106 /** @defgroup I2S_LL I2S
1107   * @{
1108   */
1109 
1110 /* Private variables ---------------------------------------------------------*/
1111 /* Private constants ---------------------------------------------------------*/
1112 /* Private macros ------------------------------------------------------------*/
1113 
1114 /* Exported types ------------------------------------------------------------*/
1115 #if defined(USE_FULL_LL_DRIVER)
1116 /** @defgroup I2S_LL_ES_INIT I2S Exported Init structure
1117   * @{
1118   */
1119 
1120 /**
1121   * @brief  I2S Init structure definition
1122   */
1123 
1124 typedef struct
1125 {
1126   uint32_t Mode;                    /*!< Specifies the I2S operating mode.
1127                                          This parameter can be a value of @ref I2S_LL_EC_MODE
1128 
1129                                          This feature can be modified afterwards using unitary function @ref LL_I2S_SetTransferMode().*/
1130 
1131   uint32_t Standard;                /*!< Specifies the standard used for the I2S communication.
1132                                          This parameter can be a value of @ref I2S_LL_EC_STANDARD
1133 
1134                                          This feature can be modified afterwards using unitary function @ref LL_I2S_SetStandard().*/
1135 
1136 
1137   uint32_t DataFormat;              /*!< Specifies the data format for the I2S communication.
1138                                          This parameter can be a value of @ref I2S_LL_EC_DATA_FORMAT
1139 
1140                                          This feature can be modified afterwards using unitary function @ref LL_I2S_SetDataFormat().*/
1141 
1142 
1143   uint32_t MCLKOutput;              /*!< Specifies whether the I2S MCLK output is enabled or not.
1144                                          This parameter can be a value of @ref I2S_LL_EC_MCLK_OUTPUT
1145 
1146                                          This feature can be modified afterwards using unitary functions @ref LL_I2S_EnableMasterClock() or @ref LL_I2S_DisableMasterClock.*/
1147 
1148 
1149   uint32_t AudioFreq;               /*!< Specifies the frequency selected for the I2S communication.
1150                                          This parameter can be a value of @ref I2S_LL_EC_AUDIO_FREQ
1151 
1152                                          Audio Frequency can be modified afterwards using Reference manual formulas to calculate Prescaler Linear, Parity
1153                                          and unitary functions @ref LL_I2S_SetPrescalerLinear() and @ref LL_I2S_SetPrescalerParity() to set it.*/
1154 
1155 
1156   uint32_t ClockPolarity;           /*!< Specifies the idle state of the I2S clock.
1157                                          This parameter can be a value of @ref I2S_LL_EC_POLARITY
1158 
1159                                          This feature can be modified afterwards using unitary function @ref LL_I2S_SetClockPolarity().*/
1160 
1161 } LL_I2S_InitTypeDef;
1162 
1163 /**
1164   * @}
1165   */
1166 #endif /*USE_FULL_LL_DRIVER*/
1167 
1168 /* Exported constants --------------------------------------------------------*/
1169 /** @defgroup I2S_LL_Exported_Constants I2S Exported Constants
1170   * @{
1171   */
1172 
1173 /** @defgroup I2S_LL_EC_GET_FLAG Get Flags Defines
1174   * @brief    Flags defines which can be used with LL_I2S_ReadReg function
1175   * @{
1176   */
1177 #define LL_I2S_SR_RXNE                     LL_SPI_SR_RXNE            /*!< Rx buffer not empty flag         */
1178 #define LL_I2S_SR_TXE                      LL_SPI_SR_TXE             /*!< Tx buffer empty flag             */
1179 #define LL_I2S_SR_BSY                      LL_SPI_SR_BSY             /*!< Busy flag                        */
1180 #define LL_I2S_SR_UDR                      SPI_SR_UDR                /*!< Underrun flag                    */
1181 #define LL_I2S_SR_OVR                      LL_SPI_SR_OVR             /*!< Overrun flag                     */
1182 #define LL_I2S_SR_FRE                      LL_SPI_SR_FRE             /*!< TI mode frame format error flag  */
1183 /**
1184   * @}
1185   */
1186 
1187 /** @defgroup SPI_LL_EC_IT IT Defines
1188   * @brief    IT defines which can be used with LL_SPI_ReadReg and  LL_SPI_WriteReg functions
1189   * @{
1190   */
1191 #define LL_I2S_CR2_RXNEIE                  LL_SPI_CR2_RXNEIE         /*!< Rx buffer not empty interrupt enable */
1192 #define LL_I2S_CR2_TXEIE                   LL_SPI_CR2_TXEIE          /*!< Tx buffer empty interrupt enable     */
1193 #define LL_I2S_CR2_ERRIE                   LL_SPI_CR2_ERRIE          /*!< Error interrupt enable               */
1194 /**
1195   * @}
1196   */
1197 
1198 /** @defgroup I2S_LL_EC_DATA_FORMAT Data format
1199   * @{
1200   */
1201 #define LL_I2S_DATAFORMAT_16B              0x00000000U                                   /*!< Data length 16 bits, Channel length 16bit */
1202 #define LL_I2S_DATAFORMAT_16B_EXTENDED     (SPI_I2SCFGR_CHLEN)                           /*!< Data length 16 bits, Channel length 32bit */
1203 #define LL_I2S_DATAFORMAT_24B              (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN_0)    /*!< Data length 24 bits, Channel length 32bit */
1204 #define LL_I2S_DATAFORMAT_32B              (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN_1)    /*!< Data length 16 bits, Channel length 32bit */
1205 /**
1206   * @}
1207   */
1208 
1209 /** @defgroup I2S_LL_EC_POLARITY Clock Polarity
1210   * @{
1211   */
1212 #define LL_I2S_POLARITY_LOW                0x00000000U               /*!< Clock steady state is low level  */
1213 #define LL_I2S_POLARITY_HIGH               (SPI_I2SCFGR_CKPOL)       /*!< Clock steady state is high level */
1214 /**
1215   * @}
1216   */
1217 
1218 /** @defgroup I2S_LL_EC_STANDARD I2s Standard
1219   * @{
1220   */
1221 #define LL_I2S_STANDARD_PHILIPS            0x00000000U                                                         /*!< I2S standard philips                      */
1222 #define LL_I2S_STANDARD_MSB                (SPI_I2SCFGR_I2SSTD_0)                                              /*!< MSB justified standard (left justified)   */
1223 #define LL_I2S_STANDARD_LSB                (SPI_I2SCFGR_I2SSTD_1)                                              /*!< LSB justified standard (right justified)  */
1224 #define LL_I2S_STANDARD_PCM_SHORT          (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1)                       /*!< PCM standard, short frame synchronization */
1225 #define LL_I2S_STANDARD_PCM_LONG           (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1 | SPI_I2SCFGR_PCMSYNC) /*!< PCM standard, long frame synchronization  */
1226 /**
1227   * @}
1228   */
1229 
1230 /** @defgroup I2S_LL_EC_MODE Operation Mode
1231   * @{
1232   */
1233 #define LL_I2S_MODE_SLAVE_TX               0x00000000U                                   /*!< Slave Tx configuration  */
1234 #define LL_I2S_MODE_SLAVE_RX               (SPI_I2SCFGR_I2SCFG_0)                        /*!< Slave Rx configuration  */
1235 #define LL_I2S_MODE_MASTER_TX              (SPI_I2SCFGR_I2SCFG_1)                        /*!< Master Tx configuration */
1236 #define LL_I2S_MODE_MASTER_RX              (SPI_I2SCFGR_I2SCFG_0 | SPI_I2SCFGR_I2SCFG_1) /*!< Master Rx configuration */
1237 /**
1238   * @}
1239   */
1240 
1241 /** @defgroup I2S_LL_EC_PRESCALER_FACTOR Prescaler Factor
1242   * @{
1243   */
1244 #define LL_I2S_PRESCALER_PARITY_EVEN       0x00000000U               /*!< Odd factor: Real divider value is =  I2SDIV * 2    */
1245 #define LL_I2S_PRESCALER_PARITY_ODD        (SPI_I2SPR_ODD >> 8U)     /*!< Odd factor: Real divider value is = (I2SDIV * 2)+1 */
1246 /**
1247   * @}
1248   */
1249 
1250 #if defined(USE_FULL_LL_DRIVER)
1251 
1252 /** @defgroup I2S_LL_EC_MCLK_OUTPUT MCLK Output
1253   * @{
1254   */
1255 #define LL_I2S_MCLK_OUTPUT_DISABLE         0x00000000U               /*!< Master clock output is disabled */
1256 #define LL_I2S_MCLK_OUTPUT_ENABLE          (SPI_I2SPR_MCKOE)         /*!< Master clock output is enabled  */
1257 /**
1258   * @}
1259   */
1260 
1261 /** @defgroup I2S_LL_EC_AUDIO_FREQ Audio Frequency
1262   * @{
1263   */
1264 
1265 #define LL_I2S_AUDIOFREQ_192K              192000U       /*!< Audio Frequency configuration 192000 Hz       */
1266 #define LL_I2S_AUDIOFREQ_96K               96000U        /*!< Audio Frequency configuration  96000 Hz       */
1267 #define LL_I2S_AUDIOFREQ_48K               48000U        /*!< Audio Frequency configuration  48000 Hz       */
1268 #define LL_I2S_AUDIOFREQ_44K               44100U        /*!< Audio Frequency configuration  44100 Hz       */
1269 #define LL_I2S_AUDIOFREQ_32K               32000U        /*!< Audio Frequency configuration  32000 Hz       */
1270 #define LL_I2S_AUDIOFREQ_22K               22050U        /*!< Audio Frequency configuration  22050 Hz       */
1271 #define LL_I2S_AUDIOFREQ_16K               16000U        /*!< Audio Frequency configuration  16000 Hz       */
1272 #define LL_I2S_AUDIOFREQ_11K               11025U        /*!< Audio Frequency configuration  11025 Hz       */
1273 #define LL_I2S_AUDIOFREQ_8K                8000U         /*!< Audio Frequency configuration   8000 Hz       */
1274 #define LL_I2S_AUDIOFREQ_DEFAULT           2U            /*!< Audio Freq not specified. Register I2SDIV = 2 */
1275 /**
1276   * @}
1277   */
1278 #endif /* USE_FULL_LL_DRIVER */
1279 
1280 /**
1281   * @}
1282   */
1283 
1284 /* Exported macro ------------------------------------------------------------*/
1285 /** @defgroup I2S_LL_Exported_Macros I2S Exported Macros
1286   * @{
1287   */
1288 
1289 /** @defgroup I2S_LL_EM_WRITE_READ Common Write and read registers Macros
1290   * @{
1291   */
1292 
1293 /**
1294   * @brief  Write a value in I2S register
1295   * @param  __INSTANCE__ I2S Instance
1296   * @param  __REG__ Register to be written
1297   * @param  __VALUE__ Value to be written in the register
1298   * @retval None
1299   */
1300 #define LL_I2S_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
1301 
1302 /**
1303   * @brief  Read a value in I2S register
1304   * @param  __INSTANCE__ I2S Instance
1305   * @param  __REG__ Register to be read
1306   * @retval Register value
1307   */
1308 #define LL_I2S_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
1309 /**
1310   * @}
1311   */
1312 
1313 /**
1314   * @}
1315   */
1316 
1317 
1318 /* Exported functions --------------------------------------------------------*/
1319 
1320 /** @defgroup I2S_LL_Exported_Functions I2S Exported Functions
1321   * @{
1322   */
1323 
1324 /** @defgroup I2S_LL_EF_Configuration Configuration
1325   * @{
1326   */
1327 
1328 /**
1329   * @brief  Select I2S mode and Enable I2S peripheral
1330   * @rmtoll I2SCFGR      I2SMOD        LL_I2S_Enable\n
1331   *         I2SCFGR      I2SE          LL_I2S_Enable
1332   * @param  SPIx SPI Instance
1333   * @retval None
1334   */
LL_I2S_Enable(SPI_TypeDef * SPIx)1335 __STATIC_INLINE void LL_I2S_Enable(SPI_TypeDef *SPIx)
1336 {
1337   SET_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD | SPI_I2SCFGR_I2SE);
1338 }
1339 
1340 /**
1341   * @brief  Disable I2S peripheral
1342   * @rmtoll I2SCFGR      I2SE          LL_I2S_Disable
1343   * @param  SPIx SPI Instance
1344   * @retval None
1345   */
LL_I2S_Disable(SPI_TypeDef * SPIx)1346 __STATIC_INLINE void LL_I2S_Disable(SPI_TypeDef *SPIx)
1347 {
1348   CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD | SPI_I2SCFGR_I2SE);
1349 }
1350 
1351 /**
1352   * @brief  Check if I2S peripheral is enabled
1353   * @rmtoll I2SCFGR      I2SE          LL_I2S_IsEnabled
1354   * @param  SPIx SPI Instance
1355   * @retval State of bit (1 or 0).
1356   */
LL_I2S_IsEnabled(SPI_TypeDef * SPIx)1357 __STATIC_INLINE uint32_t LL_I2S_IsEnabled(SPI_TypeDef *SPIx)
1358 {
1359   return ((READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SE) == (SPI_I2SCFGR_I2SE)) ? 1UL : 0UL);
1360 }
1361 
1362 /**
1363   * @brief  Set I2S data frame length
1364   * @rmtoll I2SCFGR      DATLEN        LL_I2S_SetDataFormat\n
1365   *         I2SCFGR      CHLEN         LL_I2S_SetDataFormat
1366   * @param  SPIx SPI Instance
1367   * @param  DataFormat This parameter can be one of the following values:
1368   *         @arg @ref LL_I2S_DATAFORMAT_16B
1369   *         @arg @ref LL_I2S_DATAFORMAT_16B_EXTENDED
1370   *         @arg @ref LL_I2S_DATAFORMAT_24B
1371   *         @arg @ref LL_I2S_DATAFORMAT_32B
1372   * @retval None
1373   */
LL_I2S_SetDataFormat(SPI_TypeDef * SPIx,uint32_t DataFormat)1374 __STATIC_INLINE void LL_I2S_SetDataFormat(SPI_TypeDef *SPIx, uint32_t DataFormat)
1375 {
1376   MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_DATLEN | SPI_I2SCFGR_CHLEN, DataFormat);
1377 }
1378 
1379 /**
1380   * @brief  Get I2S data frame length
1381   * @rmtoll I2SCFGR      DATLEN        LL_I2S_GetDataFormat\n
1382   *         I2SCFGR      CHLEN         LL_I2S_GetDataFormat
1383   * @param  SPIx SPI Instance
1384   * @retval Returned value can be one of the following values:
1385   *         @arg @ref LL_I2S_DATAFORMAT_16B
1386   *         @arg @ref LL_I2S_DATAFORMAT_16B_EXTENDED
1387   *         @arg @ref LL_I2S_DATAFORMAT_24B
1388   *         @arg @ref LL_I2S_DATAFORMAT_32B
1389   */
LL_I2S_GetDataFormat(SPI_TypeDef * SPIx)1390 __STATIC_INLINE uint32_t LL_I2S_GetDataFormat(SPI_TypeDef *SPIx)
1391 {
1392   return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_DATLEN | SPI_I2SCFGR_CHLEN));
1393 }
1394 
1395 /**
1396   * @brief  Set I2S clock polarity
1397   * @rmtoll I2SCFGR      CKPOL         LL_I2S_SetClockPolarity
1398   * @param  SPIx SPI Instance
1399   * @param  ClockPolarity This parameter can be one of the following values:
1400   *         @arg @ref LL_I2S_POLARITY_LOW
1401   *         @arg @ref LL_I2S_POLARITY_HIGH
1402   * @retval None
1403   */
LL_I2S_SetClockPolarity(SPI_TypeDef * SPIx,uint32_t ClockPolarity)1404 __STATIC_INLINE void LL_I2S_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity)
1405 {
1406   SET_BIT(SPIx->I2SCFGR, ClockPolarity);
1407 }
1408 
1409 /**
1410   * @brief  Get I2S clock polarity
1411   * @rmtoll I2SCFGR      CKPOL         LL_I2S_GetClockPolarity
1412   * @param  SPIx SPI Instance
1413   * @retval Returned value can be one of the following values:
1414   *         @arg @ref LL_I2S_POLARITY_LOW
1415   *         @arg @ref LL_I2S_POLARITY_HIGH
1416   */
LL_I2S_GetClockPolarity(SPI_TypeDef * SPIx)1417 __STATIC_INLINE uint32_t LL_I2S_GetClockPolarity(SPI_TypeDef *SPIx)
1418 {
1419   return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_CKPOL));
1420 }
1421 
1422 /**
1423   * @brief  Set I2S standard protocol
1424   * @rmtoll I2SCFGR      I2SSTD        LL_I2S_SetStandard\n
1425   *         I2SCFGR      PCMSYNC       LL_I2S_SetStandard
1426   * @param  SPIx SPI Instance
1427   * @param  Standard This parameter can be one of the following values:
1428   *         @arg @ref LL_I2S_STANDARD_PHILIPS
1429   *         @arg @ref LL_I2S_STANDARD_MSB
1430   *         @arg @ref LL_I2S_STANDARD_LSB
1431   *         @arg @ref LL_I2S_STANDARD_PCM_SHORT
1432   *         @arg @ref LL_I2S_STANDARD_PCM_LONG
1433   * @retval None
1434   */
LL_I2S_SetStandard(SPI_TypeDef * SPIx,uint32_t Standard)1435 __STATIC_INLINE void LL_I2S_SetStandard(SPI_TypeDef *SPIx, uint32_t Standard)
1436 {
1437   MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_I2SSTD | SPI_I2SCFGR_PCMSYNC, Standard);
1438 }
1439 
1440 /**
1441   * @brief  Get I2S standard protocol
1442   * @rmtoll I2SCFGR      I2SSTD        LL_I2S_GetStandard\n
1443   *         I2SCFGR      PCMSYNC       LL_I2S_GetStandard
1444   * @param  SPIx SPI Instance
1445   * @retval Returned value can be one of the following values:
1446   *         @arg @ref LL_I2S_STANDARD_PHILIPS
1447   *         @arg @ref LL_I2S_STANDARD_MSB
1448   *         @arg @ref LL_I2S_STANDARD_LSB
1449   *         @arg @ref LL_I2S_STANDARD_PCM_SHORT
1450   *         @arg @ref LL_I2S_STANDARD_PCM_LONG
1451   */
LL_I2S_GetStandard(SPI_TypeDef * SPIx)1452 __STATIC_INLINE uint32_t LL_I2S_GetStandard(SPI_TypeDef *SPIx)
1453 {
1454   return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SSTD | SPI_I2SCFGR_PCMSYNC));
1455 }
1456 
1457 /**
1458   * @brief  Set I2S transfer mode
1459   * @rmtoll I2SCFGR      I2SCFG        LL_I2S_SetTransferMode
1460   * @param  SPIx SPI Instance
1461   * @param  Mode This parameter can be one of the following values:
1462   *         @arg @ref LL_I2S_MODE_SLAVE_TX
1463   *         @arg @ref LL_I2S_MODE_SLAVE_RX
1464   *         @arg @ref LL_I2S_MODE_MASTER_TX
1465   *         @arg @ref LL_I2S_MODE_MASTER_RX
1466   * @retval None
1467   */
LL_I2S_SetTransferMode(SPI_TypeDef * SPIx,uint32_t Mode)1468 __STATIC_INLINE void LL_I2S_SetTransferMode(SPI_TypeDef *SPIx, uint32_t Mode)
1469 {
1470   MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_I2SCFG, Mode);
1471 }
1472 
1473 /**
1474   * @brief  Get I2S transfer mode
1475   * @rmtoll I2SCFGR      I2SCFG        LL_I2S_GetTransferMode
1476   * @param  SPIx SPI Instance
1477   * @retval Returned value can be one of the following values:
1478   *         @arg @ref LL_I2S_MODE_SLAVE_TX
1479   *         @arg @ref LL_I2S_MODE_SLAVE_RX
1480   *         @arg @ref LL_I2S_MODE_MASTER_TX
1481   *         @arg @ref LL_I2S_MODE_MASTER_RX
1482   */
LL_I2S_GetTransferMode(SPI_TypeDef * SPIx)1483 __STATIC_INLINE uint32_t LL_I2S_GetTransferMode(SPI_TypeDef *SPIx)
1484 {
1485   return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SCFG));
1486 }
1487 
1488 /**
1489   * @brief  Set I2S linear prescaler
1490   * @rmtoll I2SPR        I2SDIV        LL_I2S_SetPrescalerLinear
1491   * @param  SPIx SPI Instance
1492   * @param  PrescalerLinear Value between Min_Data=0x02 and Max_Data=0xFF
1493   * @retval None
1494   */
LL_I2S_SetPrescalerLinear(SPI_TypeDef * SPIx,uint8_t PrescalerLinear)1495 __STATIC_INLINE void LL_I2S_SetPrescalerLinear(SPI_TypeDef *SPIx, uint8_t PrescalerLinear)
1496 {
1497   MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_I2SDIV, PrescalerLinear);
1498 }
1499 
1500 /**
1501   * @brief  Get I2S linear prescaler
1502   * @rmtoll I2SPR        I2SDIV        LL_I2S_GetPrescalerLinear
1503   * @param  SPIx SPI Instance
1504   * @retval PrescalerLinear Value between Min_Data=0x02 and Max_Data=0xFF
1505   */
LL_I2S_GetPrescalerLinear(SPI_TypeDef * SPIx)1506 __STATIC_INLINE uint32_t LL_I2S_GetPrescalerLinear(SPI_TypeDef *SPIx)
1507 {
1508   return (uint32_t)(READ_BIT(SPIx->I2SPR, SPI_I2SPR_I2SDIV));
1509 }
1510 
1511 /**
1512   * @brief  Set I2S parity prescaler
1513   * @rmtoll I2SPR        ODD           LL_I2S_SetPrescalerParity
1514   * @param  SPIx SPI Instance
1515   * @param  PrescalerParity This parameter can be one of the following values:
1516   *         @arg @ref LL_I2S_PRESCALER_PARITY_EVEN
1517   *         @arg @ref LL_I2S_PRESCALER_PARITY_ODD
1518   * @retval None
1519   */
LL_I2S_SetPrescalerParity(SPI_TypeDef * SPIx,uint32_t PrescalerParity)1520 __STATIC_INLINE void LL_I2S_SetPrescalerParity(SPI_TypeDef *SPIx, uint32_t PrescalerParity)
1521 {
1522   MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_ODD, PrescalerParity << 8U);
1523 }
1524 
1525 /**
1526   * @brief  Get I2S parity prescaler
1527   * @rmtoll I2SPR        ODD           LL_I2S_GetPrescalerParity
1528   * @param  SPIx SPI Instance
1529   * @retval Returned value can be one of the following values:
1530   *         @arg @ref LL_I2S_PRESCALER_PARITY_EVEN
1531   *         @arg @ref LL_I2S_PRESCALER_PARITY_ODD
1532   */
LL_I2S_GetPrescalerParity(SPI_TypeDef * SPIx)1533 __STATIC_INLINE uint32_t LL_I2S_GetPrescalerParity(SPI_TypeDef *SPIx)
1534 {
1535   return (uint32_t)(READ_BIT(SPIx->I2SPR, SPI_I2SPR_ODD) >> 8U);
1536 }
1537 
1538 /**
1539   * @brief  Enable the master clock output (Pin MCK)
1540   * @rmtoll I2SPR        MCKOE         LL_I2S_EnableMasterClock
1541   * @param  SPIx SPI Instance
1542   * @retval None
1543   */
LL_I2S_EnableMasterClock(SPI_TypeDef * SPIx)1544 __STATIC_INLINE void LL_I2S_EnableMasterClock(SPI_TypeDef *SPIx)
1545 {
1546   SET_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE);
1547 }
1548 
1549 /**
1550   * @brief  Disable the master clock output (Pin MCK)
1551   * @rmtoll I2SPR        MCKOE         LL_I2S_DisableMasterClock
1552   * @param  SPIx SPI Instance
1553   * @retval None
1554   */
LL_I2S_DisableMasterClock(SPI_TypeDef * SPIx)1555 __STATIC_INLINE void LL_I2S_DisableMasterClock(SPI_TypeDef *SPIx)
1556 {
1557   CLEAR_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE);
1558 }
1559 
1560 /**
1561   * @brief  Check if the master clock output (Pin MCK) is enabled
1562   * @rmtoll I2SPR        MCKOE         LL_I2S_IsEnabledMasterClock
1563   * @param  SPIx SPI Instance
1564   * @retval State of bit (1 or 0).
1565   */
LL_I2S_IsEnabledMasterClock(SPI_TypeDef * SPIx)1566 __STATIC_INLINE uint32_t LL_I2S_IsEnabledMasterClock(SPI_TypeDef *SPIx)
1567 {
1568   return ((READ_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE) == (SPI_I2SPR_MCKOE)) ? 1UL : 0UL);
1569 }
1570 
1571 /**
1572   * @}
1573   */
1574 
1575 /** @defgroup I2S_LL_EF_FLAG FLAG Management
1576   * @{
1577   */
1578 
1579 /**
1580   * @brief  Check if Rx buffer is not empty
1581   * @rmtoll SR           RXNE          LL_I2S_IsActiveFlag_RXNE
1582   * @param  SPIx SPI Instance
1583   * @retval State of bit (1 or 0).
1584   */
LL_I2S_IsActiveFlag_RXNE(SPI_TypeDef * SPIx)1585 __STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_RXNE(SPI_TypeDef *SPIx)
1586 {
1587   return LL_SPI_IsActiveFlag_RXNE(SPIx);
1588 }
1589 
1590 /**
1591   * @brief  Check if Tx buffer is empty
1592   * @rmtoll SR           TXE           LL_I2S_IsActiveFlag_TXE
1593   * @param  SPIx SPI Instance
1594   * @retval State of bit (1 or 0).
1595   */
LL_I2S_IsActiveFlag_TXE(SPI_TypeDef * SPIx)1596 __STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_TXE(SPI_TypeDef *SPIx)
1597 {
1598   return LL_SPI_IsActiveFlag_TXE(SPIx);
1599 }
1600 
1601 /**
1602   * @brief  Get busy flag
1603   * @rmtoll SR           BSY           LL_I2S_IsActiveFlag_BSY
1604   * @param  SPIx SPI Instance
1605   * @retval State of bit (1 or 0).
1606   */
LL_I2S_IsActiveFlag_BSY(SPI_TypeDef * SPIx)1607 __STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_BSY(SPI_TypeDef *SPIx)
1608 {
1609   return LL_SPI_IsActiveFlag_BSY(SPIx);
1610 }
1611 
1612 /**
1613   * @brief  Get overrun error flag
1614   * @rmtoll SR           OVR           LL_I2S_IsActiveFlag_OVR
1615   * @param  SPIx SPI Instance
1616   * @retval State of bit (1 or 0).
1617   */
LL_I2S_IsActiveFlag_OVR(SPI_TypeDef * SPIx)1618 __STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_OVR(SPI_TypeDef *SPIx)
1619 {
1620   return LL_SPI_IsActiveFlag_OVR(SPIx);
1621 }
1622 
1623 /**
1624   * @brief  Get underrun error flag
1625   * @rmtoll SR           UDR           LL_I2S_IsActiveFlag_UDR
1626   * @param  SPIx SPI Instance
1627   * @retval State of bit (1 or 0).
1628   */
LL_I2S_IsActiveFlag_UDR(SPI_TypeDef * SPIx)1629 __STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_UDR(SPI_TypeDef *SPIx)
1630 {
1631   return ((READ_BIT(SPIx->SR, SPI_SR_UDR) == (SPI_SR_UDR)) ? 1UL : 0UL);
1632 }
1633 
1634 
1635 /**
1636   * @brief  Get channel side flag.
1637   * @note   0: Channel Left has to be transmitted or has been received\n
1638   *         1: Channel Right has to be transmitted or has been received\n
1639   *         It has no significance in PCM mode.
1640   * @rmtoll SR           CHSIDE        LL_I2S_IsActiveFlag_CHSIDE
1641   * @param  SPIx SPI Instance
1642   * @retval State of bit (1 or 0).
1643   */
LL_I2S_IsActiveFlag_CHSIDE(SPI_TypeDef * SPIx)1644 __STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_CHSIDE(SPI_TypeDef *SPIx)
1645 {
1646   return ((READ_BIT(SPIx->SR, SPI_SR_CHSIDE) == (SPI_SR_CHSIDE)) ? 1UL : 0UL);
1647 }
1648 
1649 /**
1650   * @brief  Clear overrun error flag
1651   * @rmtoll SR           OVR           LL_I2S_ClearFlag_OVR
1652   * @param  SPIx SPI Instance
1653   * @retval None
1654   */
LL_I2S_ClearFlag_OVR(SPI_TypeDef * SPIx)1655 __STATIC_INLINE void LL_I2S_ClearFlag_OVR(SPI_TypeDef *SPIx)
1656 {
1657   LL_SPI_ClearFlag_OVR(SPIx);
1658 }
1659 
1660 /**
1661   * @brief  Clear underrun error flag
1662   * @rmtoll SR           UDR           LL_I2S_ClearFlag_UDR
1663   * @param  SPIx SPI Instance
1664   * @retval None
1665   */
LL_I2S_ClearFlag_UDR(SPI_TypeDef * SPIx)1666 __STATIC_INLINE void LL_I2S_ClearFlag_UDR(SPI_TypeDef *SPIx)
1667 {
1668   __IO uint32_t tmpreg;
1669   tmpreg = SPIx->SR;
1670   (void)tmpreg;
1671 }
1672 
1673 /**
1674   * @brief  Clear frame format error flag
1675   * @rmtoll SR           FRE           LL_I2S_ClearFlag_FRE
1676   * @param  SPIx SPI Instance
1677   * @retval None
1678   */
LL_I2S_ClearFlag_FRE(SPI_TypeDef * SPIx)1679 __STATIC_INLINE void LL_I2S_ClearFlag_FRE(SPI_TypeDef *SPIx)
1680 {
1681   LL_SPI_ClearFlag_FRE(SPIx);
1682 }
1683 
1684 /**
1685   * @}
1686   */
1687 
1688 /** @defgroup I2S_LL_EF_IT Interrupt Management
1689   * @{
1690   */
1691 
1692 /**
1693   * @brief  Enable error IT
1694   * @note   This bit controls the generation of an interrupt when an error condition occurs (OVR, UDR and FRE in I2S mode).
1695   * @rmtoll CR2          ERRIE         LL_I2S_EnableIT_ERR
1696   * @param  SPIx SPI Instance
1697   * @retval None
1698   */
LL_I2S_EnableIT_ERR(SPI_TypeDef * SPIx)1699 __STATIC_INLINE void LL_I2S_EnableIT_ERR(SPI_TypeDef *SPIx)
1700 {
1701   LL_SPI_EnableIT_ERR(SPIx);
1702 }
1703 
1704 /**
1705   * @brief  Enable Rx buffer not empty IT
1706   * @rmtoll CR2          RXNEIE        LL_I2S_EnableIT_RXNE
1707   * @param  SPIx SPI Instance
1708   * @retval None
1709   */
LL_I2S_EnableIT_RXNE(SPI_TypeDef * SPIx)1710 __STATIC_INLINE void LL_I2S_EnableIT_RXNE(SPI_TypeDef *SPIx)
1711 {
1712   LL_SPI_EnableIT_RXNE(SPIx);
1713 }
1714 
1715 /**
1716   * @brief  Enable Tx buffer empty IT
1717   * @rmtoll CR2          TXEIE         LL_I2S_EnableIT_TXE
1718   * @param  SPIx SPI Instance
1719   * @retval None
1720   */
LL_I2S_EnableIT_TXE(SPI_TypeDef * SPIx)1721 __STATIC_INLINE void LL_I2S_EnableIT_TXE(SPI_TypeDef *SPIx)
1722 {
1723   LL_SPI_EnableIT_TXE(SPIx);
1724 }
1725 
1726 /**
1727   * @brief  Disable error IT
1728   * @note   This bit controls the generation of an interrupt when an error condition occurs (OVR, UDR and FRE in I2S mode).
1729   * @rmtoll CR2          ERRIE         LL_I2S_DisableIT_ERR
1730   * @param  SPIx SPI Instance
1731   * @retval None
1732   */
LL_I2S_DisableIT_ERR(SPI_TypeDef * SPIx)1733 __STATIC_INLINE void LL_I2S_DisableIT_ERR(SPI_TypeDef *SPIx)
1734 {
1735   LL_SPI_DisableIT_ERR(SPIx);
1736 }
1737 
1738 /**
1739   * @brief  Disable Rx buffer not empty IT
1740   * @rmtoll CR2          RXNEIE        LL_I2S_DisableIT_RXNE
1741   * @param  SPIx SPI Instance
1742   * @retval None
1743   */
LL_I2S_DisableIT_RXNE(SPI_TypeDef * SPIx)1744 __STATIC_INLINE void LL_I2S_DisableIT_RXNE(SPI_TypeDef *SPIx)
1745 {
1746   LL_SPI_DisableIT_RXNE(SPIx);
1747 }
1748 
1749 /**
1750   * @brief  Disable Tx buffer empty IT
1751   * @rmtoll CR2          TXEIE         LL_I2S_DisableIT_TXE
1752   * @param  SPIx SPI Instance
1753   * @retval None
1754   */
LL_I2S_DisableIT_TXE(SPI_TypeDef * SPIx)1755 __STATIC_INLINE void LL_I2S_DisableIT_TXE(SPI_TypeDef *SPIx)
1756 {
1757   LL_SPI_DisableIT_TXE(SPIx);
1758 }
1759 
1760 /**
1761   * @brief  Check if ERR IT is enabled
1762   * @rmtoll CR2          ERRIE         LL_I2S_IsEnabledIT_ERR
1763   * @param  SPIx SPI Instance
1764   * @retval State of bit (1 or 0).
1765   */
LL_I2S_IsEnabledIT_ERR(SPI_TypeDef * SPIx)1766 __STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_ERR(SPI_TypeDef *SPIx)
1767 {
1768   return LL_SPI_IsEnabledIT_ERR(SPIx);
1769 }
1770 
1771 /**
1772   * @brief  Check if RXNE IT is enabled
1773   * @rmtoll CR2          RXNEIE        LL_I2S_IsEnabledIT_RXNE
1774   * @param  SPIx SPI Instance
1775   * @retval State of bit (1 or 0).
1776   */
LL_I2S_IsEnabledIT_RXNE(SPI_TypeDef * SPIx)1777 __STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_RXNE(SPI_TypeDef *SPIx)
1778 {
1779   return LL_SPI_IsEnabledIT_RXNE(SPIx);
1780 }
1781 
1782 /**
1783   * @brief  Check if TXE IT is enabled
1784   * @rmtoll CR2          TXEIE         LL_I2S_IsEnabledIT_TXE
1785   * @param  SPIx SPI Instance
1786   * @retval State of bit (1 or 0).
1787   */
LL_I2S_IsEnabledIT_TXE(SPI_TypeDef * SPIx)1788 __STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_TXE(SPI_TypeDef *SPIx)
1789 {
1790   return LL_SPI_IsEnabledIT_TXE(SPIx);
1791 }
1792 
1793 /**
1794   * @}
1795   */
1796 
1797 /** @defgroup I2S_LL_EF_DMA DMA Management
1798   * @{
1799   */
1800 
1801 /**
1802   * @brief  Enable DMA Rx
1803   * @rmtoll CR2          RXDMAEN       LL_I2S_EnableDMAReq_RX
1804   * @param  SPIx SPI Instance
1805   * @retval None
1806   */
LL_I2S_EnableDMAReq_RX(SPI_TypeDef * SPIx)1807 __STATIC_INLINE void LL_I2S_EnableDMAReq_RX(SPI_TypeDef *SPIx)
1808 {
1809   LL_SPI_EnableDMAReq_RX(SPIx);
1810 }
1811 
1812 /**
1813   * @brief  Disable DMA Rx
1814   * @rmtoll CR2          RXDMAEN       LL_I2S_DisableDMAReq_RX
1815   * @param  SPIx SPI Instance
1816   * @retval None
1817   */
LL_I2S_DisableDMAReq_RX(SPI_TypeDef * SPIx)1818 __STATIC_INLINE void LL_I2S_DisableDMAReq_RX(SPI_TypeDef *SPIx)
1819 {
1820   LL_SPI_DisableDMAReq_RX(SPIx);
1821 }
1822 
1823 /**
1824   * @brief  Check if DMA Rx is enabled
1825   * @rmtoll CR2          RXDMAEN       LL_I2S_IsEnabledDMAReq_RX
1826   * @param  SPIx SPI Instance
1827   * @retval State of bit (1 or 0).
1828   */
LL_I2S_IsEnabledDMAReq_RX(SPI_TypeDef * SPIx)1829 __STATIC_INLINE uint32_t LL_I2S_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx)
1830 {
1831   return LL_SPI_IsEnabledDMAReq_RX(SPIx);
1832 }
1833 
1834 /**
1835   * @brief  Enable DMA Tx
1836   * @rmtoll CR2          TXDMAEN       LL_I2S_EnableDMAReq_TX
1837   * @param  SPIx SPI Instance
1838   * @retval None
1839   */
LL_I2S_EnableDMAReq_TX(SPI_TypeDef * SPIx)1840 __STATIC_INLINE void LL_I2S_EnableDMAReq_TX(SPI_TypeDef *SPIx)
1841 {
1842   LL_SPI_EnableDMAReq_TX(SPIx);
1843 }
1844 
1845 /**
1846   * @brief  Disable DMA Tx
1847   * @rmtoll CR2          TXDMAEN       LL_I2S_DisableDMAReq_TX
1848   * @param  SPIx SPI Instance
1849   * @retval None
1850   */
LL_I2S_DisableDMAReq_TX(SPI_TypeDef * SPIx)1851 __STATIC_INLINE void LL_I2S_DisableDMAReq_TX(SPI_TypeDef *SPIx)
1852 {
1853   LL_SPI_DisableDMAReq_TX(SPIx);
1854 }
1855 
1856 /**
1857   * @brief  Check if DMA Tx is enabled
1858   * @rmtoll CR2          TXDMAEN       LL_I2S_IsEnabledDMAReq_TX
1859   * @param  SPIx SPI Instance
1860   * @retval State of bit (1 or 0).
1861   */
LL_I2S_IsEnabledDMAReq_TX(SPI_TypeDef * SPIx)1862 __STATIC_INLINE uint32_t LL_I2S_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx)
1863 {
1864   return LL_SPI_IsEnabledDMAReq_TX(SPIx);
1865 }
1866 
1867 /**
1868   * @}
1869   */
1870 
1871 /** @defgroup I2S_LL_EF_DATA DATA Management
1872   * @{
1873   */
1874 
1875 /**
1876   * @brief  Read 16-Bits in data register
1877   * @rmtoll DR           DR            LL_I2S_ReceiveData16
1878   * @param  SPIx SPI Instance
1879   * @retval RxData Value between Min_Data=0x0000 and Max_Data=0xFFFF
1880   */
LL_I2S_ReceiveData16(SPI_TypeDef * SPIx)1881 __STATIC_INLINE uint16_t LL_I2S_ReceiveData16(SPI_TypeDef *SPIx)
1882 {
1883   return LL_SPI_ReceiveData16(SPIx);
1884 }
1885 
1886 /**
1887   * @brief  Write 16-Bits in data register
1888   * @rmtoll DR           DR            LL_I2S_TransmitData16
1889   * @param  SPIx SPI Instance
1890   * @param  TxData Value between Min_Data=0x0000 and Max_Data=0xFFFF
1891   * @retval None
1892   */
LL_I2S_TransmitData16(SPI_TypeDef * SPIx,uint16_t TxData)1893 __STATIC_INLINE void LL_I2S_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData)
1894 {
1895   LL_SPI_TransmitData16(SPIx, TxData);
1896 }
1897 
1898 /**
1899   * @}
1900   */
1901 
1902 #if defined(USE_FULL_LL_DRIVER)
1903 /** @defgroup I2S_LL_EF_Init Initialization and de-initialization functions
1904   * @{
1905   */
1906 
1907 ErrorStatus LL_I2S_DeInit(SPI_TypeDef *SPIx);
1908 ErrorStatus LL_I2S_Init(SPI_TypeDef *SPIx, LL_I2S_InitTypeDef *I2S_InitStruct);
1909 void        LL_I2S_StructInit(LL_I2S_InitTypeDef *I2S_InitStruct);
1910 void        LL_I2S_ConfigPrescaler(SPI_TypeDef *SPIx, uint32_t PrescalerLinear, uint32_t PrescalerParity);
1911 
1912 /**
1913   * @}
1914   */
1915 #endif /* USE_FULL_LL_DRIVER */
1916 
1917 /**
1918   * @}
1919   */
1920 
1921 /**
1922   * @}
1923   */
1924 #endif /* SPI_I2S_SUPPORT */
1925 
1926 #endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) */
1927 
1928 /**
1929   * @}
1930   */
1931 
1932 #ifdef __cplusplus
1933 }
1934 #endif
1935 
1936 #endif /* STM32F1xx_LL_SPI_H */
1937 
1938 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
1939