18 #if defined(USE_FULL_LL_DRIVER) 
   25 #ifdef  USE_FULL_ASSERT 
   26 #include "stm32_assert.h" 
   28 #define assert_param(expr) ((void)0U) 
   35 #if defined (SPI1) || defined (SPI2) || defined (SPI3) || defined (SPI4) || defined (SPI5) || defined(SPI6) 
   49 #define SPI_CR1_CLEAR_MASK                 (SPI_CR1_CPHA    | SPI_CR1_CPOL     | SPI_CR1_MSTR   | \ 
   50                                             SPI_CR1_BR      | SPI_CR1_LSBFIRST | SPI_CR1_SSI    | \ 
   51                                             SPI_CR1_SSM     | SPI_CR1_RXONLY   | SPI_CR1_DFF    | \ 
   52                                             SPI_CR1_CRCNEXT | SPI_CR1_CRCEN    | SPI_CR1_BIDIOE | \ 
   62 #define IS_LL_SPI_TRANSFER_DIRECTION(__VALUE__) (((__VALUE__) == LL_SPI_FULL_DUPLEX)       \ 
   63                                                  || ((__VALUE__) == LL_SPI_SIMPLEX_RX)     \ 
   64                                                  || ((__VALUE__) == LL_SPI_HALF_DUPLEX_RX) \ 
   65                                                  || ((__VALUE__) == LL_SPI_HALF_DUPLEX_TX)) 
   67 #define IS_LL_SPI_MODE(__VALUE__) (((__VALUE__) == LL_SPI_MODE_MASTER) \ 
   68                                    || ((__VALUE__) == LL_SPI_MODE_SLAVE)) 
   70 #define IS_LL_SPI_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_SPI_DATAWIDTH_8BIT)  \ 
   71                                         || ((__VALUE__) == LL_SPI_DATAWIDTH_16BIT)) 
   73 #define IS_LL_SPI_POLARITY(__VALUE__) (((__VALUE__) == LL_SPI_POLARITY_LOW) \ 
   74                                        || ((__VALUE__) == LL_SPI_POLARITY_HIGH)) 
   76 #define IS_LL_SPI_PHASE(__VALUE__) (((__VALUE__) == LL_SPI_PHASE_1EDGE) \ 
   77                                     || ((__VALUE__) == LL_SPI_PHASE_2EDGE)) 
   79 #define IS_LL_SPI_NSS(__VALUE__) (((__VALUE__) == LL_SPI_NSS_SOFT)          \ 
   80                                   || ((__VALUE__) == LL_SPI_NSS_HARD_INPUT) \ 
   81                                   || ((__VALUE__) == LL_SPI_NSS_HARD_OUTPUT)) 
   83 #define IS_LL_SPI_BAUDRATE(__VALUE__) (((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV2)      \ 
   84                                        || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV4)   \ 
   85                                        || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV8)   \ 
   86                                        || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV16)  \ 
   87                                        || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV32)  \ 
   88                                        || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV64)  \ 
   89                                        || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV128) \ 
   90                                        || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV256)) 
   92 #define IS_LL_SPI_BITORDER(__VALUE__) (((__VALUE__) == LL_SPI_LSB_FIRST) \ 
   93                                        || ((__VALUE__) == LL_SPI_MSB_FIRST)) 
   95 #define IS_LL_SPI_CRCCALCULATION(__VALUE__) (((__VALUE__) == LL_SPI_CRCCALCULATION_ENABLE) \ 
   96                                              || ((__VALUE__) == LL_SPI_CRCCALCULATION_DISABLE)) 
   98 #define IS_LL_SPI_CRC_POLYNOMIAL(__VALUE__) ((__VALUE__) >= 0x1U) 
  124   ErrorStatus status = ERROR;
 
  127   assert_param(IS_SPI_ALL_INSTANCE(SPIx));
 
  215   ErrorStatus status = ERROR;
 
  218   assert_param(IS_SPI_ALL_INSTANCE(SPIx));
 
  222   assert_param(IS_LL_SPI_MODE(SPI_InitStruct->
Mode));
 
  223   assert_param(IS_LL_SPI_DATAWIDTH(SPI_InitStruct->
DataWidth));
 
  224   assert_param(IS_LL_SPI_POLARITY(SPI_InitStruct->
ClockPolarity));
 
  225   assert_param(IS_LL_SPI_PHASE(SPI_InitStruct->
ClockPhase));
 
  226   assert_param(IS_LL_SPI_NSS(SPI_InitStruct->
NSS));
 
  227   assert_param(IS_LL_SPI_BAUDRATE(SPI_InitStruct->
BaudRate));
 
  228   assert_param(IS_LL_SPI_BITORDER(SPI_InitStruct->
BitOrder));
 
  229   assert_param(IS_LL_SPI_CRCCALCULATION(SPI_InitStruct->
CRCCalculation));
 
  245     MODIFY_REG(SPIx->CR1,
 
  256     MODIFY_REG(SPIx->CR2, SPI_CR2_SSOE, (SPI_InitStruct->
NSS >> 16U));
 
  262     if (SPI_InitStruct->
CRCCalculation == LL_SPI_CRCCALCULATION_ENABLE)
 
  264       assert_param(IS_LL_SPI_CRC_POLYNOMIAL(SPI_InitStruct->
CRCPoly));
 
  271   CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD);
 
  285   SPI_InitStruct->
