1*225f4ba4SMatthias Ringwald /** 2*225f4ba4SMatthias Ringwald ****************************************************************************** 3*225f4ba4SMatthias Ringwald * File Name : I2S.c 4*225f4ba4SMatthias Ringwald * Description : This file provides code for the configuration 5*225f4ba4SMatthias Ringwald * of the I2S instances. 6*225f4ba4SMatthias Ringwald ****************************************************************************** 7*225f4ba4SMatthias Ringwald * @attention 8*225f4ba4SMatthias Ringwald * 9*225f4ba4SMatthias Ringwald * <h2><center>© Copyright (c) 2019 STMicroelectronics. 10*225f4ba4SMatthias Ringwald * All rights reserved.</center></h2> 11*225f4ba4SMatthias Ringwald * 12*225f4ba4SMatthias Ringwald * This software component is licensed by ST under BSD 3-Clause license, 13*225f4ba4SMatthias Ringwald * the "License"; You may not use this file except in compliance with the 14*225f4ba4SMatthias Ringwald * License. You may obtain a copy of the License at: 15*225f4ba4SMatthias Ringwald * opensource.org/licenses/BSD-3-Clause 16*225f4ba4SMatthias Ringwald * 17*225f4ba4SMatthias Ringwald ****************************************************************************** 18*225f4ba4SMatthias Ringwald */ 19*225f4ba4SMatthias Ringwald 20*225f4ba4SMatthias Ringwald /* Includes ------------------------------------------------------------------*/ 21*225f4ba4SMatthias Ringwald #include "i2s.h" 22*225f4ba4SMatthias Ringwald 23*225f4ba4SMatthias Ringwald /* USER CODE BEGIN 0 */ 24*225f4ba4SMatthias Ringwald 25*225f4ba4SMatthias Ringwald /* USER CODE END 0 */ 26*225f4ba4SMatthias Ringwald 27*225f4ba4SMatthias Ringwald I2S_HandleTypeDef hi2s2; 28*225f4ba4SMatthias Ringwald 29*225f4ba4SMatthias Ringwald /* I2S2 init function */ MX_I2S2_Init(void)30*225f4ba4SMatthias Ringwaldvoid MX_I2S2_Init(void) 31*225f4ba4SMatthias Ringwald { 32*225f4ba4SMatthias Ringwald 33*225f4ba4SMatthias Ringwald hi2s2.Instance = SPI2; 34*225f4ba4SMatthias Ringwald hi2s2.Init.Mode = I2S_MODE_MASTER_TX; 35*225f4ba4SMatthias Ringwald hi2s2.Init.Standard = I2S_STANDARD_PHILIPS; 36*225f4ba4SMatthias Ringwald hi2s2.Init.DataFormat = I2S_DATAFORMAT_16B; 37*225f4ba4SMatthias Ringwald hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; 38*225f4ba4SMatthias Ringwald hi2s2.Init.AudioFreq = I2S_AUDIOFREQ_8K; 39*225f4ba4SMatthias Ringwald hi2s2.Init.CPOL = I2S_CPOL_LOW; 40*225f4ba4SMatthias Ringwald hi2s2.Init.ClockSource = I2S_CLOCK_PLL; 41*225f4ba4SMatthias Ringwald hi2s2.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_ENABLE; 42*225f4ba4SMatthias Ringwald if (HAL_I2S_Init(&hi2s2) != HAL_OK) 43*225f4ba4SMatthias Ringwald { 44*225f4ba4SMatthias Ringwald Error_Handler(); 45*225f4ba4SMatthias Ringwald } 46*225f4ba4SMatthias Ringwald 47*225f4ba4SMatthias Ringwald } 48*225f4ba4SMatthias Ringwald HAL_I2S_MspInit(I2S_HandleTypeDef * i2sHandle)49*225f4ba4SMatthias Ringwaldvoid HAL_I2S_MspInit(I2S_HandleTypeDef* i2sHandle) 50*225f4ba4SMatthias Ringwald { 51*225f4ba4SMatthias Ringwald 52*225f4ba4SMatthias Ringwald GPIO_InitTypeDef GPIO_InitStruct = {0}; 53*225f4ba4SMatthias Ringwald if(i2sHandle->Instance==SPI2) 54*225f4ba4SMatthias Ringwald { 55*225f4ba4SMatthias Ringwald /* USER CODE BEGIN SPI2_MspInit 0 */ 56*225f4ba4SMatthias Ringwald 57*225f4ba4SMatthias Ringwald /* USER CODE END SPI2_MspInit 0 */ 58*225f4ba4SMatthias Ringwald /* I2S2 clock enable */ 59*225f4ba4SMatthias Ringwald __HAL_RCC_SPI2_CLK_ENABLE(); 60*225f4ba4SMatthias Ringwald 61*225f4ba4SMatthias Ringwald __HAL_RCC_GPIOC_CLK_ENABLE(); 62*225f4ba4SMatthias Ringwald __HAL_RCC_GPIOB_CLK_ENABLE(); 63*225f4ba4SMatthias Ringwald /**I2S2 GPIO Configuration 64*225f4ba4SMatthias Ringwald PC2 ------> I2S2_ext_SD 65*225f4ba4SMatthias Ringwald PC3 ------> I2S2_SD 66*225f4ba4SMatthias Ringwald PB10 ------> I2S2_CK 67*225f4ba4SMatthias Ringwald PB12 ------> I2S2_WS 68*225f4ba4SMatthias Ringwald */ 69*225f4ba4SMatthias Ringwald GPIO_InitStruct.Pin = GPIO_PIN_2; 70*225f4ba4SMatthias Ringwald GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 71*225f4ba4SMatthias Ringwald GPIO_InitStruct.Pull = GPIO_NOPULL; 72*225f4ba4SMatthias Ringwald GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 73*225f4ba4SMatthias Ringwald GPIO_InitStruct.Alternate = GPIO_AF6_I2S2ext; 74*225f4ba4SMatthias Ringwald HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); 75*225f4ba4SMatthias Ringwald 76*225f4ba4SMatthias Ringwald GPIO_InitStruct.Pin = PDM_OUT_Pin; 77*225f4ba4SMatthias Ringwald GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 78*225f4ba4SMatthias Ringwald GPIO_InitStruct.Pull = GPIO_NOPULL; 79*225f4ba4SMatthias Ringwald GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 80*225f4ba4SMatthias Ringwald GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; 81*225f4ba4SMatthias Ringwald HAL_GPIO_Init(PDM_OUT_GPIO_Port, &GPIO_InitStruct); 82*225f4ba4SMatthias Ringwald 83*225f4ba4SMatthias Ringwald GPIO_InitStruct.Pin = CLK_IN_Pin|GPIO_PIN_12; 84*225f4ba4SMatthias Ringwald GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 85*225f4ba4SMatthias Ringwald GPIO_InitStruct.Pull = GPIO_NOPULL; 86*225f4ba4SMatthias Ringwald GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 87*225f4ba4SMatthias Ringwald GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; 88*225f4ba4SMatthias Ringwald HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 89*225f4ba4SMatthias Ringwald 90*225f4ba4SMatthias Ringwald /* USER CODE BEGIN SPI2_MspInit 1 */ 91*225f4ba4SMatthias Ringwald 92*225f4ba4SMatthias Ringwald /* USER CODE END SPI2_MspInit 1 */ 93*225f4ba4SMatthias Ringwald } 94*225f4ba4SMatthias Ringwald } 95*225f4ba4SMatthias Ringwald HAL_I2S_MspDeInit(I2S_HandleTypeDef * i2sHandle)96*225f4ba4SMatthias Ringwaldvoid HAL_I2S_MspDeInit(I2S_HandleTypeDef* i2sHandle) 97*225f4ba4SMatthias Ringwald { 98*225f4ba4SMatthias Ringwald 99*225f4ba4SMatthias Ringwald if(i2sHandle->Instance==SPI2) 100*225f4ba4SMatthias Ringwald { 101*225f4ba4SMatthias Ringwald /* USER CODE BEGIN SPI2_MspDeInit 0 */ 102*225f4ba4SMatthias Ringwald 103*225f4ba4SMatthias Ringwald /* USER CODE END SPI2_MspDeInit 0 */ 104*225f4ba4SMatthias Ringwald /* Peripheral clock disable */ 105*225f4ba4SMatthias Ringwald __HAL_RCC_SPI2_CLK_DISABLE(); 106*225f4ba4SMatthias Ringwald 107*225f4ba4SMatthias Ringwald /**I2S2 GPIO Configuration 108*225f4ba4SMatthias Ringwald PC2 ------> I2S2_ext_SD 109*225f4ba4SMatthias Ringwald PC3 ------> I2S2_SD 110*225f4ba4SMatthias Ringwald PB10 ------> I2S2_CK 111*225f4ba4SMatthias Ringwald PB12 ------> I2S2_WS 112*225f4ba4SMatthias Ringwald */ 113*225f4ba4SMatthias Ringwald HAL_GPIO_DeInit(GPIOC, GPIO_PIN_2|PDM_OUT_Pin); 114*225f4ba4SMatthias Ringwald 115*225f4ba4SMatthias Ringwald HAL_GPIO_DeInit(GPIOB, CLK_IN_Pin|GPIO_PIN_12); 116*225f4ba4SMatthias Ringwald 117*225f4ba4SMatthias Ringwald /* USER CODE BEGIN SPI2_MspDeInit 1 */ 118*225f4ba4SMatthias Ringwald 119*225f4ba4SMatthias Ringwald /* USER CODE END SPI2_MspDeInit 1 */ 120*225f4ba4SMatthias Ringwald } 121*225f4ba4SMatthias Ringwald } 122*225f4ba4SMatthias Ringwald 123*225f4ba4SMatthias Ringwald /* USER CODE BEGIN 1 */ 124*225f4ba4SMatthias Ringwald 125*225f4ba4SMatthias Ringwald /* USER CODE END 1 */ 126*225f4ba4SMatthias Ringwald 127*225f4ba4SMatthias Ringwald /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 128