diff --git a/Core/Src/main.c b/Core/Src/main.c index 3ce3052..c436331 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -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 diff --git a/DigitalAudioH533.ioc b/DigitalAudioH533.ioc index 24554d3..6ae4fbb 100644 --- a/DigitalAudioH533.ioc +++ b/DigitalAudioH533.ioc @@ -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