Mode              = LL_SPI_MODE_SLAVE;
 
  286   SPI_InitStruct->
DataWidth         = LL_SPI_DATAWIDTH_8BIT;
 
  288   SPI_InitStruct->
ClockPhase        = LL_SPI_PHASE_1EDGE;
 
  289   SPI_InitStruct->
NSS               = LL_SPI_NSS_HARD_INPUT;
 
  290   SPI_InitStruct->
BaudRate          = LL_SPI_BAUDRATEPRESCALER_DIV2;
 
  291   SPI_InitStruct->
BitOrder          = LL_SPI_MSB_FIRST;
 
  319 #define I2S_I2SCFGR_CLEAR_MASK             (SPI_I2SCFGR_CHLEN   | SPI_I2SCFGR_DATLEN | \ 
  320                                             SPI_I2SCFGR_CKPOL   | SPI_I2SCFGR_I2SSTD | \ 
  321                                             SPI_I2SCFGR_I2SCFG  | SPI_I2SCFGR_I2SMOD ) 
  323 #define I2S_I2SPR_CLEAR_MASK               0x0002U 
  332 #define IS_LL_I2S_DATAFORMAT(__VALUE__)  (((__VALUE__) == LL_I2S_DATAFORMAT_16B)             \ 
  333                                           || ((__VALUE__) == LL_I2S_DATAFORMAT_16B_EXTENDED) \ 
  334                                           || ((__VALUE__) == LL_I2S_DATAFORMAT_24B)          \ 
  335                                           || ((__VALUE__) == LL_I2S_DATAFORMAT_32B)) 
  337 #define IS_LL_I2S_CPOL(__VALUE__)        (((__VALUE__) == LL_I2S_POLARITY_LOW)  \ 
  338                                           || ((__VALUE__) == LL_I2S_POLARITY_HIGH)) 
  340 #define IS_LL_I2S_STANDARD(__VALUE__)    (((__VALUE__) == LL_I2S_STANDARD_PHILIPS)      \ 
  341                                           || ((__VALUE__) == LL_I2S_STANDARD_MSB)       \ 
  342                                           || ((__VALUE__) == LL_I2S_STANDARD_LSB)       \ 
  343                                           || ((__VALUE__) == LL_I2S_STANDARD_PCM_SHORT) \ 
  344                                           || ((__VALUE__) == LL_I2S_STANDARD_PCM_LONG)) 
  346 #define IS_LL_I2S_MODE(__VALUE__)        (((__VALUE__) == LL_I2S_MODE_SLAVE_TX)     \ 
  347                                           || ((__VALUE__) == LL_I2S_MODE_SLAVE_RX)  \ 
  348                                           || ((__VALUE__) == LL_I2S_MODE_MASTER_TX) \ 
  349                                           || ((__VALUE__) == LL_I2S_MODE_MASTER_RX)) 
  351 #define IS_LL_I2S_MCLK_OUTPUT(__VALUE__) (((__VALUE__) == LL_I2S_MCLK_OUTPUT_ENABLE) \ 
  352                                           || ((__VALUE__) == LL_I2S_MCLK_OUTPUT_DISABLE)) 
  354 #define IS_LL_I2S_AUDIO_FREQ(__VALUE__) ((((__VALUE__) >= LL_I2S_AUDIOFREQ_8K)       \ 
  355                                           && ((__VALUE__) <= LL_I2S_AUDIOFREQ_192K)) \ 
  356                                          || ((__VALUE__) == LL_I2S_AUDIOFREQ_DEFAULT)) 
  358 #define IS_LL_I2S_PRESCALER_LINEAR(__VALUE__)  ((__VALUE__) >= 0x2U) 
  360 #define IS_LL_I2S_PRESCALER_PARITY(__VALUE__) (((__VALUE__) == LL_I2S_PRESCALER_PARITY_EVEN) \ 
  361                                                || ((__VALUE__) == LL_I2S_PRESCALER_PARITY_ODD)) 
  401   uint32_t i2sdiv = 2U;
 
  402   uint32_t i2sodd = 0U;
 
  403   uint32_t packetlength = 1U;
 
  405   uint32_t sourceclock;
 
  406   ErrorStatus status = ERROR;
 
  409   assert_param(IS_I2S_ALL_INSTANCE(SPIx));
 
  410   assert_param(IS_LL_I2S_MODE(I2S_InitStruct->
Mode));
 
  411   assert_param(IS_LL_I2S_STANDARD(I2S_InitStruct->
Standard));
 
  412   assert_param(IS_LL_I2S_DATAFORMAT(I2S_InitStruct->
DataFormat));
 
  413   assert_param(IS_LL_I2S_MCLK_OUTPUT(I2S_InitStruct->
MCLKOutput));
 
  414   assert_param(IS_LL_I2S_AUDIO_FREQ(I2S_InitStruct->
AudioFreq));
 
  428     MODIFY_REG(SPIx->I2SCFGR,
 
  429                I2S_I2SCFGR_CLEAR_MASK,
 
  443     if (I2S_InitStruct->
AudioFreq != LL_I2S_AUDIOFREQ_DEFAULT)
 
  448       if (I2S_InitStruct->
DataFormat != LL_I2S_DATAFORMAT_16B)
 
  460       if (I2S_InitStruct->
MCLKOutput == LL_I2S_MCLK_OUTPUT_ENABLE)
 
  463         tmp = (((((sourceclock / 256U) * 10U) / I2S_InitStruct->
AudioFreq)) + 5U);
 
  468         tmp = (((((sourceclock / (32U * packetlength)) * 10U) / I2S_InitStruct->
AudioFreq)) + 5U);
 
  475       i2sodd = (tmp & (uint16_t)0x0001U);
 
  478       i2sdiv = ((tmp - i2sodd) / 2U);
 
  481       i2sodd = (i2sodd << 8U);
 
  485     if ((i2sdiv < 2U) || (i2sdiv > 0xFFU))
 
  493     WRITE_REG(SPIx->I2SPR, i2sdiv | i2sodd | I2S_InitStruct->
MCLKOutput);
 
  509   I2S_InitStruct->
Mode              = LL_I2S_MODE_SLAVE_TX;
 
  510   I2S_InitStruct->
Standard          = LL_I2S_STANDARD_PHILIPS;
 
  511   I2S_InitStruct->
DataFormat        = LL_I2S_DATAFORMAT_16B;
 
  512   I2S_InitStruct->
MCLKOutput        = LL_I2S_MCLK_OUTPUT_DISABLE;
 
  513   I2S_InitStruct->
AudioFreq         = LL_I2S_AUDIOFREQ_DEFAULT;
 
  531   assert_param(IS_I2S_ALL_INSTANCE(SPIx));
 
  532   assert_param(IS_LL_I2S_PRESCALER_LINEAR(PrescalerLinear));
 
  533   assert_param(IS_LL_I2S_PRESCALER_PARITY(PrescalerParity));
 
  536   MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_I2SDIV | SPI_I2SPR_ODD, PrescalerLinear | (PrescalerParity << 8U));
 
  539 #if defined (SPI_I2S_FULLDUPLEX_SUPPORT) 
  557   ErrorStatus status = ERROR;
 
  560   assert_param(IS_I2S_EXT_ALL_INSTANCE(I2Sxext));
 
  561   assert_param(IS_LL_I2S_MODE(I2S_InitStruct->
Mode));
 
  562   assert_param(IS_LL_I2S_STANDARD(I2S_InitStruct->
Standard));
 
  563   assert_param(IS_LL_I2S_DATAFORMAT(I2S_InitStruct->
DataFormat));
 
  577     WRITE_REG(I2Sxext->I2SPR, I2S_I2SPR_CLEAR_MASK);
 
  580     if ((I2S_InitStruct->
Mode == LL_I2S_MODE_MASTER_TX) || (I2S_InitStruct->
Mode == LL_I2S_MODE_SLAVE_TX))
 
  582       mode = LL_I2S_MODE_SLAVE_RX;
 
  586       if ((I2S_InitStruct->
Mode == LL_I2S_MODE_MASTER_RX) || (I2S_InitStruct->
Mode == LL_I2S_MODE_SLAVE_RX))
 
  588         mode = LL_I2S_MODE_SLAVE_TX;
 
  593     MODIFY_REG(I2Sxext->I2SCFGR,
 
  594                I2S_I2SCFGR_CLEAR_MASK,
 
  597                SPI_I2SCFGR_I2SMOD | mode);
 
