Пример #1
0
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;
}
Пример #2
0
/**
  * @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);
}
Пример #3
0
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;
}
Пример #4
0
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);

}
Пример #5
0
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);
}
Пример #6
0
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);
}
Пример #7
0
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);
}
Пример #8
0
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);
}
Пример #9
0
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);
}
Пример #10
0
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 ;
    }
      
}
Пример #11
0
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);
}
Пример #12
0
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

}
Пример #13
0
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);
}
Пример #14
0
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);
}
Пример #15
0
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);   
}
Пример #16
0
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);
}
Пример #17
0
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);
}
Пример #18
0
// } 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);
}
Пример #19
0
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 );
}
Пример #20
0
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);
}
Пример #21
0
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);
}
Пример #22
0
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);
        }
}
Пример #23
0
/**
  * @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);
}
Пример #24
0
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);
}
Пример #25
0
/**
 *	@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);
}
Пример #26
0
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);
    }

    ///////////////////////////////////
}
Пример #27
0
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);
	}
Пример #28
0
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);
}
Пример #29
0
/**
  * @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);  
}
Пример #30
0
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");
}