/***************************************************************************** Prototype : hal_sRF_SPI_Config Description : none Input : void Output : None Return Value : Date : 2014/3/15 Author : Barry *****************************************************************************/ void hal_gdflash_SPI_Config(void) { SPI_InitTypeDef SPI_InitStructure; /*!< Deselect the RF: Chip Select high */ DGFLASH_CS_HIGH(); /* Disable sRF_SPI */ SPI_Cmd(GDFLASH_SPI, DISABLE); /*!< SPI configuration */ SPI_I2S_DeInit(GDFLASH_SPI); /*!< sRF_SPI Periph clock enable */ RCC_APB2PeriphClockCmd(DGFLASH_SPI_SCK , 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_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(GDFLASH_SPI, &SPI_InitStructure); SPI_RxFIFOThresholdConfig(GDFLASH_SPI, SPI_RxFIFOThreshold_QF); /*!< Enable the sRF_SPI */ SPI_Cmd(GDFLASH_SPI, ENABLE); }
void SPI1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); 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_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); SPI_I2S_DeInit(SPI1); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//全双工 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//8位数据模式 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//空闲模式下SCK为1 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据采样从第2个时间边沿开始 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//NSS软件管理 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//波特率 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//大端模式 SPI_InitStructure.SPI_CRCPolynomial = 7;//CRC多项式 SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//主机模式 SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); }
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); }
/******************************************************************************* * Function Name : I2S_Config * Description : Configure the I2S Peripheral. * Input : - Standard: I2S_Standard_Phillips, I2S_Standard_MSB or I2S_Standard_LSB * - MCLKOutput: I2S_MCLKOutput_Enable or I2S_MCLKOutput_Disable * - AudioFreq: I2S_AudioFreq_8K, I2S_AudioFreq_16K, I2S_AudioFreq_22K, * I2S_AudioFreq_44K or I2S_AudioFreq_48K * Output : None * Return : None *******************************************************************************/ static void I2S_Config(uint16_t Standard, uint16_t MCLKOutput, uint16_t AudioFreq) { I2S_InitTypeDef I2S_InitStructure; /* Enable I2S2 APB1 clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); /* Deinitialize SPI2 peripheral */ SPI_I2S_DeInit(SPI2); /* I2S2 peripheral configuration */ I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx; I2S_InitStructure.I2S_Standard = Standard; I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b; I2S_InitStructure.I2S_MCLKOutput = MCLKOutput; I2S_InitStructure.I2S_AudioFreq = AudioFreq; I2S_InitStructure.I2S_CPOL = I2S_CPOL_High; I2S_Init(SPI2, &I2S_InitStructure); /* Disable the I2S2 TXE Interrupt */ SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, DISABLE); /* Enable the SPI2/I2S2 peripheral */ I2S_Cmd(SPI2, ENABLE); printf("\n\r I2S peripheral Config finished"); }
/** * @brief DeInitializes the LCD. * @param None * @retval None */ void LCD_DeInit(void) { GPIO_InitTypeDef GPIO_InitStructure; /*!< LCD Display Off */ LCD_DisplayOff(); /*!< LCD_SPI disable */ SPI_Cmd(LCD_SPI, DISABLE); /*!< LCD_SPI DeInit */ SPI_I2S_DeInit(LCD_SPI); /*!< Disable SPI clock */ RCC_APB1PeriphClockCmd(LCD_SPI_CLK, DISABLE); /* Configure NCS in Output Push-Pull mode */ GPIO_InitStructure.GPIO_Pin = LCD_NCS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure); /* Configure SPI pins: SCK, MISO and MOSI */ GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN; GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_PIN; GPIO_Init(LCD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN; GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); }
/** * @brief DeInitializes the peripherals used by the SPI FLASH driver. * @param None * @retval None */ void sFLASH_LowLevel_DeInit(void) { GPIO_InitTypeDef GPIO_InitStructure; /*!< Disable the sFLASH_SPI ************************************************/ SPI_Cmd(sFLASH_SPI, DISABLE); /*!< DeInitializes the sFLASH_SPI *******************************************/ SPI_I2S_DeInit(sFLASH_SPI); /*!< sFLASH_SPI Periph clock disable ****************************************/ sFLASH_SPI_CLK_INIT(sFLASH_SPI_CLK, DISABLE); /*!< Configure all pins used by the SPI as input floating *******************/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN; GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN; GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN; GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN; GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure); }
/** * @brief DeInitializes the peripherals used by the SPI driver. * @param none * @retval none */ static void ADS1256_LowLevel_DeInit(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Disable the ADS1256_SPI */ SPI_Cmd(ADS1256_SPI, DISABLE); /* DeInitializes the ADS1256_SPI */ SPI_I2S_DeInit(ADS1256_SPI); /* ADS1256_SPI Periph clock disable */ ADS1256_SPI_CLK_INIT(ADS1256_SPI_CLK, DISABLE); /* Configure all pins used by the SPI as input floating */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = ADS1256_SPI_SCK_PIN; GPIO_Init(ADS1256_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ADS1256_SPI_MISO_PIN; GPIO_Init(ADS1256_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ADS1256_SPI_MOSI_PIN; GPIO_Init(ADS1256_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ADS1256_CS_PIN; GPIO_Init(ADS1256_CS_GPIO_PORT, &GPIO_InitStructure); }
//*---------------------------------------------------------------------------- //* Function Name : UiLcdHy28_SpiInit //* Object : //* Input Parameters : //* Output Parameters : //* Functions called : //*---------------------------------------------------------------------------- void UiLcdHy28_SpiDeInit() { GPIO_InitTypeDef GPIO_InitStructure; SPI_Cmd(SPI2, DISABLE); SPI_I2S_DeInit(SPI2); // Set as inputs GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // SPI SCK pin configuration GPIO_InitStructure.GPIO_Pin = LCD_SCK; GPIO_Init(LCD_SCK_PIO, &GPIO_InitStructure); // SPI MOSI pins configuration GPIO_InitStructure.GPIO_Pin = LCD_MOSI; GPIO_Init(LCD_MOSI_PIO, &GPIO_InitStructure); // SPI MISO pins configuration GPIO_InitStructure.GPIO_Pin = LCD_MISO; GPIO_Init(LCD_MISO_PIO, &GPIO_InitStructure); // Configure GPIO PIN for Chip select GPIO_InitStructure.GPIO_Pin = LCD_CS; GPIO_Init(LCD_CS_PIO, &GPIO_InitStructure); }
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); }
/** * @brief DeInitializes the SPI interface. * @param None * @retval None */ void sEE_SPI_LowLevel_DeInit(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_Cmd(sEE_SPI, DISABLE); /* sEE_SPI disable */ SPI_I2S_DeInit(sEE_SPI); /* DeInitializes the sEE_SPI */ /* sEE_SPI Periph clock disable */ RCC_APB1PeriphClockCmd(sEE_SPI_CLK, DISABLE); /* Configure sEE_SPI pins: SCK */ GPIO_InitStructure.GPIO_Pin = sEE_SPI_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(sEE_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); /* Configure sEE pins: MISO */ GPIO_InitStructure.GPIO_Pin = sEE_SPI_MISO_PIN; GPIO_Init(sEE_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); /* Configure sEE pins: MOSI */ GPIO_InitStructure.GPIO_Pin = sEE_SPI_MOSI_PIN; GPIO_Init(sEE_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); /* Configure sEE_CS_PIN pin: sEE Card CS pin */ GPIO_InitStructure.GPIO_Pin = sEE_SPI_CS_PIN; GPIO_Init(sEE_SPI_CS_GPIO_PORT, &GPIO_InitStructure); }
/** * @brief DeInitializes the peripherals used by the SPI FLASH driver. * @param None * @retval None */ void sFLASH_LowLevel_DeInit(void) { GPIO_InitTypeDef GPIO_InitStructure; /*!< Disable the sFLASH_SPI */ SPI_Cmd(sFLASH_SPI, DISABLE); /*!< DeInitializes the sFLASH_SPI */ SPI_I2S_DeInit(sFLASH_SPI); /*!< sFLASH_SPI Periph clock disable */ RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, DISABLE); /*!< Configure sFLASH_SPI pins: SCK */ GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); /*!< Configure sFLASH_SPI pins: MISO */ GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN; GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); /*!< Configure sFLASH_SPI pins: MOSI */ GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN; GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); /*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */ GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN; GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure); }
/** * @brief DeInitializes the SD/SD communication. * @param None * @retval None */ void SD_LowLevel_DeInit(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_Cmd(SD_SPI, DISABLE); /*!< SD_SPI disable */ SPI_I2S_DeInit(SD_SPI); /*!< DeInitializes the SD_SPI */ /*!< SD_SPI Periph clock disable */ RCC_APB1PeriphClockCmd(SD_SPI_CLK, DISABLE); /*!< DeRemap SPI3 Pins */ GPIO_PinRemapConfig(GPIO_Remap_SPI3, DISABLE); /*!< Configure SD_SPI pins: SCK */ GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); /*!< Configure SD_SPI pins: MISO */ GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN; GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); /*!< Configure SD_SPI pins: MOSI */ GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN; GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */ GPIO_InitStructure.GPIO_Pin = SD_CS_PIN; GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure); /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */ GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN; GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure); }
/** * @brief Initializes the Audio Codec audio interface (I2S) * @note This function assumes that the I2S input clock (through PLL_R in * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) * is already configured and ready to be used. * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. * @retval None. */ static void Codec_AudioInterface_Init(uint32_t AudioFreq) { /* Enable the CODEC_I2S peripheral clock */ RCC_APB1PeriphClockCmd(CODEC_I2S_CLK, ENABLE); RCC->APB1ENR |= RCC_APB1Periph_SPI2 | RCC_APB1Periph_SPI3; /* CODEC_I2S peripheral configuration */ SPI_I2S_DeInit(CODEC_I2S); I2S_InitStructure.I2S_AudioFreq = AudioFreq; I2S_InitStructure.I2S_Standard = I2S_STANDARD; I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b; I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low; I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx; #ifdef CODEC_MCLK_ENABLED I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Enable; #elif defined(CODEC_MCLK_DISABLED) I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable; #else #error "No selection for the MCLK output has been defined !" #endif /* CODEC_MCLK_ENABLED */ /* Initialize the I2S peripheral with the structure above */ I2S_Init(CODEC_I2S, &I2S_InitStructure); /* Enable the I2S DMA TX request */ SPI_I2S_DMACmd(CODEC_I2S, SPI_I2S_DMAReq_Tx, ENABLE); /* The I2S peripheral will be enabled only in the EVAL_AUDIO_Play() function or by user functions if DMA mode not enabled */ }
void setup_SPI(){ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); SPI_I2S_DeInit(SPI2); SPI_InitTypeDef SPI_InitStructure; SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; //Two serial lines only SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8 bit transfers SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //Idle high clock SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //rising edge transfer SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //Software SS SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; //Use 10.5 MHz clock SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //MSB first SPI_InitStructure.SPI_CRCPolynomial = 7; //Some value? /* Initializes the SPI communication */ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //master mode SPI_Init(SPI2, &SPI_InitStructure); //init SPI_Cmd(SPI2, ENABLE); }
void FRAM_sRF_SPI_Config(void) { SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(FRAM_SPI_CLK, ENABLE); FRAM_CS_HIGH(); /* Disable sRF_SPI */ SPI_Cmd(FRAM_SPI, DISABLE); /*!< SPI configuration */ SPI_I2S_DeInit(FRAM_SPI); 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_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(FRAM_SPI, &SPI_InitStructure); /*!< Enable the sRF_SPI */ SPI_Cmd(FRAM_SPI, ENABLE); }
static void platform_init_spi(void) { SPI_InitTypeDef SPI_InitStructure; /* expecting platform_init_periphclk() to have already enabled SPI2 clock and GPIO clocks */ /* SPI configuration -------------------------------------------------------*/ SPI_I2S_DeInit(SPI2); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; 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_32; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //SPI_InitStructure.SPI_CRCPolynomial = 7; /* Initializes the SPI communication */ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_Init(SPI2, &SPI_InitStructure); /* Enable the Rx buffer not empty interrupt */ SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE); /* Enable the SPI peripheral */ SPI_Cmd(SPI2, ENABLE); // platform_gpio_init(): NSS under software-gpio control }
//Draws a single pixel void ssd1306_SPI_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; /* Peripheral Clock Enable -------------------------------------------------*/ /* Enable the SPI clock */ SPIx_CLK_INIT(SPIx_CLK, ENABLE); /* Enable GPIO clocks */ RCC_AHB1PeriphClockCmd(SPIx_SCK_GPIO_CLK | SPIx_MOSI_GPIO_CLK, ENABLE); /* SPI GPIO Configuration --------------------------------------------------*/ /* Connect SPI pins to AF5 */ GPIO_PinAFConfig(SPIx_SCK_GPIO_PORT, SPIx_SCK_SOURCE, SPIx_SCK_AF); GPIO_PinAFConfig(SPIx_MOSI_GPIO_PORT, SPIx_MOSI_SOURCE, SPIx_MOSI_AF); 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; /* SPI SCK pin configuration */ GPIO_InitStructure.GPIO_Pin = SPIx_SCK_PIN; GPIO_Init(SPIx_SCK_GPIO_PORT, &GPIO_InitStructure); /* SPI MOSI pin configuration */ GPIO_InitStructure.GPIO_Pin = SPIx_MOSI_PIN; GPIO_Init(SPIx_MOSI_GPIO_PORT, &GPIO_InitStructure); /* SPI configuration -------------------------------------------------------*/ SPI_I2S_DeInit(SPIx); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // Clock Polarity ACTIVE state is High or Low SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // Clock Phase Data is sampled on the first or second clock edge transition SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; /* Configure the Priority Group to 1 bit NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); Configure the SPI interrupt priority NVIC_InitStructure.NVIC_IRQChannel = SPIx_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); */ /* Initializes the SPI communication -----------------------------------------*/ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_Init(SPIx, &SPI_InitStructure); /* The Data transfer is performed in the SPI interrupt routine----------------*/ /* Enable the SPI peripheral */ SPI_Cmd(SPIx, ENABLE); }
/** * This function will initial STM32 Radio board. */ void rt_hw_board_init(void) { /* Configure the system clocks */ SystemInit(); all_device_reset(); /* NVIC Configuration */ NVIC_Configuration(); /* Configure the SysTick */ SysTick_Config( SystemCoreClock / RT_TICK_PER_SECOND ); /* Console Initialization*/ rt_hw_usart_init(); rt_console_set_device("uart1"); rt_kprintf("\r\n\r\nSystemInit......\r\n"); /* SPI1 config */ { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; /* Enable SPI1 Periph clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_SPI1, ENABLE); /* Configure SPI1 pins: PA5-SCK, PA6-MISO and PA7-MOSI */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /*------------------------ SPI1 configuration ------------------------*/ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI_Direction_1Line_Tx; 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_16;/* 72M/64=1.125M */ SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_I2S_DeInit(SPI1); SPI_Init(SPI1, &SPI_InitStructure); /* Enable SPI_MASTER */ SPI_Cmd(SPI1, ENABLE); SPI_CalculateCRC(SPI1, DISABLE); if (rt_sem_init(&spi1_lock, "spi1lock", 1, RT_IPC_FLAG_FIFO) != RT_EOK) { rt_kprintf("init spi1 lock semaphore failed\n"); } } }
/** * @brief Initializes the Audio Codec audio interface (I2S) * @note This function assumes that the I2S input clock (through PLL_R in * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) * is already configured and ready to be used. * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. * @retval None */ static void Codec_AudioInterface_Init(uint32_t AudioFreq) { I2S_InitTypeDef I2S_InitStructure; DAC_InitTypeDef DAC_InitStructure; /* Enable the CODEC_I2S peripheral clock */ RCC_APB1PeriphClockCmd(CODEC_I2S_CLK, ENABLE); /* CODEC_I2S peripheral configuration */ SPI_I2S_DeInit(CODEC_I2S); I2S_InitStructure.I2S_AudioFreq = AudioFreq; I2S_InitStructure.I2S_Standard = I2S_STANDARD; I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b; I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low; #ifdef DAC_USE_I2S_DMA if (CurrAudioInterface == AUDIO_INTERFACE_DAC) { I2S_InitStructure.I2S_Mode = I2S_Mode_MasterRx; } else { #else I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx; #endif #ifdef DAC_USE_I2S_DMA } #endif /* DAC_USE_I2S_DMA */ #ifdef CODEC_MCLK_ENABLED I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Enable; #elif defined(CODEC_MCLK_DISABLED) I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable; #else #error "No selection for the MCLK output has been defined !" #endif /* CODEC_MCLK_ENABLED */ /* Initialize the I2S peripheral with the structure above */ I2S_Init(CODEC_I2S, &I2S_InitStructure); /* Configure the DAC interface */ if (CurrAudioInterface == AUDIO_INTERFACE_DAC) { /* DAC Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); /* DAC channel1 Configuration */ DAC_InitStructure.DAC_Trigger = DAC_Trigger_None; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(AUDIO_DAC_CHANNEL, &DAC_InitStructure); /* Enable DAC Channel1 */ DAC_Cmd(AUDIO_DAC_CHANNEL, ENABLE); } /* The I2S peripheral will be enabled only in the EVAL_AUDIO_Play() function or by user functions if DMA mode not enabled */ }
/** * @brief this functions initializes the SPI in order to communicate with the 95HF device * @param None * @retval void */ static void drv95HF_InitializeSPI ( void ) { SPI_I2S_DeInit(RFTRANS_95HF_SPI); /* enables SPI and GPIO clocks */ drv95HF_RCCConfigSPI( ); /* configures GPIO A PA4-7 as SPI bus (NSS = HL) */ drv95HF_GPIOConfigSPI( ); drv95HF_StructureConfigSPI( ); }
void f3d_lcd_sd_interface_init(void) { /* Pin Assignments RS PB9 OUT RESET PB10 OUT BKL PB11 OUT CS PB12 OUT SCK PB13 AF - assigned to SPI2 MISO PB14 AF - assigned to SPI2 MOSI PB15 AF - assigned to SPI2 */ GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 , ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // Section 3.2 Alternate Function Pin Assignment SCK, MISO, MOSI // Provide GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // Section 3.2 Pin configuration for SCK, MISO, MOSI // Provide GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_5); //Note- the GPIO_AF_x might be wrong GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_5); GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_5); // Section 3.2 Pin Configuration for CS, RESET, RS, BKL // Provide GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // Section 4.1 SPI2 configuration // Provide //SPI_InitTypeDef SPI_InitStructure; SPI_I2S_DeInit(SPI2); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; 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_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_Init(SPI2, &SPI_InitStructure); SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF); SPI_Cmd(SPI2, 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 SPI1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable the SPI clock */ SPIx_CLK_INIT(SPIx_CLK, ENABLE); /* Enable GPIO clocks */ RCC_AHB1PeriphClockCmd(SPIx_SCK_GPIO_CLK | SPIx_MISO_GPIO_CLK | SPIx_MOSI_GPIO_CLK, ENABLE); /* Connect SPI pins to AF5 */ GPIO_PinAFConfig(SPIx_SCK_GPIO_PORT, SPIx_SCK_SOURCE, SPIx_SCK_AF); GPIO_PinAFConfig(SPIx_MOSI_GPIO_PORT, SPIx_MOSI_SOURCE, SPIx_MOSI_AF); GPIO_PinAFConfig(SPIx_MISO_GPIO_PORT, SPIx_MISO_SOURCE, SPIx_MOSI_AF); 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; /* SPI SCK pin configuration */ GPIO_InitStructure.GPIO_Pin = SPIx_SCK_PIN; GPIO_Init(SPIx_SCK_GPIO_PORT, &GPIO_InitStructure); /* SPI MOSI pin configuration */ GPIO_InitStructure.GPIO_Pin = SPIx_MOSI_PIN; GPIO_Init(SPIx_MOSI_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SPIx_MISO_PIN; GPIO_Init(SPIx_MISO_GPIO_PORT, &GPIO_InitStructure); /* SPI configuration -------------------------------------------------------*/ SPI_I2S_DeInit(SPIx); 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_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 0; SPI_Init(SPIx, &SPI_InitStructure); /* Configure the Priority Group to 1 bit */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* Configure the SPI interrupt priority */ NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
/** * @brief Restores the Audio Codec audio interface to its default state. * @param None. * @retval None. */ static void Codec_AudioInterface_DeInit(void) { /* Disable the CODEC_I2S peripheral (in case it hasn't already been disabled) */ I2S_Cmd(CODEC_I2S, DISABLE); /* Deinitialize the CODEC_I2S peripheral */ SPI_I2S_DeInit(CODEC_I2S); /* Disable the CODEC_I2S peripheral clock */ RCC_APB1PeriphClockCmd(CODEC_I2S_CLK, DISABLE); }
void SpiDeInit( Spi_t *obj ) { SPI_Cmd( obj->Spi, DISABLE ); SPI_I2S_DeInit( obj->Spi ); GpioInit( &obj->Mosi, obj->Mosi.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_NO_PULL, 0 ); GpioInit( &obj->Miso, obj->Miso.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_PULL_DOWN, 0 ); GpioInit( &obj->Sclk, obj->Sclk.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_NO_PULL, 0 ); GpioInit( &obj->Nss, obj->Nss.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_PULL_UP, 1 ); }
/******************************************************************************* * Function Name : TP_Init * Description : ADS7843 Port initialization * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void TSDriver_Initialize(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD, ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_13 | GPIO_Pin_14; GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2 ); //sclk 10 13 GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2 ); //mýso 11 14 GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2 ); //mosý 12 15 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); SPI_I2S_DeInit(SPI2 ); 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_CPOL_Low SPI_CPOL_High SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //SPI_NSS_Hard //SPI_NSS_Soft SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //16 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); SPI_Cmd(SPI2, ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12; // 3 GPIO_Init(GPIOB, &GPIO_InitStruct); // d TP_CS(1); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; //Pin 6 is IRQ GPIO_Init(GPIOD, &GPIO_InitStruct); touch_interrupt_init(); }
/******************************************************************************* * Function Name : I2S_Config * Description : Initializes the I2S peripheral. * Input : None * Output : None * Return : None *******************************************************************************/ static void I2S_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; I2S_InitTypeDef I2S_InitStructure; /* Enable GPIOB, GPIOC and AFIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); /* I2S2 SD, CK and WS pins configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); /* I2S2 MCK pin configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOC, &GPIO_InitStructure); /* Enable I2S2 APB1 clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); /* Deinitialize SPI2 peripheral */ SPI_I2S_DeInit(SPI2); /* I2S2 peripheral configuration */ I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx; I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips; I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b; I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Enable; #ifdef AUDIO_FREQ_96K I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_96k; #elif defined (AUDIO_FREQ_48K) I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_48k; #elif defined (AUDIO_FREQ_44K) I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_44k; #elif defined (AUDIO_FREQ_32K) I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_32k; #elif defined (AUDIO_FREQ_22K) I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_22k; #elif defined (AUDIO_FREQ_16K) I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_16k; #elif defined (AUDIO_FREQ_11K) I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_11k; #elif defined (AUDIO_FREQ_8K) I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_8k; #endif /* AUDIO_FREQ_96K */ I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low; I2S_Init(SPI2, &I2S_InitStructure); /* Enable the SPI2/I2S2 peripheral */ I2S_Cmd(SPI2, ENABLE); }
void deinitSpi2() { if( isInitial ) { SPI_I2S_DeInit(SPI2); DMA_DeInit(DMA1_Stream3); DMA_DeInit(DMA1_Stream4); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, DISABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, DISABLE); isInitial = false; } }
void spi_init (void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; // enable clock RCC_APB2PeriphClockCmd (SPI_CLK, ENABLE); // enable pin clocks RCC_AHB1PeriphClockCmd (SCK_CLK, ENABLE); RCC_AHB1PeriphClockCmd (MISO_CLK, ENABLE); RCC_AHB1PeriphClockCmd (MOSI_CLK, ENABLE); // set alternate functions GPIO_PinAFConfig (SCK_PORT, SCK_SOURCE, SPI_AF); GPIO_PinAFConfig (MISO_PORT, MISO_SOURCE, SPI_AF); GPIO_PinAFConfig (MOSI_PORT, MOSI_SOURCE, SPI_AF); // configure pins 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; // SCK GPIO_InitStructure.GPIO_Pin = SCK_PIN; GPIO_Init (SCK_PORT, &GPIO_InitStructure); // MISO GPIO_InitStructure.GPIO_Pin = MISO_PIN; GPIO_Init (MISO_PORT, &GPIO_InitStructure); // MOSI GPIO_InitStructure.GPIO_Pin = MOSI_PIN; GPIO_Init (MOSI_PORT, &GPIO_InitStructure); SPI_I2S_DeInit (SPI); // configure peripheral 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_16; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init (SPI, &SPI_InitStructure); // enable SPI SPI_Cmd (SPI, ENABLE); }
static void l3gd20SpiInit(SPI_TypeDef *SPIx) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_AHBPeriphClockCmd(SPI1_SCK_CLK | SPI1_MISO_CLK | SPI1_MOSI_CLK, ENABLE); GPIO_PinAFConfig(SPI1_GPIO, SPI1_SCK_PIN_SOURCE, GPIO_AF_5); GPIO_PinAFConfig(SPI1_GPIO, SPI1_MISO_PIN_SOURCE, GPIO_AF_5); GPIO_PinAFConfig(SPI1_GPIO, SPI1_MOSI_PIN_SOURCE, GPIO_AF_5); // 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_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(SPI1_GPIO, &GPIO_InitStructure); RCC_AHBPeriphClockCmd(L3GD20_CS_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = L3GD20_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(L3GD20_CS_GPIO, &GPIO_InitStructure); GPIO_SetBits(L3GD20_CS_GPIO, L3GD20_CS_PIN); SPI_I2S_DeInit(SPIx); 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_4; // 36/4 = 9 MHz SPI Clock SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPIx, &SPI_InitStructure); SPI_RxFIFOThresholdConfig(SPIx, SPI_RxFIFOThreshold_QF); SPI_Cmd(SPIx, ENABLE); }