__STATIC_INLINE void LL_APB1_GRP1_ForceReset(uint32_t Periphs)
Force APB1 peripherals reset. @rmtoll APB1RSTR TIM2RST LL_APB1_GRP1_ForceReset  APB1RSTR TIM3RST LL_A...
__STATIC_INLINE void LL_APB1_GRP1_ReleaseReset(uint32_t Periphs)
Release APB1 peripherals reset. @rmtoll APB1RSTR TIM2RST LL_APB1_GRP1_ReleaseReset  APB1RSTR TIM3RST ...
__STATIC_INLINE void LL_APB2_GRP1_ReleaseReset(uint32_t Periphs)
Release APB2 peripherals reset. @rmtoll APB2RSTR TIM1RST LL_APB2_GRP1_ReleaseReset  APB2RSTR TIM8RST ...
__STATIC_INLINE void LL_APB2_GRP1_ForceReset(uint32_t Periphs)
Force APB2 peripherals reset. @rmtoll APB2RSTR TIM1RST LL_APB2_GRP1_ForceReset  APB2RSTR TIM8RST LL_A...
__STATIC_INLINE uint32_t LL_I2S_IsEnabled(const SPI_TypeDef *SPIx)
Check if I2S peripheral is enabled @rmtoll I2SCFGR I2SE LL_I2S_IsEnabled.
ErrorStatus LL_I2S_InitFullDuplex(SPI_TypeDef *I2Sxext, LL_I2S_InitTypeDef *I2S_InitStruct)
Configures the full duplex mode for the I2Sx peripheral using its extension I2Sxext according to the ...
ErrorStatus LL_I2S_Init(SPI_TypeDef *SPIx, LL_I2S_InitTypeDef *I2S_InitStruct)
Initializes the SPI/I2S registers according to the specified parameters in I2S_InitStruct.
void LL_I2S_ConfigPrescaler(SPI_TypeDef *SPIx, uint32_t PrescalerLinear, uint32_t PrescalerParity)
Set linear and parity prescaler.
ErrorStatus LL_I2S_DeInit(const SPI_TypeDef *SPIx)
De-initialize the SPI/I2S registers to their default reset values.
void LL_I2S_StructInit(LL_I2S_InitTypeDef *I2S_InitStruct)
Set each LL_I2S_InitTypeDef field to default value.
I2S Init structure definition.
uint32_t LL_RCC_GetI2SClockFreq(uint32_t I2SxSource)
Return I2Sx clock frequency.
__STATIC_INLINE void LL_SPI_SetCRCPolynomial(SPI_TypeDef *SPIx, uint32_t CRCPoly)
Set polynomial for CRC calculation @rmtoll CRCPR CRCPOLY LL_SPI_SetCRCPolynomial.
__STATIC_INLINE uint32_t LL_SPI_IsEnabled(const SPI_TypeDef *SPIx)
Check if SPI peripheral is enabled @rmtoll CR1 SPE LL_SPI_IsEnabled.
ErrorStatus LL_SPI_DeInit(const SPI_TypeDef *SPIx)
De-initialize the SPI registers to their default reset values.
void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct)
Set each LL_SPI_InitTypeDef field to default value.
ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct)
Initialize the SPI registers according to the specified parameters in SPI_InitStruct.
uint32_t TransferDirection
SPI Init structures definition.
Header file of BUS LL module.
Header file of RCC LL module.
Header file of SPI LL module.