STM32L4xx_HAL_Driver  1.14.0
stm32l4xx_ll_spi.h
Go to the documentation of this file.
1 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32L4xx_LL_SPI_H
22 #define STM32L4xx_LL_SPI_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32l4xx.h"
30 
35 #if defined (SPI1) || defined (SPI2) || defined (SPI3)
36 
41 /* Private types -------------------------------------------------------------*/
42 /* Private variables ---------------------------------------------------------*/
43 /* Private macros ------------------------------------------------------------*/
44 
45 /* Exported types ------------------------------------------------------------*/
46 #if defined(USE_FULL_LL_DRIVER)
47 
54 typedef struct
55 {
56  uint32_t TransferDirection;
61  uint32_t Mode;
66  uint32_t DataWidth;
71  uint32_t ClockPolarity;
76  uint32_t ClockPhase;
81  uint32_t NSS;
86  uint32_t BaudRate;
92  uint32_t BitOrder;
97  uint32_t CRCCalculation;
102  uint32_t CRCPoly;
108 
112 #endif /* USE_FULL_LL_DRIVER */
113 
114 /* Exported constants --------------------------------------------------------*/
123 #define LL_SPI_SR_RXNE SPI_SR_RXNE
124 #define LL_SPI_SR_TXE SPI_SR_TXE
125 #define LL_SPI_SR_BSY SPI_SR_BSY
126 #define LL_SPI_SR_CRCERR SPI_SR_CRCERR
127 #define LL_SPI_SR_MODF SPI_SR_MODF
128 #define LL_SPI_SR_OVR SPI_SR_OVR
129 #define LL_SPI_SR_FRE SPI_SR_FRE
138 #define LL_SPI_CR2_RXNEIE SPI_CR2_RXNEIE
139 #define LL_SPI_CR2_TXEIE SPI_CR2_TXEIE
140 #define LL_SPI_CR2_ERRIE SPI_CR2_ERRIE
148 #define LL_SPI_MODE_MASTER (SPI_CR1_MSTR | SPI_CR1_SSI)
149 #define LL_SPI_MODE_SLAVE 0x00000000U
157 #define LL_SPI_PROTOCOL_MOTOROLA 0x00000000U
158 #define LL_SPI_PROTOCOL_TI (SPI_CR2_FRF)
166 #define LL_SPI_PHASE_1EDGE 0x00000000U
167 #define LL_SPI_PHASE_2EDGE (SPI_CR1_CPHA)
175 #define LL_SPI_POLARITY_LOW 0x00000000U
176 #define LL_SPI_POLARITY_HIGH (SPI_CR1_CPOL)
184 #define LL_SPI_BAUDRATEPRESCALER_DIV2 0x00000000U
185 #define LL_SPI_BAUDRATEPRESCALER_DIV4 (SPI_CR1_BR_0)
186 #define LL_SPI_BAUDRATEPRESCALER_DIV8 (SPI_CR1_BR_1)
187 #define LL_SPI_BAUDRATEPRESCALER_DIV16 (SPI_CR1_BR_1 | SPI_CR1_BR_0)
188 #define LL_SPI_BAUDRATEPRESCALER_DIV32 (SPI_CR1_BR_2)
189 #define LL_SPI_BAUDRATEPRESCALER_DIV64 (SPI_CR1_BR_2 | SPI_CR1_BR_0)
190 #define LL_SPI_BAUDRATEPRESCALER_DIV128 (SPI_CR1_BR_2 | SPI_CR1_BR_1)
191 #define LL_SPI_BAUDRATEPRESCALER_DIV256 (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0)
199 #define LL_SPI_LSB_FIRST (SPI_CR1_LSBFIRST)
200 #define LL_SPI_MSB_FIRST 0x00000000U
208 #define LL_SPI_FULL_DUPLEX 0x00000000U
209 #define LL_SPI_SIMPLEX_RX (SPI_CR1_RXONLY)
210 #define LL_SPI_HALF_DUPLEX_RX (SPI_CR1_BIDIMODE)
211 #define LL_SPI_HALF_DUPLEX_TX (SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE)
219 #define LL_SPI_NSS_SOFT (SPI_CR1_SSM)
220 #define LL_SPI_NSS_HARD_INPUT 0x00000000U
221 #define LL_SPI_NSS_HARD_OUTPUT (((uint32_t)SPI_CR2_SSOE << 16U))
229 #define LL_SPI_DATAWIDTH_4BIT (SPI_CR2_DS_0 | SPI_CR2_DS_1)
230 #define LL_SPI_DATAWIDTH_5BIT (SPI_CR2_DS_2)
231 #define LL_SPI_DATAWIDTH_6BIT (SPI_CR2_DS_2 | SPI_CR2_DS_0)
232 #define LL_SPI_DATAWIDTH_7BIT (SPI_CR2_DS_2 | SPI_CR2_DS_1)
233 #define LL_SPI_DATAWIDTH_8BIT (SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0)
234 #define LL_SPI_DATAWIDTH_9BIT (SPI_CR2_DS_3)
235 #define LL_SPI_DATAWIDTH_10BIT (SPI_CR2_DS_3 | SPI_CR2_DS_0)
236 #define LL_SPI_DATAWIDTH_11BIT (SPI_CR2_DS_3 | SPI_CR2_DS_1)
237 #define LL_SPI_DATAWIDTH_12BIT (SPI_CR2_DS_3 | SPI_CR2_DS_1 | SPI_CR2_DS_0)
238 #define LL_SPI_DATAWIDTH_13BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2)
239 #define LL_SPI_DATAWIDTH_14BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_0)
240 #define LL_SPI_DATAWIDTH_15BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1)
241 #define LL_SPI_DATAWIDTH_16BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0)
245 #if defined(USE_FULL_LL_DRIVER)
246 
250 #define LL_SPI_CRCCALCULATION_DISABLE 0x00000000U
251 #define LL_SPI_CRCCALCULATION_ENABLE (SPI_CR1_CRCEN)
255 #endif /* USE_FULL_LL_DRIVER */
256 
260 #define LL_SPI_CRC_8BIT 0x00000000U
261 #define LL_SPI_CRC_16BIT (SPI_CR1_CRCL)
269 #define LL_SPI_RX_FIFO_TH_HALF 0x00000000U
270 #define LL_SPI_RX_FIFO_TH_QUARTER (SPI_CR2_FRXTH)
278 #define LL_SPI_RX_FIFO_EMPTY 0x00000000U
279 #define LL_SPI_RX_FIFO_QUARTER_FULL (SPI_SR_FRLVL_0)
280 #define LL_SPI_RX_FIFO_HALF_FULL (SPI_SR_FRLVL_1)
281 #define LL_SPI_RX_FIFO_FULL (SPI_SR_FRLVL_1 | SPI_SR_FRLVL_0)
289 #define LL_SPI_TX_FIFO_EMPTY 0x00000000U
290 #define LL_SPI_TX_FIFO_QUARTER_FULL (SPI_SR_FTLVL_0)
291 #define LL_SPI_TX_FIFO_HALF_FULL (SPI_SR_FTLVL_1)
292 #define LL_SPI_TX_FIFO_FULL (SPI_SR_FTLVL_1 | SPI_SR_FTLVL_0)
300 #define LL_SPI_DMA_PARITY_EVEN 0x00000000U
301 #define LL_SPI_DMA_PARITY_ODD 0x00000001U
311 /* Exported macro ------------------------------------------------------------*/
312 
327 #define LL_SPI_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
328 
335 #define LL_SPI_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
336 
344 /* Exported functions --------------------------------------------------------*/
359 __STATIC_INLINE void LL_SPI_Enable(SPI_TypeDef *SPIx)
360 {
361  SET_BIT(SPIx->CR1, SPI_CR1_SPE);
362 }
363 
371 __STATIC_INLINE void LL_SPI_Disable(SPI_TypeDef *SPIx)
372 {
373  CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE);
374 }
375 
382 __STATIC_INLINE uint32_t LL_SPI_IsEnabled(SPI_TypeDef *SPIx)
383 {
384  return ((READ_BIT(SPIx->CR1, SPI_CR1_SPE) == (SPI_CR1_SPE)) ? 1UL : 0UL);
385 }
386 
398 __STATIC_INLINE void LL_SPI_SetMode(SPI_TypeDef *SPIx, uint32_t Mode)
399 {
400  MODIFY_REG(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI, Mode);
401 }
402 
412 __STATIC_INLINE uint32_t LL_SPI_GetMode(SPI_TypeDef *SPIx)
413 {
414  return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI));
415 }
416 
427 __STATIC_INLINE void LL_SPI_SetStandard(SPI_TypeDef *SPIx, uint32_t Standard)
428 {
429  MODIFY_REG(SPIx->CR2, SPI_CR2_FRF, Standard);
430 }
431 
440 __STATIC_INLINE uint32_t LL_SPI_GetStandard(SPI_TypeDef *SPIx)
441 {
442  return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_FRF));
443 }
444 
456 __STATIC_INLINE void LL_SPI_SetClockPhase(SPI_TypeDef *SPIx, uint32_t ClockPhase)
457 {
458  MODIFY_REG(SPIx->CR1, SPI_CR1_CPHA, ClockPhase);
459 }
460 
469 __STATIC_INLINE uint32_t LL_SPI_GetClockPhase(SPI_TypeDef *SPIx)
470 {
471  return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPHA));
472 }
473 
485 __STATIC_INLINE void LL_SPI_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity)
486 {
487  MODIFY_REG(SPIx->CR1, SPI_CR1_CPOL, ClockPolarity);
488 }
489 
498 __STATIC_INLINE uint32_t LL_SPI_GetClockPolarity(SPI_TypeDef *SPIx)
499 {
500  return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPOL));
501 }
502 
519 __STATIC_INLINE void LL_SPI_SetBaudRatePrescaler(SPI_TypeDef *SPIx, uint32_t BaudRate)
520 {
521  MODIFY_REG(SPIx->CR1, SPI_CR1_BR, BaudRate);
522 }
523 
538 __STATIC_INLINE uint32_t LL_SPI_GetBaudRatePrescaler(SPI_TypeDef *SPIx)
539 {
540  return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_BR));
541 }
542 
553 __STATIC_INLINE void LL_SPI_SetTransferBitOrder(SPI_TypeDef *SPIx, uint32_t BitOrder)
554 {
555  MODIFY_REG(SPIx->CR1, SPI_CR1_LSBFIRST, BitOrder);
556 }
557 
566 __STATIC_INLINE uint32_t LL_SPI_GetTransferBitOrder(SPI_TypeDef *SPIx)
567 {
568  return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_LSBFIRST));
569 }
570 
586 __STATIC_INLINE void LL_SPI_SetTransferDirection(SPI_TypeDef *SPIx, uint32_t TransferDirection)
587 {
588  MODIFY_REG(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE, TransferDirection);
589 }
590 
603 __STATIC_INLINE uint32_t LL_SPI_GetTransferDirection(SPI_TypeDef *SPIx)
604 {
605  return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE));
606 }
607 
628 __STATIC_INLINE void LL_SPI_SetDataWidth(SPI_TypeDef *SPIx, uint32_t DataWidth)
629 {
630  MODIFY_REG(SPIx->CR2, SPI_CR2_DS, DataWidth);
631 }
632 
652 __STATIC_INLINE uint32_t LL_SPI_GetDataWidth(SPI_TypeDef *SPIx)
653 {
654  return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_DS));
655 }
656 
666 __STATIC_INLINE void LL_SPI_SetRxFIFOThreshold(SPI_TypeDef *SPIx, uint32_t Threshold)
667 {
668  MODIFY_REG(SPIx->CR2, SPI_CR2_FRXTH, Threshold);
669 }
670 
679 __STATIC_INLINE uint32_t LL_SPI_GetRxFIFOThreshold(SPI_TypeDef *SPIx)
680 {
681  return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_FRXTH));
682 }
683 
699 __STATIC_INLINE void LL_SPI_EnableCRC(SPI_TypeDef *SPIx)
700 {
701  SET_BIT(SPIx->CR1, SPI_CR1_CRCEN);
702 }
703 
711 __STATIC_INLINE void LL_SPI_DisableCRC(SPI_TypeDef *SPIx)
712 {
713  CLEAR_BIT(SPIx->CR1, SPI_CR1_CRCEN);
714 }
715 
723 __STATIC_INLINE uint32_t LL_SPI_IsEnabledCRC(SPI_TypeDef *SPIx)
724 {
725  return ((READ_BIT(SPIx->CR1, SPI_CR1_CRCEN) == (SPI_CR1_CRCEN)) ? 1UL : 0UL);
726 }
727 
738 __STATIC_INLINE void LL_SPI_SetCRCWidth(SPI_TypeDef *SPIx, uint32_t CRCLength)
739 {
740  MODIFY_REG(SPIx->CR1, SPI_CR1_CRCL, CRCLength);
741 }
742 
751 __STATIC_INLINE uint32_t LL_SPI_GetCRCWidth(SPI_TypeDef *SPIx)
752 {
753  return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CRCL));
754 }
755 
763 __STATIC_INLINE void LL_SPI_SetCRCNext(SPI_TypeDef *SPIx)
764 {
765  SET_BIT(SPIx->CR1, SPI_CR1_CRCNEXT);
766 }
767 
775 __STATIC_INLINE void LL_SPI_SetCRCPolynomial(SPI_TypeDef *SPIx, uint32_t CRCPoly)
776 {
777  WRITE_REG(SPIx->CRCPR, (uint16_t)CRCPoly);
778 }
779 
786 __STATIC_INLINE uint32_t LL_SPI_GetCRCPolynomial(SPI_TypeDef *SPIx)
787 {
788  return (uint32_t)(READ_REG(SPIx->CRCPR));
789 }
790 
797 __STATIC_INLINE uint32_t LL_SPI_GetRxCRC(SPI_TypeDef *SPIx)
798 {
799  return (uint32_t)(READ_REG(SPIx->RXCRCR));
800 }
801 
808 __STATIC_INLINE uint32_t LL_SPI_GetTxCRC(SPI_TypeDef *SPIx)
809 {
810  return (uint32_t)(READ_REG(SPIx->TXCRCR));
811 }
812 
833 __STATIC_INLINE void LL_SPI_SetNSSMode(SPI_TypeDef *SPIx, uint32_t NSS)
834 {
835  MODIFY_REG(SPIx->CR1, SPI_CR1_SSM, NSS);
836  MODIFY_REG(SPIx->CR2, SPI_CR2_SSOE, ((uint32_t)(NSS >> 16U)));
837 }
838 
849 __STATIC_INLINE uint32_t LL_SPI_GetNSSMode(SPI_TypeDef *SPIx)
850 {
851  register uint32_t Ssm = (READ_BIT(SPIx->CR1, SPI_CR1_SSM));
852  register uint32_t Ssoe = (READ_BIT(SPIx->CR2, SPI_CR2_SSOE) << 16U);
853  return (Ssm | Ssoe);
854 }
855 
863 __STATIC_INLINE void LL_SPI_EnableNSSPulseMgt(SPI_TypeDef *SPIx)
864 {
865  SET_BIT(SPIx->CR2, SPI_CR2_NSSP);
866 }
867 
875 __STATIC_INLINE void LL_SPI_DisableNSSPulseMgt(SPI_TypeDef *SPIx)
876 {
877  CLEAR_BIT(SPIx->CR2, SPI_CR2_NSSP);
878 }
879 
887 __STATIC_INLINE uint32_t LL_SPI_IsEnabledNSSPulse(SPI_TypeDef *SPIx)
888 {
889  return ((READ_BIT(SPIx->CR2, SPI_CR2_NSSP) == (SPI_CR2_NSSP)) ? 1UL : 0UL);
890 }
891 
906 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_RXNE(SPI_TypeDef *SPIx)
907 {
908  return ((READ_BIT(SPIx->SR, SPI_SR_RXNE) == (SPI_SR_RXNE)) ? 1UL : 0UL);
909 }
910 
917 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_TXE(SPI_TypeDef *SPIx)
918 {
919  return ((READ_BIT(SPIx->SR, SPI_SR_TXE) == (SPI_SR_TXE)) ? 1UL : 0UL);
920 }
921 
928 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_CRCERR(SPI_TypeDef *SPIx)
929 {
930  return ((READ_BIT(SPIx->SR, SPI_SR_CRCERR) == (SPI_SR_CRCERR)) ? 1UL : 0UL);
931 }
932 
939 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_MODF(SPI_TypeDef *SPIx)
940 {
941  return ((READ_BIT(SPIx->SR, SPI_SR_MODF) == (SPI_SR_MODF)) ? 1UL : 0UL);
942 }
943 
950 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_OVR(SPI_TypeDef *SPIx)
951 {
952  return ((READ_BIT(SPIx->SR, SPI_SR_OVR) == (SPI_SR_OVR)) ? 1UL : 0UL);
953 }
954 
968 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_BSY(SPI_TypeDef *SPIx)
969 {
970  return ((READ_BIT(SPIx->SR, SPI_SR_BSY) == (SPI_SR_BSY)) ? 1UL : 0UL);
971 }
972 
979 __STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_FRE(SPI_TypeDef *SPIx)
980 {
981  return ((READ_BIT(SPIx->SR, SPI_SR_FRE) == (SPI_SR_FRE)) ? 1UL : 0UL);
982 }
983 
994 __STATIC_INLINE uint32_t LL_SPI_GetRxFIFOLevel(SPI_TypeDef *SPIx)
995 {
996  return (uint32_t)(READ_BIT(SPIx->SR, SPI_SR_FRLVL));
997 }
998 
1009 __STATIC_INLINE uint32_t LL_SPI_GetTxFIFOLevel(SPI_TypeDef *SPIx)
1010 {
1011  return (uint32_t)(READ_BIT(SPIx->SR, SPI_SR_FTLVL));
1012 }
1013 
1020 __STATIC_INLINE void LL_SPI_ClearFlag_CRCERR(SPI_TypeDef *SPIx)
1021 {
1022  CLEAR_BIT(SPIx->SR, SPI_SR_CRCERR);
1023 }
1024 
1033 __STATIC_INLINE void LL_SPI_ClearFlag_MODF(SPI_TypeDef *SPIx)
1034 {
1035  __IO uint32_t tmpreg_sr;
1036  tmpreg_sr = SPIx->SR;
1037  (void) tmpreg_sr;
1038  CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE);
1039 }
1040 
1049 __STATIC_INLINE void LL_SPI_ClearFlag_OVR(SPI_TypeDef *SPIx)
1050 {
1051  __IO uint32_t tmpreg;
1052  tmpreg = SPIx->DR;
1053  (void) tmpreg;
1054  tmpreg = SPIx->SR;
1055  (void) tmpreg;
1056 }
1057 
1065 __STATIC_INLINE void LL_SPI_ClearFlag_FRE(SPI_TypeDef *SPIx)
1066 {
1067  __IO uint32_t tmpreg;
1068  tmpreg = SPIx->SR;
1069  (void) tmpreg;
1070 }
1071 
1087 __STATIC_INLINE void LL_SPI_EnableIT_ERR(SPI_TypeDef *SPIx)
1088 {
1089  SET_BIT(SPIx->CR2, SPI_CR2_ERRIE);
1090 }
1091 
1098 __STATIC_INLINE void LL_SPI_EnableIT_RXNE(SPI_TypeDef *SPIx)
1099 {
1100  SET_BIT(SPIx->CR2, SPI_CR2_RXNEIE);
1101 }
1102 
1109 __STATIC_INLINE void LL_SPI_EnableIT_TXE(SPI_TypeDef *SPIx)
1110 {
1111  SET_BIT(SPIx->CR2, SPI_CR2_TXEIE);
1112 }
1113 
1121 __STATIC_INLINE void LL_SPI_DisableIT_ERR(SPI_TypeDef *SPIx)
1122 {
1123  CLEAR_BIT(SPIx->CR2, SPI_CR2_ERRIE);
1124 }
1125 
1132 __STATIC_INLINE void LL_SPI_DisableIT_RXNE(SPI_TypeDef *SPIx)
1133 {
1134  CLEAR_BIT(SPIx->CR2, SPI_CR2_RXNEIE);
1135 }
1136 
1143 __STATIC_INLINE void LL_SPI_DisableIT_TXE(SPI_TypeDef *SPIx)
1144 {
1145  CLEAR_BIT(SPIx->CR2, SPI_CR2_TXEIE);
1146 }
1147 
1154 __STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_ERR(SPI_TypeDef *SPIx)
1155 {
1156  return ((READ_BIT(SPIx->CR2, SPI_CR2_ERRIE) == (SPI_CR2_ERRIE)) ? 1UL : 0UL);
1157 }
1158 
1165 __STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_RXNE(SPI_TypeDef *SPIx)
1166 {
1167  return ((READ_BIT(SPIx->CR2, SPI_CR2_RXNEIE) == (SPI_CR2_RXNEIE)) ? 1UL : 0UL);
1168 }
1169 
1176 __STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_TXE(SPI_TypeDef *SPIx)
1177 {
1178  return ((READ_BIT(SPIx->CR2, SPI_CR2_TXEIE) == (SPI_CR2_TXEIE)) ? 1UL : 0UL);
1179 }
1180 
1195 __STATIC_INLINE void LL_SPI_EnableDMAReq_RX(SPI_TypeDef *SPIx)
1196 {
1197  SET_BIT(SPIx->CR2, SPI_CR2_RXDMAEN);
1198 }
1199 
1206 __STATIC_INLINE void LL_SPI_DisableDMAReq_RX(SPI_TypeDef *SPIx)
1207 {
1208  CLEAR_BIT(SPIx->CR2, SPI_CR2_RXDMAEN);
1209 }
1210 
1217 __STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx)
1218 {
1219  return ((READ_BIT(SPIx->CR2, SPI_CR2_RXDMAEN) == (SPI_CR2_RXDMAEN)) ? 1UL : 0UL);
1220 }
1221 
1228 __STATIC_INLINE void LL_SPI_EnableDMAReq_TX(SPI_TypeDef *SPIx)
1229 {
1230  SET_BIT(SPIx->CR2, SPI_CR2_TXDMAEN);
1231 }
1232 
1239 __STATIC_INLINE void LL_SPI_DisableDMAReq_TX(SPI_TypeDef *SPIx)
1240 {
1241  CLEAR_BIT(SPIx->CR2, SPI_CR2_TXDMAEN);
1242 }
1243 
1250 __STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx)
1251 {
1252  return ((READ_BIT(SPIx->CR2, SPI_CR2_TXDMAEN) == (SPI_CR2_TXDMAEN)) ? 1UL : 0UL);
1253 }
1254 
1264 __STATIC_INLINE void LL_SPI_SetDMAParity_RX(SPI_TypeDef *SPIx, uint32_t Parity)
1265 {
1266  MODIFY_REG(SPIx->CR2, SPI_CR2_LDMARX, (Parity << SPI_CR2_LDMARX_Pos));
1267 }
1268 
1277 __STATIC_INLINE uint32_t LL_SPI_GetDMAParity_RX(SPI_TypeDef *SPIx)
1278 {
1279  return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_LDMARX) >> SPI_CR2_LDMARX_Pos);
1280 }
1281 
1291 __STATIC_INLINE void LL_SPI_SetDMAParity_TX(SPI_TypeDef *SPIx, uint32_t Parity)
1292 {
1293  MODIFY_REG(SPIx->CR2, SPI_CR2_LDMATX, (Parity << SPI_CR2_LDMATX_Pos));
1294 }
1295 
1304 __STATIC_INLINE uint32_t LL_SPI_GetDMAParity_TX(SPI_TypeDef *SPIx)
1305 {
1306  return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_LDMATX) >> SPI_CR2_LDMATX_Pos);
1307 }
1308 
1315 __STATIC_INLINE uint32_t LL_SPI_DMA_GetRegAddr(SPI_TypeDef *SPIx)
1316 {
1317  return (uint32_t) & (SPIx->DR);
1318 }
1319 
1334 __STATIC_INLINE uint8_t LL_SPI_ReceiveData8(SPI_TypeDef *SPIx)
1335 {
1336  return (uint8_t)(READ_REG(SPIx->DR));
1337 }
1338 
1345 __STATIC_INLINE uint16_t LL_SPI_ReceiveData16(SPI_TypeDef *SPIx)
1346 {
1347  return (uint16_t)(READ_REG(SPIx->DR));
1348 }
1349 
1357 __STATIC_INLINE void LL_SPI_TransmitData8(SPI_TypeDef *SPIx, uint8_t TxData)
1358 {
1359 #if defined (__GNUC__)
1360  __IO uint8_t *spidr = ((__IO uint8_t *)&SPIx->DR);
1361  *spidr = TxData;
1362 #else
1363  *((__IO uint8_t *)&SPIx->DR) = TxData;
1364 #endif
1365 }
1366 
1374 __STATIC_INLINE void LL_SPI_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData)
1375 {
1376 #if defined (__GNUC__)
1377  __IO uint16_t *spidr = ((__IO uint16_t *)&SPIx->DR);
1378  *spidr = TxData;
1379 #else
1380  SPIx->DR = TxData;
1381 #endif
1382 }
1383 
1387 #if defined(USE_FULL_LL_DRIVER)
1388 
1392 ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx);
1393 ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct);
1394 void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct);
1395 
1399 #endif /* USE_FULL_LL_DRIVER */
1400 
1408 #endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) */
1409 
1414 #ifdef __cplusplus
1415 }
1416 #endif
1417 
1418 #endif /* STM32L4xx_LL_SPI_H */
1419 
1420 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
__STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx)
Check if DMA Rx is enabled CR2 RXDMAEN LL_SPI_IsEnabledDMAReq_RX.
__STATIC_INLINE uint8_t LL_SPI_ReceiveData8(SPI_TypeDef *SPIx)
Read 8-Bits in the data register DR DR LL_SPI_ReceiveData8.
__STATIC_INLINE void LL_SPI_SetCRCWidth(SPI_TypeDef *SPIx, uint32_t CRCLength)
Set CRC Length.
__STATIC_INLINE uint32_t LL_SPI_DMA_GetRegAddr(SPI_TypeDef *SPIx)
Get the data register address used for DMA transfer DR DR LL_SPI_DMA_GetRegAddr. ...
__STATIC_INLINE uint32_t LL_SPI_GetCRCWidth(SPI_TypeDef *SPIx)
Get CRC Length CR1 CRCL LL_SPI_GetCRCWidth.
__STATIC_INLINE uint16_t LL_SPI_ReceiveData16(SPI_TypeDef *SPIx)
Read 16-Bits in the data register DR DR LL_SPI_ReceiveData16.
__STATIC_INLINE void LL_SPI_ClearFlag_MODF(SPI_TypeDef *SPIx)
Clear mode fault error flag.
__STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx)
Check if DMA Tx is enabled CR2 TXDMAEN LL_SPI_IsEnabledDMAReq_TX.
__STATIC_INLINE uint32_t LL_SPI_IsEnabled(SPI_TypeDef *SPIx)
Check if SPI peripheral is enabled CR1 SPE LL_SPI_IsEnabled.
__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_RXNE(SPI_TypeDef *SPIx)
Check if Rx buffer is not empty SR RXNE LL_SPI_IsActiveFlag_RXNE.
__STATIC_INLINE uint32_t LL_SPI_GetTxFIFOLevel(SPI_TypeDef *SPIx)
Get FIFO Transmission Level SR FTLVL LL_SPI_GetTxFIFOLevel.
__STATIC_INLINE uint32_t LL_SPI_GetDMAParity_TX(SPI_TypeDef *SPIx)
Get parity configuration for Last DMA transmission CR2 LDMATX LL_SPI_GetDMAParity_TX.
__STATIC_INLINE uint32_t LL_SPI_GetDMAParity_RX(SPI_TypeDef *SPIx)
Get parity configuration for Last DMA reception CR2 LDMARX LL_SPI_GetDMAParity_RX.
__STATIC_INLINE void LL_SPI_DisableIT_TXE(SPI_TypeDef *SPIx)
Disable Tx buffer empty interrupt CR2 TXEIE LL_SPI_DisableIT_TXE.
__STATIC_INLINE uint32_t LL_SPI_GetTransferDirection(SPI_TypeDef *SPIx)
Get transfer direction mode CR1 RXONLY LL_SPI_GetTransferDirection CR1 BIDIMODE LL_SPI_GetTransferD...
ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx)
De-initialize the SPI registers to their default reset values.
__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_ERR(SPI_TypeDef *SPIx)
Check if error interrupt is enabled CR2 ERRIE LL_SPI_IsEnabledIT_ERR.
__STATIC_INLINE void LL_SPI_SetDMAParity_RX(SPI_TypeDef *SPIx, uint32_t Parity)
Set parity of Last DMA reception CR2 LDMARX LL_SPI_SetDMAParity_RX.
__STATIC_INLINE void LL_SPI_EnableIT_RXNE(SPI_TypeDef *SPIx)
Enable Rx buffer not empty interrupt CR2 RXNEIE LL_SPI_EnableIT_RXNE.
__STATIC_INLINE void LL_SPI_SetDataWidth(SPI_TypeDef *SPIx, uint32_t DataWidth)
Set frame data width CR2 DS LL_SPI_SetDataWidth.
__STATIC_INLINE void LL_SPI_Disable(SPI_TypeDef *SPIx)
Disable SPI peripheral.
__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_MODF(SPI_TypeDef *SPIx)
Get mode fault error flag SR MODF LL_SPI_IsActiveFlag_MODF.
__STATIC_INLINE void LL_SPI_DisableNSSPulseMgt(SPI_TypeDef *SPIx)
Disable NSS pulse management.
__STATIC_INLINE void LL_SPI_SetNSSMode(SPI_TypeDef *SPIx, uint32_t NSS)
Set NSS mode.
__STATIC_INLINE void LL_SPI_DisableIT_ERR(SPI_TypeDef *SPIx)
Disable error interrupt.
__STATIC_INLINE void LL_SPI_SetCRCPolynomial(SPI_TypeDef *SPIx, uint32_t CRCPoly)
Set polynomial for CRC calculation CRCPR CRCPOLY LL_SPI_SetCRCPolynomial.
__STATIC_INLINE uint32_t LL_SPI_GetTransferBitOrder(SPI_TypeDef *SPIx)
Get transfer bit order CR1 LSBFIRST LL_SPI_GetTransferBitOrder.
__STATIC_INLINE void LL_SPI_TransmitData8(SPI_TypeDef *SPIx, uint8_t TxData)
Write 8-Bits in the data register DR DR LL_SPI_TransmitData8.
__STATIC_INLINE void LL_SPI_SetRxFIFOThreshold(SPI_TypeDef *SPIx, uint32_t Threshold)
Set threshold of RXFIFO that triggers an RXNE event CR2 FRXTH LL_SPI_SetRxFIFOThreshold.
__STATIC_INLINE void LL_SPI_SetBaudRatePrescaler(SPI_TypeDef *SPIx, uint32_t BaudRate)
Set baud rate prescaler.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
__STATIC_INLINE uint32_t LL_SPI_GetClockPolarity(SPI_TypeDef *SPIx)
Get clock polarity CR1 CPOL LL_SPI_GetClockPolarity.
__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_FRE(SPI_TypeDef *SPIx)
Get frame format error flag SR FRE LL_SPI_IsActiveFlag_FRE.
__STATIC_INLINE uint32_t LL_SPI_IsEnabledNSSPulse(SPI_TypeDef *SPIx)
Check if NSS pulse is enabled.
__STATIC_INLINE void LL_SPI_DisableDMAReq_RX(SPI_TypeDef *SPIx)
Disable DMA Rx CR2 RXDMAEN LL_SPI_DisableDMAReq_RX.
__STATIC_INLINE void LL_SPI_EnableDMAReq_RX(SPI_TypeDef *SPIx)
Enable DMA Rx CR2 RXDMAEN LL_SPI_EnableDMAReq_RX.
__STATIC_INLINE void LL_SPI_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity)
Set clock polarity.
__STATIC_INLINE uint32_t LL_SPI_IsEnabledCRC(SPI_TypeDef *SPIx)
Check if CRC is enabled.
__STATIC_INLINE void LL_SPI_SetTransferBitOrder(SPI_TypeDef *SPIx, uint32_t BitOrder)
Set transfer bit order.
__STATIC_INLINE uint32_t LL_SPI_GetStandard(SPI_TypeDef *SPIx)
Get serial protocol used CR2 FRF LL_SPI_GetStandard.
__STATIC_INLINE void LL_SPI_SetDMAParity_TX(SPI_TypeDef *SPIx, uint32_t Parity)
Set parity of Last DMA transmission CR2 LDMATX LL_SPI_SetDMAParity_TX.
__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_CRCERR(SPI_TypeDef *SPIx)
Get CRC error flag SR CRCERR LL_SPI_IsActiveFlag_CRCERR.
__STATIC_INLINE uint32_t LL_SPI_GetRxCRC(SPI_TypeDef *SPIx)
Get Rx CRC RXCRCR RXCRC LL_SPI_GetRxCRC.
__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_RXNE(SPI_TypeDef *SPIx)
Check if Rx buffer not empty interrupt is enabled CR2 RXNEIE LL_SPI_IsEnabledIT_RXNE.
__STATIC_INLINE uint32_t LL_SPI_GetRxFIFOLevel(SPI_TypeDef *SPIx)
Get FIFO reception Level SR FRLVL LL_SPI_GetRxFIFOLevel.
__STATIC_INLINE uint32_t LL_SPI_GetCRCPolynomial(SPI_TypeDef *SPIx)
Get polynomial for CRC calculation CRCPR CRCPOLY LL_SPI_GetCRCPolynomial.
__STATIC_INLINE uint32_t LL_SPI_GetTxCRC(SPI_TypeDef *SPIx)
Get Tx CRC TXCRCR TXCRC LL_SPI_GetTxCRC.
__STATIC_INLINE void LL_SPI_DisableIT_RXNE(SPI_TypeDef *SPIx)
Disable Rx buffer not empty interrupt CR2 RXNEIE LL_SPI_DisableIT_RXNE.
__STATIC_INLINE uint32_t LL_SPI_GetBaudRatePrescaler(SPI_TypeDef *SPIx)
Get baud rate prescaler CR1 BR LL_SPI_GetBaudRatePrescaler.
__STATIC_INLINE uint32_t LL_SPI_GetMode(SPI_TypeDef *SPIx)
Get SPI operation mode (Master or Slave) CR1 MSTR LL_SPI_GetMode CR1 SSI LL_SPI_GetMode.
__STATIC_INLINE void LL_SPI_SetClockPhase(SPI_TypeDef *SPIx, uint32_t ClockPhase)
Set clock phase.
__STATIC_INLINE uint32_t LL_SPI_GetRxFIFOThreshold(SPI_TypeDef *SPIx)
Get threshold of RXFIFO that triggers an RXNE event CR2 FRXTH LL_SPI_GetRxFIFOThreshold.
__STATIC_INLINE void LL_SPI_ClearFlag_OVR(SPI_TypeDef *SPIx)
Clear overrun error flag.
__STATIC_INLINE void LL_SPI_EnableDMAReq_TX(SPI_TypeDef *SPIx)
Enable DMA Tx CR2 TXDMAEN LL_SPI_EnableDMAReq_TX.
__STATIC_INLINE void LL_SPI_EnableIT_TXE(SPI_TypeDef *SPIx)
Enable Tx buffer empty interrupt CR2 TXEIE LL_SPI_EnableIT_TXE.
__STATIC_INLINE void LL_SPI_SetTransferDirection(SPI_TypeDef *SPIx, uint32_t TransferDirection)
Set transfer direction mode.
__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_OVR(SPI_TypeDef *SPIx)
Get overrun error flag SR OVR LL_SPI_IsActiveFlag_OVR.
__STATIC_INLINE void LL_SPI_SetCRCNext(SPI_TypeDef *SPIx)
Set CRCNext to transfer CRC on the line.
void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct)
Set each LL_SPI_InitTypeDef field to default value.
__STATIC_INLINE void LL_SPI_SetStandard(SPI_TypeDef *SPIx, uint32_t Standard)
Set serial protocol used.
__STATIC_INLINE void LL_SPI_ClearFlag_CRCERR(SPI_TypeDef *SPIx)
Clear CRC error flag SR CRCERR LL_SPI_ClearFlag_CRCERR.
__STATIC_INLINE uint32_t LL_SPI_GetClockPhase(SPI_TypeDef *SPIx)
Get clock phase CR1 CPHA LL_SPI_GetClockPhase.
__STATIC_INLINE uint32_t LL_SPI_GetDataWidth(SPI_TypeDef *SPIx)
Get frame data width CR2 DS LL_SPI_GetDataWidth.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
__STATIC_INLINE void LL_SPI_DisableDMAReq_TX(SPI_TypeDef *SPIx)
Disable DMA Tx CR2 TXDMAEN LL_SPI_DisableDMAReq_TX.
__STATIC_INLINE void uint32_t uint32_t BaudRate
__STATIC_INLINE void LL_SPI_DisableCRC(SPI_TypeDef *SPIx)
Disable CRC.
__STATIC_INLINE uint32_t LL_SPI_GetNSSMode(SPI_TypeDef *SPIx)
Get NSS mode CR1 SSM LL_SPI_GetNSSMode CR2 SSOE LL_SPI_GetNSSMode.
ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct)
Initialize the SPI registers according to the specified parameters in SPI_InitStruct.
__STATIC_INLINE void LL_SPI_ClearFlag_FRE(SPI_TypeDef *SPIx)
Clear frame format error flag.
__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_TXE(SPI_TypeDef *SPIx)
Check if Tx buffer empty interrupt CR2 TXEIE LL_SPI_IsEnabledIT_TXE.
__STATIC_INLINE void LL_SPI_Enable(SPI_TypeDef *SPIx)
Enable SPI peripheral CR1 SPE LL_SPI_Enable.
__STATIC_INLINE void LL_SPI_SetMode(SPI_TypeDef *SPIx, uint32_t Mode)
Set SPI operation mode to Master or Slave.
__STATIC_INLINE void LL_SPI_EnableNSSPulseMgt(SPI_TypeDef *SPIx)
Enable NSS pulse management.
__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_BSY(SPI_TypeDef *SPIx)
Get busy flag.
SPI Init structures definition.
__STATIC_INLINE void LL_SPI_EnableIT_ERR(SPI_TypeDef *SPIx)
Enable error interrupt.
__STATIC_INLINE void LL_SPI_EnableCRC(SPI_TypeDef *SPIx)
Enable CRC.
__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_TXE(SPI_TypeDef *SPIx)
Check if Tx buffer is empty SR TXE LL_SPI_IsActiveFlag_TXE.
__STATIC_INLINE void LL_SPI_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData)
Write 16-Bits in the data register DR DR LL_SPI_TransmitData16.