diff --git a/.settings/stm32cubeide.project.prefs b/.settings/stm32cubeide.project.prefs index 9631d28..78851cb 100644 --- a/.settings/stm32cubeide.project.prefs +++ b/.settings/stm32cubeide.project.prefs @@ -1,5 +1,5 @@ 635E684B79701B039C64EA45C3F84D30=786B3C9175F8FD59BE24144A9C2C0972 66BE74F758C12D739921AEA421D593D3=0 -8DF89ED150041C4CBC7CB9A9CAA90856=AB300AAF2E04A330B7C06C41BF25F205 -DC22A860405A8BF2F2C095E5B6529F12=AB300AAF2E04A330B7C06C41BF25F205 +8DF89ED150041C4CBC7CB9A9CAA90856=93686BBC250D6AB1A1396FED176FCE30 +DC22A860405A8BF2F2C095E5B6529F12=93686BBC250D6AB1A1396FED176FCE30 eclipse.preferences.version=1 diff --git a/Core/Src/Components/Start.cpp b/Core/Src/Components/Start.cpp index a63a517..6eff501 100644 --- a/Core/Src/Components/Start.cpp +++ b/Core/Src/Components/Start.cpp @@ -10,15 +10,8 @@ #include "AUDIO.h" -uint16_t pBuffer[200]; - void Start(){ - for(uint32_t i = 0; i<100; i++){ - pBuffer[2*i] = i*655; - pBuffer[(2*i)+1] = 32768; - } - AUDIO_OUT_Init(2, 35, 96000); - AUDIO_OUT_Play(pBuffer, 400); + AUDIO_OUT_Init(2, 100, 48000); while(1){ } diff --git a/Core/Src/main.c b/Core/Src/main.c index 0caaa6c..b943b31 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -146,12 +146,11 @@ void SystemClock_Config(void) /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; - RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 4; RCC_OscInitStruct.PLL.PLLN = 192; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; RCC_OscInitStruct.PLL.PLLQ = 8; @@ -187,7 +186,7 @@ void PeriphCommonClock_Config(void) */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S; PeriphClkInitStruct.PLLI2S.PLLI2SN = 200; - PeriphClkInitStruct.PLLI2S.PLLI2SM = 10; + PeriphClkInitStruct.PLLI2S.PLLI2SM = 5; PeriphClkInitStruct.PLLI2S.PLLI2SR = 2; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { @@ -283,7 +282,7 @@ static void MX_I2S3_Init(void) hi2s3.Init.Standard = I2S_STANDARD_PHILIPS; hi2s3.Init.DataFormat = I2S_DATAFORMAT_16B; hi2s3.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_96K; + hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_48K; hi2s3.Init.CPOL = I2S_CPOL_LOW; hi2s3.Init.ClockSource = I2S_CLOCK_PLL; hi2s3.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE; diff --git a/F411-DMA-Audio.ioc b/F411-DMA-Audio.ioc index ee0e2c2..e03d675 100644 --- a/F411-DMA-Audio.ioc +++ b/F411-DMA-Audio.ioc @@ -35,12 +35,13 @@ I2S2.IPParameters=FullDuplexMode,ErrorAudioFreq,RealAudioFreq,AudioFreq,Instance I2S2.Instance=SPI$Index I2S2.RealAudioFreq=96.153 KHz I2S2.VirtualMode=I2S_MODE_MASTER -I2S3.AudioFreq=I2S_AUDIOFREQ_96K -I2S3.ErrorAudioFreq=-6.99 % +I2S3.AudioFreq=I2S_AUDIOFREQ_48K +I2S3.AudioFreqCustom=48000 +I2S3.ErrorAudioFreq=0.15 % I2S3.FullDuplexMode=I2S_FULLDUPLEXMODE_DISABLE -I2S3.IPParameters=AudioFreq,ErrorAudioFreq,RealAudioFreq,Instance,VirtualMode,FullDuplexMode +I2S3.IPParameters=AudioFreq,ErrorAudioFreq,RealAudioFreq,Instance,VirtualMode,FullDuplexMode,AudioFreqCustom I2S3.Instance=SPI$Index -I2S3.RealAudioFreq=89.285 KHz +I2S3.RealAudioFreq=48.076 KHz I2S3.VirtualMode=I2S_MODE_MASTER KeepUserPlacement=false Mcu.CPN=STM32F411VET6 @@ -309,10 +310,12 @@ PE5.Signal=GPXTI5 PH0\ -\ OSC_IN.GPIOParameters=GPIO_Label PH0\ -\ OSC_IN.GPIO_Label=PH0-OSC_IN PH0\ -\ OSC_IN.Locked=true +PH0\ -\ OSC_IN.Mode=HSE-External-Oscillator PH0\ -\ OSC_IN.Signal=RCC_OSC_IN PH1\ -\ OSC_OUT.GPIOParameters=GPIO_Label PH1\ -\ OSC_OUT.GPIO_Label=PH1-OSC_OUT PH1\ -\ OSC_OUT.Locked=true +PH1\ -\ OSC_OUT.Mode=HSE-External-Oscillator PH1\ -\ OSC_OUT.Signal=RCC_OSC_OUT PinOutPanel.RotationAngle=0 ProjectManager.AskForMigrate=true @@ -327,7 +330,7 @@ ProjectManager.DeviceId=STM32F411VETx ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.27.0 ProjectManager.FreePins=false ProjectManager.HalAssertFull=false -ProjectManager.HeapSize=0x200 +ProjectManager.HeapSize=0x2000 ProjectManager.KeepUserCode=true ProjectManager.LastFirmware=true ProjectManager.LibraryCopy=1 @@ -338,7 +341,7 @@ ProjectManager.ProjectBuild=false ProjectManager.ProjectFileName=F411-DMA-Audio.ioc ProjectManager.ProjectName=F411-DMA-Audio ProjectManager.RegisterCallBack= -ProjectManager.StackSize=0x400 +ProjectManager.StackSize=0x4000 ProjectManager.TargetToolchain=STM32CubeIDE ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=true @@ -358,17 +361,16 @@ RCC.HCLKFreq_Value=96000000 RCC.HSE_VALUE=8000000 RCC.HSI_VALUE=16000000 RCC.I2SClocksFreq_Value=160000000 -RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SM,PLLI2SN,PLLM,PLLP,PLLQ,PLLQCLKFreq_Value,PLLSourceVirtualString,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOInputMFreq_Value,VCOOutputFreq_Value,VcooutputI2S +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SM,PLLI2SN,PLLM,PLLP,PLLQ,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOInputMFreq_Value,VCOOutputFreq_Value,VcooutputI2S RCC.LSI_VALUE=32000 RCC.MCO2PinFreq_Value=96000000 RCC.PLLCLKFreq_Value=96000000 -RCC.PLLI2SM=10 +RCC.PLLI2SM=5 RCC.PLLI2SN=200 -RCC.PLLM=8 +RCC.PLLM=4 RCC.PLLP=RCC_PLLP_DIV4 RCC.PLLQ=8 RCC.PLLQCLKFreq_Value=48000000 -RCC.PLLSourceVirtualString=RCC_PLLSOURCE_HSI RCC.RTCFreq_Value=32000 RCC.RTCHSEDivFreq_Value=4000000 RCC.SYSCLKFreq_VALUE=96000000 @@ -394,7 +396,7 @@ SPI1.Mode=SPI_MODE_MASTER SPI1.VirtualType=VM_MASTER USB_DEVICE.CLASS_NAME_FS=AUDIO USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS,USBD_AUDIO_FREQ -USB_DEVICE.USBD_AUDIO_FREQ=44100 +USB_DEVICE.USBD_AUDIO_FREQ=48000 USB_DEVICE.VirtualMode=Audio USB_DEVICE.VirtualModeFS=Audio_FS USB_OTG_FS.IPParameters=VirtualMode diff --git a/STM32F411VETX_FLASH.ld b/STM32F411VETX_FLASH.ld index 919c450..c657e32 100644 --- a/STM32F411VETX_FLASH.ld +++ b/STM32F411VETX_FLASH.ld @@ -38,8 +38,8 @@ ENTRY(Reset_Handler) /* Highest address of the user mode stack */ _estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ -_Min_Heap_Size = 0x200 ; /* required amount of heap */ -_Min_Stack_Size = 0x400 ; /* required amount of stack */ +_Min_Heap_Size = 0x2000 ; /* required amount of heap */ +_Min_Stack_Size = 0x4000 ; /* required amount of stack */ /* Memories definition */ MEMORY diff --git a/USB_DEVICE/App/usbd_audio_if.c b/USB_DEVICE/App/usbd_audio_if.c index 2f2e87d..c92a861 100644 --- a/USB_DEVICE/App/usbd_audio_if.c +++ b/USB_DEVICE/App/usbd_audio_if.c @@ -31,7 +31,6 @@ /* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ - /* USER CODE END PV */ /** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY @@ -186,9 +185,11 @@ static int8_t AUDIO_AudioCmd_FS(uint8_t* pbuf, uint32_t size, uint8_t cmd) switch(cmd) { case AUDIO_CMD_START: + AUDIO_OUT_Play(pbuf, 2*size); break; case AUDIO_CMD_PLAY: + break; } UNUSED(pbuf); diff --git a/USB_DEVICE/Target/usbd_conf.h b/USB_DEVICE/Target/usbd_conf.h index 15a5207..2ef981a 100644 --- a/USB_DEVICE/Target/usbd_conf.h +++ b/USB_DEVICE/Target/usbd_conf.h @@ -75,7 +75,7 @@ /*---------- -----------*/ #define USBD_SELF_POWERED 1U /*---------- -----------*/ -#define USBD_AUDIO_FREQ 44100U +#define USBD_AUDIO_FREQ 48000U /****************************************/ /* #define for FS and HS identification */