void NRF2_SPI_Init(void) { SPI_InitTypeDef SPI_InitStructure; SPI_StructInit(&SPI_InitStructure); /* Set nRF24L01 SPI Idle */ NRF2_CS_HIGH; /* Enable SPI clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); /* Disable SPI */ SPI_Cmd(SPI2, DISABLE); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; //Parameter check will be performed in SPI_Init() SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); /* Enable SPI */ SPI_Cmd(SPI2, ENABLE); NRF2_CS_HIGH; }
/** * @brief SPI peripheral configuration * @note None * @param Pointer to nRF24L01P_Object * @retval None */ void NRF_SPI_Config(nRF24L01P_Object* nrf) { SPI_InitTypeDef SPI_InitStructure; SPI_StructInit(&SPI_InitStructure); /* Set nRF24L01 SPI Idle */ NRF_CS_HIGH(nrf); /* Enable SPI clock */ nrf->SPI_CLK_ENABLE_FUNCTION(nrf->SPI_PERIPH_CLK, ENABLE); /* Disable SPI */ SPI_Cmd(nrf->SPIx, DISABLE); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = nrf->SPI_BaudRatePrescaler; //Parameter check will be performed in SPI_Init() SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(nrf->SPIx, &SPI_InitStructure); /* Enable SPI */ SPI_Cmd(nrf->SPIx, ENABLE); }
void SPI_RFT_Configure(SPI_RFT_low_cb_TypeDef pSpi_cb) { SPI_InitTypeDef InitStructure; Spi_cb = pSpi_cb; SPI_StructInit(&InitStructure); InitStructure.SPI_CPHA = SPI_CPHA_1Edge; // SPI(0,0) InitStructure.SPI_CPOL = SPI_CPOL_Low; InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; // 1.5 MHz InitStructure.SPI_DataSize = SPI_DataSize_16b; // 16 bit InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // Full-duplex InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // MSB first InitStructure.SPI_Mode = SPI_Mode_Master; InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_Init(SPIx,&InitStructure); SPI_NSSInternalSoftwareConfig(SPIx,SPI_NSSInternalSoft_Set); SPI_Cmd(SPIx,ENABLE); SPI_I2S_ITConfig(SPIx,SPI_I2S_IT_RXNE,ENABLE); NVIC_EnableIRQ(SPIx_IRQn); *CS = 1; }
void configureSPI(void) { // NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStruct; SPI_I2S_DeInit(SPI2); // Init pins GPIO_InitStructure.GPIO_Pin = PIN_SCK | PIN_MOSI; // SCK,MOSI GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = PIN_MISO; // MISO GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); SPI_StructInit(&SPI_InitStruct); SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_Mode = SPI_Mode_Master; SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI_InitStruct.SPI_DataSize = SPI_DataSize_16b; SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; SPI_Init(SPI2, &SPI_InitStruct); SPI_Cmd(SPI2, ENABLE); }
void nRF24L01_spi_init() { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_Speed = GPIO_Speed_100MHz; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOC,&gpio); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); SPI_InitTypeDef spi1; SPI_StructInit(&spi1); spi1.SPI_Mode = SPI_Mode_Master; spi1.SPI_DataSize = SPI_DataSize_8b; spi1.SPI_NSS = SPI_NSS_Soft; spi1.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; SPI_Init(SPI3,&spi1); SPI_Cmd(SPI3,ENABLE); }
void TM_SPI3_Init(TM_SPI_PinsPack_t pinspack) { GPIO_InitTypeDef GPIO_InitStruct; SPI_InitTypeDef SPI_InitStruct; //Common settings for all pins GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; if (pinspack == TM_SPI_PinsPack_1) { //Enable clock RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //Pinspack nr. 1 SCK MISO MOSI GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI3); } else if (pinspack == TM_SPI_PinsPack_2) { //Enable clock RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //Pinspack nr. 2 SCK MISO MOSI GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3); } RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); SPI_StructInit(&SPI_InitStruct); SPI_InitStruct.SPI_BaudRatePrescaler = TM_SPI3_PRESCALER; SPI_InitStruct.SPI_DataSize = TM_SPI3_DATASIZE; SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_FirstBit = TM_SPI3_FIRSTBIT; SPI_InitStruct.SPI_Mode = TM_SPI3_MASTERSLAVE; if (TM_SPI3_MODE == TM_SPI_Mode_0) { SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge; } else if (TM_SPI3_MODE == TM_SPI_Mode_1) { SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge; } else if (TM_SPI3_MODE == TM_SPI_Mode_2) { SPI_InitStruct.SPI_CPOL = SPI_CPOL_High; SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge; } else if (TM_SPI3_MODE == TM_SPI_Mode_3) { SPI_InitStruct.SPI_CPOL = SPI_CPOL_High; SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge; } SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI_Init(SPI3, &SPI_InitStruct); SPI_Cmd(SPI3, ENABLE); }
void SPIData_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Enable clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE ); RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE); /* Use Alternate Functions for SPI pins */ GPIO_PinAFConfig( GPIOA, GPIO_PinSource5, GPIO_AF_SPI1 ); //L.GPIO_PinAFConfig( GPIOA, GPIO_PinSource6, GPIO_AF_SPI1 ); GPIO_PinAFConfig( GPIOA, GPIO_PinSource7, GPIO_AF_SPI1 ); GPIO_PinAFConfig( GPIOA, GPIO_PinSource4, GPIO_AF_SPI1 ); /* Setup pin types */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Pin = SPIDATA_CS_PIN; GPIO_Init( GPIOA, &GPIO_InitStructure ); GPIO_InitStructure.GPIO_Pin = SPIDATA_SCK_PIN; GPIO_Init( GPIOA, &GPIO_InitStructure ); GPIO_InitStructure.GPIO_Pin = SPIDATA_MOSI_PIN; GPIO_Init( GPIOA, &GPIO_InitStructure ); SPI_I2S_DeInit(SPIDATA_PORT); SPI_Cmd(SPIDATA_PORT, DISABLE); SPI_StructInit(&SPI_InitStructure); /*!< SPI configuration */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly; /* 数据方向:2线只接收 */ SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; /* STM32的SPI工作模式 :从机模式 */ SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /* 数据位长度 : 8位 */ SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; /* 时钟下降沿采样数据 */ SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; /* 时钟的第1个边沿采样数据 */ SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//SPI_NSS_Hard; //SPI_NSS_Soft; /* 片选控制方式:软件控制 */ //L.SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; /* 波特率预分频系数:4分频 */ SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /* 数据位传输次序:高位先传 */ SPI_InitStructure.SPI_CRCPolynomial = 7; /* CRC多项式寄存器,复位后为7。本例程不用 */ SPI_Init(SPIDATA_PORT, &SPI_InitStructure); /* Enable the SPI peripheral */ SPI_I2S_DMACmd(SPIDATA_PORT,SPI_I2S_DMAReq_Rx,ENABLE); SPI_Cmd(SPIDATA_PORT, ENABLE); /* enable SPI1 module */ SPIData_DMA_Init((u32)CodecRxBuffer); }
void SPI3_Initialize(void) { SPI_InitTypeDef spi_init; SPI_StructInit(&spi_init); spi_init.SPI_Mode = SPI_Mode_Master; spi_init.SPI_DataSize = SPI_DataSize_8b; spi_init.SPI_NSS = SPI_NSS_Soft; SPI_Init(SPI3, &spi_init); SPI_Cmd(SPI3, ENABLE); }
void SPI_Config(void) { GPIO_InitTypeDef structGPIO; SPI_InitTypeDef structSPI; DMA_InitTypeDef structDMA; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA1, ENABLE); //configure GPIO structGPIO.GPIO_Pin = GPIO_Pin_4; structGPIO.GPIO_Mode = GPIO_Mode_AF; structGPIO.GPIO_Speed = GPIO_Speed_50MHz; structGPIO.GPIO_OType = GPIO_OType_PP; structGPIO.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &structGPIO); GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_SPI3); structGPIO.GPIO_Pin =GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; GPIO_Init(GPIOC, &structGPIO); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3); //init spi SPI_StructInit(&structSPI); structSPI.SPI_Direction = SPI_Direction_1Line_Tx; structSPI.SPI_Mode = SPI_Mode_Master; structSPI.SPI_DataSize = SPI_DataSize_16b; SPI_Init(SPI3, &structSPI); //init DMA SPI_I2S_DMACmd(SPI3, SPI_I2S_DMAReq_Tx, ENABLE); structDMA.DMA_Channel = DMA_Channel_0; structDMA.DMA_PeripheralBaseAddr = SPI3_ADDR; structDMA.DMA_Memory0BaseAddr = (uint32_t)pb_spi->pbuf; structDMA.DMA_DIR = DMA_DIR_MemoryToPeripheral; structDMA.DMA_BufferSize = SIZE_BIG_BUFFER/2; structDMA.DMA_PeripheralInc = DMA_PeripheralInc_Disable; structDMA.DMA_MemoryInc = DMA_MemoryInc_Enable; structDMA.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; structDMA.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; structDMA.DMA_Mode = DMA_Mode_Normal; structDMA.DMA_Priority = DMA_Priority_Medium; structDMA.DMA_FIFOMode = DMA_FIFOMode_Disable; structDMA.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA1_Stream5, &structDMA); //init DMA interrupt DMA_ITConfig(DMA1_Stream0, DMA_IT_TC, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //enable DMA DMA_Cmd(DMA1_Stream5, DISABLE); //enable SPI SPI_Cmd(SPI3, ENABLE); }
void spiInit ( SPI_TypeDef *SPIx) { SPI_InitTypeDef SPI_InitStructure ; GPIO_InitTypeDef GPIO_InitStructure ; GPIO_StructInit (& GPIO_InitStructure ); SPI_StructInit (& SPI_InitStructure ); if (SPIx == SPI1) { // Enable clock for GPIOA RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); /* NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); */ GPIOE->BSRRL |= GPIO_Pin_3; // set PE3 high RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex ; SPI_InitStructure.SPI_Mode = SPI_Mode_Master ; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b ; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //SPI_CPOL_Low ; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge ; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //SPI_DataSizeConfig (SPIx , SPI_DataSize_16b ); SPI_Init (SPIx , & SPI_InitStructure ); SPI_Cmd (SPIx , ENABLE ); } else { return ; } }
void SPI_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(SD_SPI_SCK_GPIO_CLK | SD_CD_GPIO_CLK, ENABLE); //Chip Select GPIO_InitStructure.GPIO_Pin = SD_CS_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SD_SPI_DI_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(SD_SPI_DI_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SD_SPI_DO_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(SD_SPI_DO_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SD_CD_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(SD_CD_GPIO_PORT, &GPIO_InitStructure); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); SPI_Cmd(SPI2, ENABLE); SPI_StructInit(&SPI_InitStructure); /* Initialize the SPI_Direction member */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /* initialize the SPI_Mode member */ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /* initialize the SPI_DataSize member */ SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /* Initialize the SPI_BaudRatePrescaler member */ SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; /* Initialize the SPI_FirstBit member */ SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /* Initialize the SPI_CRCPolynomial member */ SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_InitStructure.SPI_CPHA = 0; SPI_InitStructure.SPI_CPOL = 0; SPI_Init(SPI2, &SPI_InitStructure); }
void init_SPI1() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_SPI1, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; SPI_StructInit(&SPI_InitStructure); //NSS вход выбор чипа GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA , &GPIO_InitStructure); //CLK GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //MISO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //MOSI GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_SPI1, ENABLE); //Заполняем структуру с параметрами SPI модуля SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //полный дуплекс SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // передаем по 8 бит SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; // Полярность и SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; // фаза тактового сигнала SPI_InitStructure.SPI_NSS = SPI_NSS_Hard; // Управлять состоянием сигнала NSS аппаратно SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; // Предделитель SCK SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // Первым отправляется старший бит SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; // Режим - слейв SPI_Init(SPI1, &SPI_InitStructure); //Настраиваем SPI1 SPI_Cmd(SPI1, ENABLE); // Включаем модуль SPI1.... SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); //Включаем прерывание по приему байта NVIC_EnableIRQ(SPI1_IRQn); //Разрешаем прерывания от SPI1 }
void keyLedInit(void) { GPIO_InitTypeDef GPIO_InitStruct; //CS GPIO_InitStruct.GPIO_Pin = SPI_GPIOPIN_LED_CS; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_2; GPIO_Init(SPI_GPIO_LED_CS, &GPIO_InitStruct); //SPI CLK GPIO_InitStruct.GPIO_Pin = SPI_GPIOPIN_LED_CLK; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_2; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SPI_GPIO_LED_CLK, &GPIO_InitStruct); //时钟gpio 端口模式 //SPI MOSI GPIO_InitStruct.GPIO_Pin = SPI_GPIOPIN_LED_DATA; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_2; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SPI_GPIO_LED_DATA, &GPIO_InitStruct); //AF //GPIO_PinAFConfig(SPI_GPIO_LED_CS, SPI_GPIOPIN_LED_CS_PINSOC, GPIO_AF_0); GPIO_PinAFConfig(SPI_GPIO_LED_CLK, SPI_GPIOPIN_LED_CLK_PINSOC, GPIO_AF_0); GPIO_PinAFConfig(SPI_GPIO_LED_DATA, SPI_GPIOPIN_LED_DATA_PINSOC, GPIO_AF_0); //SpiCsDisable(); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); SPI_InitTypeDef SPI_InitStruct; SPI_StructInit(&SPI_InitStruct); SPI_InitStruct.SPI_Direction = SPI_Direction_1Line_Tx; SPI_InitStruct.SPI_Mode = SPI_Mode_Master; SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStruct.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStruct); SPI_SSOutputCmd(SPI2, ENABLE); GPIO_SetBits(SPI_GPIO_LED_CS, SPI_GPIOPIN_LED_CS); SPI_Cmd(SPI2, ENABLE); keyLedSet(0xffff); }
void spi_init() { GPIO_InitTypeDef gpioInitStruct; GPIO_StructInit(&gpioInitStruct); // configure pins used by SPI1 // PA5 = SCK // PA6 = MISO // PA7 = MOSI gpioInitStruct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; gpioInitStruct.GPIO_Mode = GPIO_Mode_AF_PP; gpioInitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &gpioInitStruct); // enable clock for used IO pins - already done in main // CS gpioInitStruct.GPIO_Pin = GPIO_Pin_0; gpioInitStruct.GPIO_Mode = GPIO_Mode_Out_PP; gpioInitStruct.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &gpioInitStruct); // RST gpioInitStruct.GPIO_Pin = GPIO_Pin_1; gpioInitStruct.GPIO_Mode = GPIO_Mode_Out_PP; gpioInitStruct.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &gpioInitStruct); // DC gpioInitStruct.GPIO_Pin = GPIO_Pin_2; gpioInitStruct.GPIO_Mode = GPIO_Mode_Out_PP; gpioInitStruct.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &gpioInitStruct); // enable SPI1 clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); SPI_InitTypeDef spi1; SPI_StructInit(&spi1); spi1.SPI_Direction = SPI_Direction_2Lines_FullDuplex; spi1.SPI_Mode = SPI_Mode_Master; spi1.SPI_DataSize = SPI_DataSize_8b; spi1.SPI_CPOL = SPI_CPOL_Low; spi1.SPI_CPHA = SPI_CPHA_1Edge; spi1.SPI_NSS = SPI_NSS_Soft; spi1.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; spi1.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(SPI1, &spi1); SPI_SSOutputCmd(SPI1, DISABLE); SPI_Cmd(SPI1, ENABLE); }
void spiInit(SPI_TypeDef *SPIx) { GPIO_InitTypeDef GPIO_InitStructureSCK; GPIO_InitTypeDef GPIO_InitStructureMISO; GPIO_InitTypeDef GPIO_InitStructureMOSI; SPI_InitTypeDef SPI_InitStructure; GPIO_StructInit(&GPIO_InitStructureSCK); GPIO_StructInit(&GPIO_InitStructureMISO); GPIO_StructInit(&GPIO_InitStructureMOSI); SPI_StructInit(&SPI_InitStructure); if (SPIx == SPI2) { /* Enable clocks, configure pins */ // Enable clocks RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); // Configure pins GPIO_InitStructureSCK.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructureSCK.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructureSCK.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructureSCK); GPIO_InitStructureMISO.GPIO_Pin = GPIO_Pin_14; GPIO_InitStructureMISO.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructureMISO); GPIO_InitStructureMOSI.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructureMOSI.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructureMOSI.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructureMOSI); } else { // other SPI devices -- return; } // Configure device SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = speeds[SPI_SLOW]; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPIx, &SPI_InitStructure); SPI_Cmd(SPIx, ENABLE); }
void spiInit(SPI_TypeDef * SPIx) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_Sck_Mosi; //Alternate function push-pull GPIO_InitTypeDef GPIO_Miso; //Input pull-up GPIO_StructInit(&GPIO_Sck_Mosi); GPIO_StructInit(&GPIO_Miso); SPI_StructInit(&SPI_InitStructure); if(SPIx == SPI2) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //SPI2 is on APB1 !!! RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); //PB13=SCK, PB15=Mosi GPIO_Sck_Mosi.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15; GPIO_Sck_Mosi.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Sck_Mosi.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_Sck_Mosi); GPIO_Miso.GPIO_Pin = GPIO_Pin_14; GPIO_Miso.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Miso.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_Miso); } else { /*TODO: SPI 1 not supported*/ return; } SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = speeds[SPI_SLOW]; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPIx, &SPI_InitStructure); SPI_Cmd(SPIx, ENABLE); }
void spi_init(SPI_TypeDef* SPIx) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; if(SPIx == SPI1) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | \ RCC_APB2Periph_AFIO | \ RCC_APB2Periph_SPI1, ENABLE); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPIx, &SPI_InitStructure); SPI_Cmd(SPIx, ENABLE); }
// } GYRO/ACC { void init_GYACC(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_GPIOCEN, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_GPIODEN, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1ENR_SPI3EN, ENABLE); GPIO_InitTypeDef gpio[1]; gpio->GPIO_Pin = 0x0F; // 0, 1, 2, 3 gpio->GPIO_Mode = GPIO_Mode_IN; gpio->GPIO_Speed= GPIO_Speed_50MHz; gpio->GPIO_OType= GPIO_OType_OD; gpio->GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOD, gpio); GPIOD->ODR |= 0xC0; gpio->GPIO_Pin = 0xF0; // 4, 5, 6, 7 (5 is useless although) gpio->GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOD, gpio); gpio->GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; gpio->GPIO_Mode = GPIO_Mode_AF; gpio->GPIO_Speed= GPIO_Speed_50MHz; gpio->GPIO_OType= GPIO_OType_PP; gpio->GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOC, gpio); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3); // GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3); // GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3); SPI_InitTypeDef spi[1]; SPI_StructInit(spi); spi->SPI_Direction = SPI_Direction_2Lines_FullDuplex; spi->SPI_Mode = SPI_Mode_Master; spi->SPI_DataSize = SPI_DataSize_16b; spi->SPI_CPOL = SPI_CPOL_High; spi->SPI_CPHA = SPI_CPHA_2Edge; spi->SPI_NSS = SPI_NSS_Soft; spi->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; spi->SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(SPI3, spi); SPI_Cmd(SPI3, ENABLE); }
void SpiInit( Spi_t *obj, PinNames mosi, PinNames miso, PinNames sclk, PinNames nss ) { SPI_StructInit( &SPI_InitStructure ); GpioInit( &obj->Mosi, mosi, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_DOWN, 0 ); GpioInit( &obj->Miso, miso, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_DOWN, 0 ); GpioInit( &obj->Sclk, sclk, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_DOWN, 0 ); // TODO: Make independent of stm32l1xx_gpio.h GPIO_PinAFConfig( obj->Mosi.port, ( obj->Mosi.pin & 0x0F ), GPIO_AF_SPI1 ); GPIO_PinAFConfig( obj->Miso.port, ( obj->Miso.pin & 0x0F ), GPIO_AF_SPI1 ); GPIO_PinAFConfig( obj->Sclk.port, ( obj->Sclk.pin & 0x0F ), GPIO_AF_SPI1 ); if( nss != NC ) { GpioInit( &obj->Nss, nss, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP, 1 ); // TODO: Make independent of stm32l1xx_gpio.h GPIO_PinAFConfig( obj->Nss.port, ( obj->Nss.pin & 0x0F ), GPIO_AF_SPI1 ); } else { SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; } // Choose SPI interface according to the given pins obj->Spi = ( SPI_TypeDef* )SPI1_BASE; RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1, ENABLE ); if( nss == NC ) { // 8 bits, CPOL = 0, CPHA = 0, MASTER SpiFormat( obj, 8, 0, 0, 0 ); } else { // 8 bits, CPOL = 0, CPHA = 0, SLAVE SpiFormat( obj, 8, 0, 0, 1 ); } SpiFrequency( obj, 10000000 ); SPI_Cmd( obj->Spi, ENABLE ); }
static void spi_init() { SPI_InitTypeDef spi; SPI_StructInit(&spi); spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; spi.SPI_CPHA = SPI_CPHA_1Edge; spi.SPI_CPOL = SPI_CPOL_Low; spi.SPI_CRCPolynomial = 7; spi.SPI_DataSize = SPI_DataSize_8b; spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex; spi.SPI_FirstBit = SPI_FirstBit_MSB; spi.SPI_Mode = SPI_Mode_Master; spi.SPI_NSS = SPI_NSS_Soft; SPI_Init(SX1276_CFG_SPI_INTERFACE, &spi); SPI_Cmd(SX1276_CFG_SPI_INTERFACE, ENABLE); }
void init_SPI(void) { SPI_InitTypeDef SPI_InitStructure; SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_Init(NRF24L01_SPI,&SPI_InitStructure); // NSS must be set to '1' due to NSS_Soft settings (otherwise it will be Multimaster mode). SPI_NSSInternalSoftwareConfig(NRF24L01_SPI,SPI_NSSInternalSoft_Set); NRF24L01_CSN_HIGH; NRF24L01_CE_LOW; SPI_Cmd(NRF24L01_SPI,ENABLE); }
void Spi_Soft_Init() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); { SPI_InitTypeDef SPI_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /* Configure SPI1 pins: DO SCK and DI */ GPIO_InitStructure.GPIO_Pin = GPIO_SPISOFT1_DO_pin; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //Out_PP; GPIO_Init(GPIO_SPISOFT1_DO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_SPISOFT1_SCK_pin; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //Out_PP; GPIO_Init(GPIO_SPISOFT1_SCK, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_SPISOFT1_DI_pin; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //IN_FLOATING; GPIO_Init(GPIO_SPISOFT1_DI, &GPIO_InitStructure); SPI_StructInit(&SPI_InitStruct); SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; SPI_InitStruct.SPI_CPHA=SPI_CPHA_1Edge; SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_Mode = SPI_Mode_Master; SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStruct.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStruct); //SPI_SSOutputCmd(SPI1, ENABLE); //SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Reset); SPI_Cmd(SPI1, ENABLE); } }
/** * @brief Configures the SPI. * @param None * @retval None */ void SPI_Configuration(void) { SPI_InitTypeDef SPI_InitStructure; SPI_StructInit(&SPI_InitStructure); SPI_I2S_DeInit(SPIy); /* SPIy Config */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB; /* Configure SPIy */ SPI_Init(SPIy, &SPI_InitStructure); /* SPIy enable */ SPI_Cmd(SPIy, ENABLE); }
int caribou_spi_init(caribou_spi_t* spi, uint32_t spi_port, uint16_t word_size, uint8_t master_mode, uint8_t cpol) { SPI_InitTypeDef SPI_InitStruct; memset(spi,0,sizeof(caribou_spi_t)); switch(spi_port) { case 0: spi->spi_port = SPI1; break; case 1: spi->spi_port = SPI2; break; } SPI_StructInit(&SPI_InitStruct); SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; if ( master_mode ) { SPI_InitStruct.SPI_Mode = SPI_Mode_Master; } else { SPI_InitStruct.SPI_Mode = SPI_Mode_Slave; } switch( word_size ) { case 8: SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; break; case 16: SPI_InitStruct.SPI_DataSize = SPI_DataSize_16b; break; } if ( cpol ) SPI_InitStruct.SPI_CPOL = SPI_CPOL_High; SPI_Init(spi->spi_port,&SPI_InitStruct); SPI_Cmd(spi->spi_port,ENABLE); }
/** * @brief SET SPI protocol * @param None * @retval None */ static void drv95HF_StructureConfigSPI ( void ) { SPI_InitTypeDef SPI_InitStructure; /* Initialize the SPI with default values */ SPI_StructInit(&SPI_InitStructure); /* SPI Config master with NSS manages by software using the SSI bit*/ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; /* Init the SPI BRIDGE */ SPI_Init(RFTRANS_95HF_SPI, &SPI_InitStructure); #ifdef USE_DMA SPI_I2S_DMACmd(RFTRANS_95HF_SPI, SPI_I2S_DMAReq_Rx, ENABLE); SPI_I2S_DMACmd(RFTRANS_95HF_SPI, SPI_I2S_DMAReq_Tx, ENABLE); #endif /* Enable SPI */ SPI_Cmd(RFTRANS_95HF_SPI, ENABLE); }
void spiInit(SPI_TypeDef *SPI) { volatile uint8_t dummyread __attribute__((unused)); GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; /////////////////////////////////// if (SPI == SPI1) { RCC_AHB1PeriphClockCmd(SPI1_GPIO_CLOCK, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); GPIO_PinAFConfig(SPI1_GPIO, SPI1_SCK_PIN_SOURCE, GPIO_AF_SPI1); GPIO_PinAFConfig(SPI1_GPIO, SPI1_MISO_PIN_SOURCE, GPIO_AF_SPI1); GPIO_PinAFConfig(SPI1_GPIO, SPI1_MOSI_PIN_SOURCE, GPIO_AF_SPI1); GPIO_StructInit(&GPIO_InitStructure); // Init pins GPIO_InitStructure.GPIO_Pin = SPI1_SCK_PIN | SPI1_MISO_PIN | SPI1_MOSI_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SPI1_GPIO, &GPIO_InitStructure); /////////////////////////////// SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; // 42/128 = 328.125 kHz SPI Clock SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); SPI_CalculateCRC(SPI1, DISABLE); SPI_Cmd(SPI1, ENABLE); while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); dummyread = SPI_I2S_ReceiveData(SPI1); } /////////////////////////////////// if (SPI == SPI2) { RCC_AHB1PeriphClockCmd(SPI2_GPIO_CLOCK, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); GPIO_StructInit(&GPIO_InitStructure); // Init pins GPIO_InitStructure.GPIO_Pin = SPI2_SCK_PIN | SPI2_MISO_PIN | SPI2_MOSI_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(SPI2_GPIO, &GPIO_InitStructure); GPIO_PinAFConfig(SPI2_GPIO, SPI2_SCK_PIN_SOURCE, GPIO_AF_SPI2); GPIO_PinAFConfig(SPI2_GPIO, SPI2_MISO_PIN_SOURCE, GPIO_AF_SPI2); GPIO_PinAFConfig(SPI2_GPIO, SPI2_MOSI_PIN_SOURCE, GPIO_AF_SPI2); /////////////////////////////// RCC_AHB1PeriphClockCmd(MAX7456_CS_GPIO_CLOCK, ENABLE); GPIO_InitStructure.GPIO_Pin = MAX7456_CS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(MAX7456_CS_GPIO, &GPIO_InitStructure); /////////////////////////////// SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // 42/4 = 10.5 MHz SPI Clock SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); SPI_Cmd(SPI2, ENABLE); SPI_CalculateCRC(SPI2, DISABLE); SPI_Cmd(SPI2, ENABLE); DISABLE_MAX7456; while (SPI_I2S_GetFlagStatus(MAX7456_SPI, SPI_I2S_FLAG_TXE) == RESET); dummyread = SPI_I2S_ReceiveData(MAX7456_SPI); } /////////////////////////////////// if (SPI == SPI3) { RCC_AHB1PeriphClockCmd(SPI3_GPIO_CLOCK, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); GPIO_StructInit(&GPIO_InitStructure); // Init pins GPIO_InitStructure.GPIO_Pin = SPI3_SCK_PIN | SPI3_MISO_PIN | SPI3_MOSI_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(SPI3_GPIO, &GPIO_InitStructure); GPIO_PinAFConfig(SPI3_GPIO, SPI3_SCK_PIN_SOURCE, GPIO_AF_SPI3); GPIO_PinAFConfig(SPI3_GPIO, SPI3_MISO_PIN_SOURCE, GPIO_AF_SPI3); GPIO_PinAFConfig(SPI3_GPIO, SPI3_MOSI_PIN_SOURCE, GPIO_AF_SPI3); GPIO_StructInit(&GPIO_InitStructure); /////////////////////////////// RCC_AHB1PeriphClockCmd(MPU6000_CS_GPIO_CLOCK, ENABLE); GPIO_InitStructure.GPIO_Pin = MPU6000_CS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(MPU6000_CS_GPIO, &GPIO_InitStructure); /////////////////////////////// SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; // 42/64 = 0.65625 MHz SPI Clock SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI3, &SPI_InitStructure); SPI_Cmd(SPI3, ENABLE); SPI_CalculateCRC(SPI3, DISABLE); SPI_Cmd(SPI3, ENABLE); DISABLE_MPU6000; while (SPI_I2S_GetFlagStatus(MPU6000_SPI, SPI_I2S_FLAG_TXE) == RESET); dummyread = SPI_I2S_ReceiveData(MPU6000_SPI); } /////////////////////////////////// }
SpiInterface::SpiInterface(SPI_TypeDef* spi, uint16_t prescaller, uint16_t cpol, uint16_t cpha): _spi(spi) { GPIO_InitTypeDef GPIO_InitStruct; GPIO_TypeDef* gpioPort; GPIO_StructInit(&GPIO_InitStruct); // Enable RCC clocking. if (_spi == SPI1) { gpioPort = GPIOA; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5; GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); } else if (_spi == SPI2) { gpioPort = GPIOB; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); } else { while(1); } // Setup SPI GPIO ports GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(gpioPort, &GPIO_InitStruct); // Init SPI port. // NSS must be set to '1' due to NSS_Soft settings (otherwise it will be Multimaster mode). SPI_InitTypeDef SPI; SPI_StructInit(&SPI); SPI.SPI_Mode = SPI_Mode_Master; // transmit in master mode, NSS pin has to be always high // Take care about prescaler. If CLK if too high it may be required to slow down SPI clock. SPI.SPI_BaudRatePrescaler = prescaller; // SPI frequency SPI.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // set to full duplex mode, seperate MOSI and MISO lines // Set SPI to Mode 0 SPI.SPI_CPOL = cpol; SPI.SPI_CPHA = cpha; SPI.SPI_CRCPolynomial = 7; SPI.SPI_DataSize = SPI_DataSize_8b; // one packet of data is 8 bits wide SPI.SPI_FirstBit = SPI_FirstBit_MSB; // data is transmitted MSB first SPI.SPI_NSS = SPI_NSS_Soft | SPI_NSSInternalSoft_Set; // set the NSS management to internal and pull internal NSS high SPI_Init(_spi, &SPI); SPI_Cmd(_spi,ENABLE); }
void LMP_SPI_Init(void) { SPI_InitTypeDef SPI2_InitStruct; SPI_InitTypeDef SPI3_InitStruct; GPIO_InitTypeDef GPIOB_InitStruct; /*Clock enabling*/ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; /* Enable the SPI clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); /* Enable GPIO clocks */ RCC_AHB1PeriphClockCmd(SPI2_SCK_GPIO_CLK | SPI2_MOSI_GPIO_CLK | SPI2_MISO_GPIO_CLK | SPI2_SS_GPIO_CLK , ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; /* SPI SCK pin configuration */ GPIO_InitStructure.GPIO_Pin = SPI2_SCK_PIN; GPIO_Init(SPI2_SCK_GPIO_PORT, &GPIO_InitStructure); /* Connect SPI pins to AF5 */ GPIO_PinAFConfig(SPI2_SCK_GPIO_PORT, SPI2_SCK_SOURCE, SPI2_SCK_AF); /* SPI MOSI pin configuration */ GPIO_InitStructure.GPIO_Pin = SPI2_MOSI_PIN; GPIO_Init(SPI2_MOSI_GPIO_PORT, &GPIO_InitStructure); GPIO_PinAFConfig(SPI2_MOSI_GPIO_PORT, SPI2_MOSI_SOURCE, SPI2_MOSI_AF); /* SPI MISO pin configuration */ GPIO_InitStructure.GPIO_Pin = SPI2_MISO_PIN; GPIO_Init(SPI2_MISO_GPIO_PORT, &GPIO_InitStructure); GPIO_PinAFConfig(SPI2_MOSI_GPIO_PORT, SPI2_MOSI_SOURCE, SPI2_MOSI_AF); //Error 120813 /* SPI SS and SS2 pin configuration */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Pin = SPI2_SS_PIN | SPI2_SS2_PIN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_SetBits(SPI2_SS_GPIO_PORT , SPI2_SS_PIN); GPIO_SetBits(SPI2_SS2_GPIO_PORT , SPI2_SS2_PIN); GPIO_Init(SPI2_SS_GPIO_PORT, &GPIO_InitStructure); SPI_StructInit(&SPI2_InitStruct); /* SPI SS3 and SS4 pin configuration */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Pin = SPI2_SS3_PIN | SPI2_SS4_PIN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_SetBits(SPI2_SS3_GPIO_PORT , SPI2_SS3_PIN); GPIO_SetBits(SPI2_SS4_GPIO_PORT , SPI2_SS4_PIN); GPIO_Init(SPI2_SS3_GPIO_PORT, &GPIO_InitStructure); SPI_StructInit(&SPI2_InitStruct); //SPI2_InitStruct.SPI_Direction = SPI_Direction_1Line_Tx; SPI2_InitStruct.SPI_DataSize = SPI_DataSize_16b; SPI2_InitStruct.SPI_Mode = SPI_Mode_Master; SPI2_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI2_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_Init(SPI2, &SPI2_InitStruct); //SPI_Cmd(SPI2, ENABLE); SPI_SSOutputCmd(SPI2, ENABLE); }
/** * @brief Inicializa el SPI en los pines especificados (ver datasheet). * @param SPIx: SPI a utilizar. * @param freq_hz: Especifica la frecuencia deseada del SPI. * @param sck,miso,mosi: Especifica los pines del SPI. * @retval Ninguno. */ void SPI_Master_Init(SPI_TypeDef* SPIx, uint32_t freq_hz, pin_t sck, pin_t miso, pin_t mosi){ SPI_InitTypeDef SPI_InitStructure; uint32_t _spi_src_clk; uint16_t _spi_presc = SPI_BaudRatePrescaler_2; #if defined(L152RE) uint8_t _spi_af; #endif if(SPIx == SPI1){ SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN); _spi_src_clk = RCC_GetPCLK2(); #if defined(L152RE) _spi_af = AF_5; #endif } if(SPIx == SPI2){ SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN); _spi_src_clk = RCC_GetPCLK1(); #if defined(L152RE) _spi_af = AF_5; #endif } #if defined(L152RE) if(SPIx == SPI3){ SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN); _spi_src_clk = RCC_GetPCLK1(); _spi_af = AF_6; } #endif GPIO_SetAFSpeed(SPEED_MEDIUM); #if defined(L152RE) GPIO_ModeAF(sck, AF_PP, _spi_af); if(miso != IGNORE) GPIO_ModeAF(miso, AF_PP, _spi_af); GPIO_ModeAF(mosi, AF_PP, _spi_af); #else GPIO_ModeAF(sck, AF_PP, AF_5); if(miso != IGNORE) GPIO_ModeAF(miso, AF_PP, AF_5); GPIO_ModeAF(mosi, AF_PP, AF_5); #endif _spi_presc = _spi_src_clk/freq_hz; if((_spi_src_clk/_spi_presc) > freq_hz) _spi_presc = _spi_presc + 1; if(_spi_presc <= 2) _spi_presc = SPI_BaudRatePrescaler_2; else if(_spi_presc > 2 && _spi_presc <= 4) _spi_presc = SPI_BaudRatePrescaler_4; else if(_spi_presc > 4 && _spi_presc <= 8) _spi_presc = SPI_BaudRatePrescaler_8; else if(_spi_presc > 8 && _spi_presc <= 16) _spi_presc = SPI_BaudRatePrescaler_16; else if(_spi_presc > 16 && _spi_presc <= 32) _spi_presc = SPI_BaudRatePrescaler_32; else if(_spi_presc > 32 && _spi_presc <= 64) _spi_presc = SPI_BaudRatePrescaler_64; else if(_spi_presc > 64 && _spi_presc <= 128) _spi_presc = SPI_BaudRatePrescaler_128; else _spi_presc = SPI_BaudRatePrescaler_256; SPI_I2S_DeInit(SPIx); SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = _spi_presc; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; /* Se inicializa el SPI */ SPI_Init(SPIx, &SPI_InitStructure); /* Se habilita el SPI */ SPI_Cmd(SPIx, ENABLE); }
void spi_setup() { SPI_InitTypeDef spiInitStruct; GPIO_InitTypeDef gpioConfig; #ifdef SPI1_ENABLE printf("BEGIN SPI1 Setup\n"); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE); // Configure SPI1 pins: SCK (pin 5) and MOSI (pin 7) gpioConfig.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7; gpioConfig.GPIO_Speed = GPIO_Speed_50MHz; gpioConfig.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &gpioConfig); // Configure SPI1 pins: MISO (pin 6) gpioConfig.GPIO_Pin = GPIO_Pin_6; gpioConfig.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &gpioConfig); // init SPI SPI_StructInit(&spiInitStruct); spiInitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; spiInitStruct.SPI_Mode = SPI_Mode_Master; spiInitStruct.SPI_DataSize = SPI_DataSize_8b; spiInitStruct.SPI_NSS = SPI_NSS_Soft; spiInitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; spiInitStruct.SPI_FirstBit = SPI_FirstBit_MSB; // Mode 1 (CPOL = 0, CPHA = 1) spiInitStruct.SPI_CPOL = SPI_CPOL_Low; spiInitStruct.SPI_CPHA = SPI_CPHA_2Edge; SPI_Init(SPI1, &spiInitStruct); SPI_Cmd(SPI1, ENABLE); #endif #ifdef SPI2_ENABLE printf("BEGIN SPI2 Setup\n"); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // Configure SPI2 pins: SCK (pin 13) and MOSI (pin 15) gpioConfig.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15; gpioConfig.GPIO_Speed = GPIO_Speed_50MHz; gpioConfig.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &gpioConfig); // Configure SPI2 pins: MISO (pin 14) gpioConfig.GPIO_Pin = GPIO_Pin_14; gpioConfig.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &gpioConfig); // init SPI SPI_StructInit(&spiInitStruct); spiInitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; spiInitStruct.SPI_Mode = SPI_Mode_Master; spiInitStruct.SPI_DataSize = SPI_DataSize_8b; spiInitStruct.SPI_NSS = SPI_NSS_Soft; spiInitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; spiInitStruct.SPI_FirstBit = SPI_FirstBit_MSB; // Mode 0 (CPOL = 0, CPHA = 0) spiInitStruct.SPI_CPOL = SPI_CPOL_Low; spiInitStruct.SPI_CPHA = SPI_CPHA_1Edge; SPI_Init(SPI2, &spiInitStruct); SPI_Cmd(SPI2, ENABLE); #endif printf("END SPI Setup\n"); }