Esempio n. 1
0
void CMasterSPIHardware::init( SPI_TypeDef * hard_spi, const hard_SPI_config * config )
{
	SPI_InitTypeDef SPI_InitStructure;	
	_spi = hard_spi;
	if (hard_spi == SPI1)
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
	else if (hard_spi == SPI2)
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
	
	SPI_I2S_DeInit(hard_spi);
	SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

	SPI_InitStructure.SPI_DataSize = (config->num_of_bit - 1) << 8;
	SPI_InitStructure.SPI_CPOL = config->CPOL;
	SPI_InitStructure.SPI_CPHA = config->CPHA;
	SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
	SPI_InitStructure.SPI_BaudRatePrescaler = config->prescaller;
	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
	SPI_InitStructure.SPI_CRCPolynomial = 7;
	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
	SPI_Init(hard_spi, &SPI_InitStructure);
	
	SPI_SSOutputCmd(hard_spi, ENABLE);
	SPI_NSSPulseModeCmd(hard_spi, ENABLE);
	
	
	/* Initialize the FIFO threshold */
	SPI_RxFIFOThresholdConfig(hard_spi, SPI_RxFIFOThreshold_QF);

	/* Enable the SPI peripheral */
	SPI_Cmd(hard_spi, ENABLE);		
}
Esempio n. 2
0
void initial_spi(void) {
	GPIO_InitTypeDef structGPIO;
	SPI_InitTypeDef structSPI;
	//NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOF, ENABLE);
	//configure GPIO
	structGPIO.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7; //spi1
  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);
  structGPIO.GPIO_Pin = GPIO_Pin_4;	
	GPIO_Init(GPIOB, &structGPIO);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_5);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_5);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_5);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_5);
	structGPIO.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; //spi3
	structGPIO.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &structGPIO);
	GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_6);
	GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_6);
	GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_6);
	structGPIO.GPIO_Pin = GPIO_Pin_15;
	GPIO_Init(GPIOA, &structGPIO);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_6);
	structGPIO.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15; //spi2
	structGPIO.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOB, &structGPIO);
	structGPIO.GPIO_Pin = GPIO_Pin_9;
	GPIO_Init(GPIOF, &structGPIO);
	structGPIO.GPIO_Pin = GPIO_Pin_15;
	structGPIO.GPIO_Mode = GPIO_Mode_OUT;
	structGPIO.GPIO_OType = GPIO_OType_PP;
	structGPIO.GPIO_PuPd = GPIO_PuPd_UP;
	structGPIO.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOD, &structGPIO);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_5);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_5);
	GPIO_PinAFConfig(GPIOF, GPIO_PinSource9, GPIO_AF_5);
	//configure spi1 and spi3
	SPI_StructInit(&structSPI);
	structSPI.SPI_Direction = SPI_Direction_1Line_Tx;
	structSPI.SPI_Mode = SPI_Mode_Master;
	structSPI.SPI_DataSize = SPI_DataSize_16b;
	structSPI.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4/*SPI_BaudRatePrescaler_32*/;
	structSPI.SPI_NSS = SPI_NSS_Hard;
	structSPI.SPI_CPOL = SPI_CPOL_Low;
	structSPI.SPI_CPHA = SPI_CPHA_1Edge;
	SPI_Init(SPI1, &structSPI);
	structSPI.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2 /*SPI_BaudRatePrescaler_32*/;
	SPI_Init(SPI3, &structSPI);
	SPI_SSOutputCmd(SPI1, ENABLE);
	SPI_SSOutputCmd(SPI3, ENABLE);
 	SPI_Cmd(SPI1, ENABLE);
 	SPI_Cmd(SPI3, ENABLE);
	//configure spi2
	GPIO_WriteBit(GPIOD, GPIO_Pin_15, Bit_SET);
	structSPI.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
	structSPI.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
	SPI_Init(SPI2, &structSPI);
	SPI_SSOutputCmd(SPI2, ENABLE);
	SPI_NSSPulseModeCmd(SPI2, DISABLE);
	SPI_Cmd(SPI2, ENABLE);
	return;
}