I2S3 full-duplex master with MCLK

- fs: 32 kHz
- PLL2P: 40.96 Mhz
- format: I2S 32 bit
- PC7  --> I2S3_MCK
- PA15 --> I2S3_WS
- PC10 --> I2S3_CK
- PB4  --> I2S3_SDI
- PB5  --> I2S3_SDO
master
unicod 3 weeks ago
parent fb4fd5c3bf
commit 9f60a7ecde

@ -77,6 +77,7 @@ static void MX_UART5_Init(void);
static void MX_USART2_UART_Init(void);
static void MX_I2S2_Init(void);
static void MX_I2C1_Init(void);
static void MX_I2S3_Init(void);
/* USER CODE BEGIN PFP */
@ -226,6 +227,7 @@ int main(void)
MX_USART2_UART_Init();
MX_I2S2_Init();
MX_I2C1_Init();
MX_I2S3_Init();
/* USER CODE BEGIN 2 */
CODEC_RST_LO(); // Reset the audio codec via HW reset pin
@ -643,6 +645,93 @@ static void MX_I2S2_Init(void)
}
/**
* @brief I2S3 Initialization Function
* @param None
* @retval None
*/
static void MX_I2S3_Init(void)
{
/* USER CODE BEGIN I2S3_Init 0 */
/* USER CODE END I2S3_Init 0 */
LL_I2S_InitTypeDef I2S_InitStruct = {0};
LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
LL_RCC_SetSPIClockSource(LL_RCC_SPI3_CLKSOURCE_PLL2P);
/* Peripheral clock enable */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI3);
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
/**I2S3 GPIO Configuration
PC7 ------> I2S3_MCK
PA15(JTDI) ------> I2S3_WS
PC10 ------> I2S3_CK
PB4(NJTRST) ------> I2S3_SDI
PB5 ------> I2S3_SDO
*/
GPIO_InitStruct.Pin = LL_GPIO_PIN_7;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LL_GPIO_PIN_15;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LL_GPIO_PIN_4;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LL_GPIO_PIN_5;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_7;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN I2S3_Init 1 */
/* USER CODE END I2S3_Init 1 */
I2S_InitStruct.Mode = LL_I2S_MODE_MASTER_FULL_DUPLEX;
I2S_InitStruct.Standard = LL_I2S_STANDARD_PHILIPS;
I2S_InitStruct.DataFormat = LL_I2S_DATAFORMAT_32B;
I2S_InitStruct.MCLKOutput = LL_I2S_MCLK_OUTPUT_ENABLE;
I2S_InitStruct.AudioFreq = 32000;
I2S_InitStruct.ClockPolarity = LL_I2S_POLARITY_LOW;
LL_I2S_Init(SPI3, &I2S_InitStruct);
/* USER CODE BEGIN I2S3_Init 2 */
/* USER CODE END I2S3_Init 2 */
}
/**
* @brief ICACHE Initialization Function
* @param None

@ -52,6 +52,13 @@ I2S2.ErrorAudioFreq=0.0 %
I2S2.IPParameters=Instance,RealAudioFreq,ErrorAudioFreq,DataFormat,AudioFreq,AudioFreqCustom
I2S2.Instance=SPI$Index
I2S2.RealAudioFreq=32.0 KHz
I2S3.AudioFreq=AudioFreqCustomValue
I2S3.AudioFreqCustom=32000
I2S3.DataFormat=I2S_DATAFORMAT_32B
I2S3.ErrorAudioFreq=0.0 %
I2S3.IPParameters=Instance,RealAudioFreq,ErrorAudioFreq,DataFormat,AudioFreq,AudioFreqCustom
I2S3.Instance=SPI$Index
I2S3.RealAudioFreq=32.0 KHz
KeepUserPlacement=false
MMTAppReg1.MEMORYMAP.AP=RW_priv_only
MMTAppReg1.MEMORYMAP.AppRegionName=RAM
@ -90,23 +97,24 @@ Mcu.ContextProject=TrustZoneDisabled
Mcu.Family=STM32H5
Mcu.IP0=BOOTPATH
Mcu.IP1=CORTEX_M33_NS
Mcu.IP10=PWR
Mcu.IP11=RCC
Mcu.IP12=SYS
Mcu.IP13=TIM2
Mcu.IP14=TIM5
Mcu.IP15=UART5
Mcu.IP16=USART2
Mcu.IP17=USART3
Mcu.IP10=NVIC
Mcu.IP11=PWR
Mcu.IP12=RCC
Mcu.IP13=SYS
Mcu.IP14=TIM2
Mcu.IP15=TIM5
Mcu.IP16=UART5
Mcu.IP17=USART2
Mcu.IP18=USART3
Mcu.IP2=DEBUG
Mcu.IP3=GPDMA1
Mcu.IP4=GPDMA2
Mcu.IP5=I2C1
Mcu.IP6=I2S2
Mcu.IP7=ICACHE
Mcu.IP8=MEMORYMAP
Mcu.IP9=NVIC
Mcu.IPNb=18
Mcu.IP7=I2S3
Mcu.IP8=ICACHE
Mcu.IP9=MEMORYMAP
Mcu.IPNb=19
Mcu.Name=STM32H533RETx
Mcu.Package=LQFP64
Mcu.Pin0=PC14-OSC32_IN(OSC32_IN)
@ -117,37 +125,42 @@ Mcu.Pin12=PB13
Mcu.Pin13=PB14
Mcu.Pin14=PB15
Mcu.Pin15=PC6
Mcu.Pin16=PA13(JTMS/SWDIO)
Mcu.Pin17=PA14(JTCK/SWCLK)
Mcu.Pin18=PC11
Mcu.Pin19=PC12
Mcu.Pin16=PC7
Mcu.Pin17=PA13(JTMS/SWDIO)
Mcu.Pin18=PA14(JTCK/SWCLK)
Mcu.Pin19=PA15(JTDI)
Mcu.Pin2=PH0-OSC_IN(PH0)
Mcu.Pin20=PD2
Mcu.Pin21=PB6
Mcu.Pin22=PB7
Mcu.Pin23=PB8
Mcu.Pin24=VP_CORTEX_M33_NS_VS_Hclk
Mcu.Pin25=VP_GPDMA1_VS_GPDMACH0
Mcu.Pin26=VP_GPDMA1_VS_GPDMACH1
Mcu.Pin27=VP_GPDMA1_VS_GPDMACH2
Mcu.Pin28=VP_GPDMA1_VS_GPDMACH3
Mcu.Pin29=VP_GPDMA2_VS_GPDMACH0
Mcu.Pin20=PC10
Mcu.Pin21=PC11
Mcu.Pin22=PC12
Mcu.Pin23=PD2
Mcu.Pin24=PB4(NJTRST)
Mcu.Pin25=PB5
Mcu.Pin26=PB6
Mcu.Pin27=PB7
Mcu.Pin28=PB8
Mcu.Pin29=VP_CORTEX_M33_NS_VS_Hclk
Mcu.Pin3=PH1-OSC_OUT(PH1)
Mcu.Pin30=VP_ICACHE_VS_ICACHE
Mcu.Pin31=VP_PWR_VS_SECSignals
Mcu.Pin32=VP_PWR_VS_LPOM
Mcu.Pin33=VP_SYS_VS_Systick
Mcu.Pin34=VP_TIM2_VS_ClockSourceINT
Mcu.Pin35=VP_TIM5_VS_ClockSourceINT
Mcu.Pin36=VP_BOOTPATH_VS_BOOTPATH
Mcu.Pin37=VP_MEMORYMAP_VS_MEMORYMAP
Mcu.Pin30=VP_GPDMA1_VS_GPDMACH0
Mcu.Pin31=VP_GPDMA1_VS_GPDMACH1
Mcu.Pin32=VP_GPDMA1_VS_GPDMACH2
Mcu.Pin33=VP_GPDMA1_VS_GPDMACH3
Mcu.Pin34=VP_GPDMA2_VS_GPDMACH0
Mcu.Pin35=VP_ICACHE_VS_ICACHE
Mcu.Pin36=VP_PWR_VS_SECSignals
Mcu.Pin37=VP_PWR_VS_LPOM
Mcu.Pin38=VP_SYS_VS_Systick
Mcu.Pin39=VP_TIM2_VS_ClockSourceINT
Mcu.Pin4=PC2
Mcu.Pin40=VP_TIM5_VS_ClockSourceINT
Mcu.Pin41=VP_BOOTPATH_VS_BOOTPATH
Mcu.Pin42=VP_MEMORYMAP_VS_MEMORYMAP
Mcu.Pin5=PA0
Mcu.Pin6=PA1
Mcu.Pin7=PA2
Mcu.Pin8=PA3
Mcu.Pin9=PB1
Mcu.PinsNb=38
Mcu.PinsNb=43
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32H533RETx
@ -180,6 +193,11 @@ PA13(JTMS/SWDIO).Mode=Serial_Wire
PA13(JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO
PA14(JTCK/SWCLK).Mode=Serial_Wire
PA14(JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK
PA15(JTDI).GPIOParameters=GPIO_Speed
PA15(JTDI).GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PA15(JTDI).Locked=true
PA15(JTDI).Mode=Full_Duplex_Master
PA15(JTDI).Signal=I2S3_WS
PA2.GPIOParameters=GPIO_Speed
PA2.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PA2.Mode=Asynchronous
@ -222,6 +240,16 @@ PB15.Locked=true
PB15.Mode=Full_Duplex_Master
PB15.PinAttribute=Free
PB15.Signal=I2S2_SDO
PB4(NJTRST).GPIOParameters=GPIO_Speed
PB4(NJTRST).GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PB4(NJTRST).Locked=true
PB4(NJTRST).Mode=Full_Duplex_Master
PB4(NJTRST).Signal=I2S3_SDI
PB5.GPIOParameters=GPIO_Speed
PB5.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PB5.Locked=true
PB5.Mode=Full_Duplex_Master
PB5.Signal=I2S3_SDO
PB6.GPIOParameters=PinAttribute
PB6.Mode=I2C
PB6.PinAttribute=Free
@ -235,6 +263,10 @@ PB8.GPIO_Label=SHR_DOUT_DISP
PB8.Locked=true
PB8.PinAttribute=Free
PB8.Signal=GPIO_Output
PC10.GPIOParameters=GPIO_Speed
PC10.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PC10.Mode=Full_Duplex_Master
PC10.Signal=I2S3_CK
PC11.GPIOParameters=PinState,GPIO_Label,PinAttribute
PC11.GPIO_Label=LD2
PC11.Locked=true
@ -264,6 +296,10 @@ PC6.GPIOParameters=GPIO_Speed
PC6.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PC6.Mode=Master_Clock_Activated
PC6.Signal=I2S2_MCK
PC7.GPIOParameters=GPIO_Speed
PC7.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PC7.Mode=Master_Clock_Activated
PC7.Signal=I2S3_MCK
PCC.Checker=false
PCC.Line=STM32H5x3
PCC.MCU=STM32H533RETx
@ -313,7 +349,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_GPDMA1_Init-GPDMA1-false-LL-true,4-MX_GPDMA2_Init-GPDMA2-false-LL-true,5-MX_ICACHE_Init-ICACHE-false-LL-true,6-MX_TIM5_Init-TIM5-false-LL-true,7-MX_TIM2_Init-TIM2-false-LL-true,8-MX_USART3_UART_Init-USART3-false-LL-true,9-MX_UART5_Init-UART5-false-LL-true,10-MX_USART2_UART_Init-USART2-false-LL-true,11-MX_I2S2_Init-I2S2-false-LL-true,12-MX_I2C1_Init-I2C1-false-LL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-LL-true,0-MX_PWR_Init-PWR-false-LL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_GPDMA1_Init-GPDMA1-false-LL-true,4-MX_GPDMA2_Init-GPDMA2-false-LL-true,5-MX_ICACHE_Init-ICACHE-false-LL-true,6-MX_TIM5_Init-TIM5-false-LL-true,7-MX_TIM2_Init-TIM2-false-LL-true,8-MX_USART3_UART_Init-USART3-false-LL-true,9-MX_UART5_Init-UART5-false-LL-true,10-MX_USART2_UART_Init-USART2-false-LL-true,11-MX_I2S2_Init-I2S2-false-LL-true,12-MX_I2C1_Init-I2C1-false-LL-true,13-MX_I2S3_Init-I2S3-false-LL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-LL-true,0-MX_PWR_Init-PWR-false-LL-true
RCC.ADCFreq_Value=80000000
RCC.AHBFreq_Value=80000000
RCC.APB1Freq_Value=80000000
@ -341,7 +377,7 @@ RCC.I2C2Freq_Value=80000000
RCC.I2C3Freq_Value=80000000
RCC.I3C1Freq_Value=80000000
RCC.I3C2Freq_Value=80000000
RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,APB3Freq_Value,CKPERFreq_Value,CKPERSourceSelection,CRSFreq_Value,CSI_VALUE,CortexFreq_Value,DACFreq_Value,EPOD_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1CLockSelection,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I3C1Freq_Value,I3C2Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,LSIRC_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,OCTOSPIMFreq_Value,PLL1P,PLL1Q,PLL2M,PLL2N,PLL2P,PLL2PoutputFreq_Value,PLL2Q,PLL2QoutputFreq_Value,PLL2RoutputFreq_Value,PLL2Source,PLL3N,PLL3PoutputFreq_Value,PLL3Q,PLL3QoutputFreq_Value,PLL3R,PLL3RoutputFreq_Value,PLL3Source,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLSourceVirtual,PWRFreq_Value,RNGFreq_Value,SDMMC1Freq_Value,SPI1Freq_Value,SPI2CLockSelection,SPI2Freq_Value,SPI3Freq_Value,SPI4Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5CLockSelection,UART5Freq_Value,UCPD1outputFreq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOPLL2OutputFreq_Value,VCOPLL3OutputFreq_Value
RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,APB3Freq_Value,CKPERFreq_Value,CKPERSourceSelection,CRSFreq_Value,CSI_VALUE,CortexFreq_Value,DACFreq_Value,EPOD_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1CLockSelection,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I3C1Freq_Value,I3C2Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,LSIRC_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,OCTOSPIMFreq_Value,PLL1P,PLL1Q,PLL2M,PLL2N,PLL2P,PLL2PoutputFreq_Value,PLL2Q,PLL2QoutputFreq_Value,PLL2RoutputFreq_Value,PLL2Source,PLL3N,PLL3PoutputFreq_Value,PLL3Q,PLL3QoutputFreq_Value,PLL3R,PLL3RoutputFreq_Value,PLL3Source,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLSourceVirtual,PWRFreq_Value,RNGFreq_Value,SDMMC1Freq_Value,SPI1Freq_Value,SPI2CLockSelection,SPI2Freq_Value,SPI3CLockSelection,SPI3Freq_Value,SPI4Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5CLockSelection,UART5Freq_Value,UCPD1outputFreq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOPLL2OutputFreq_Value,VCOPLL3OutputFreq_Value
RCC.LPTIM1Freq_Value=80000000
RCC.LPTIM2Freq_Value=80000000
RCC.LPUART1Freq_Value=80000000
@ -378,7 +414,8 @@ RCC.SDMMC1Freq_Value=32000000
RCC.SPI1Freq_Value=32000000
RCC.SPI2CLockSelection=RCC_SPI2CLKSOURCE_PLL2P
RCC.SPI2Freq_Value=40960000
RCC.SPI3Freq_Value=32000000
RCC.SPI3CLockSelection=RCC_SPI3CLKSOURCE_PLL2P
RCC.SPI3Freq_Value=40960000
RCC.SPI4Freq_Value=80000000
RCC.SYSCLKFreq_VALUE=80000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK

Loading…
Cancel
Save