ソフト S/PDIF トランスミッタ (13)
今回は STM32CubeMX のプロジェクト・ファイル (.ioc ファイル) を掲載し、ソース・プログラムの本体は次回の記事に掲載します。
後に示すリストを「コピー・アンド・ペースト」してプロジェクト・ファイルを作成し、STM32CubeMX に読み込ませ、C コードを生成すれば、ユーザ・プログラム部分が空白のソース・コードができあがります。
そのなかで、「main.c」を次回に示すリストで置き換えればソフト S/PDIF トランスミッタ・プログラムになります。
CubeMX および HAL ライブラリは、この記事を書いている時点での最新バージョン、
- STM32CubeMX V4.3.1
- STM32CubeF4 V1.3.0
を使用しています。
STM32CubeMX 自体のダウンロード/インストール/使用方法についての説明は省略します。
適当な場所に新規に「soft_spdif」フォルダを作成し、そこに下のリストを「コピー・アンド・ペースト」して作ったプロジェクト・ファイルを「soft_spdif.ioc」という名前でセーブしてください。
違うファイル名を付けることも可能ですが、その場合にはプロジェクト・ファイル内でプロジェクト名/ファイル名を指定している部分も変更してください。
また、使用するライブラリ・ファイルのコピーを格納するフォルダや生成される C ソース・ファイルを格納するフォルダは、プロジェクト・ファイルと同じレベルに作成されるので、新規フォルダ内にプロジェクト・ファイルを置いておかないと既存のファイル/フォルダと混在してしまいます。
STM32CubeMX の起動画面で「Load Project」のリンクをクリックし、現れる「Load Project」ダイアログで上記の .ioc ファイルを指定すればプロジェクトが読み込まれます。
#MicroXplorer Configuration settings - do not modify #Wed Sep 03 18:38:04 JST 2014 Dma.Request0=SPI3_TX Dma.RequestsNb=1 Dma.SPI3_TX.0.Channel=DMA_CHANNEL_0 Dma.SPI3_TX.0.Direction=DMA_MEMORY_TO_PERIPH Dma.SPI3_TX.0.FIFOMode=DMA_FIFOMODE_DISABLE Dma.SPI3_TX.0.Instance=DMA1_Stream5 Dma.SPI3_TX.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD Dma.SPI3_TX.0.MemInc=DMA_MINC_ENABLE Dma.SPI3_TX.0.Mode=DMA_CIRCULAR Dma.SPI3_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD Dma.SPI3_TX.0.PeriphInc=DMA_PINC_DISABLE Dma.SPI3_TX.0.Priority=DMA_PRIORITY_LOW Dma.SPI3_TX.0.RequestParameters=Instance,Channel,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode File.Version=4 I2S3.AudioFreq-Half_Duplex_Master=I2S_AUDIOFREQ_192K I2S3.DataFormat-Half_Duplex_Master=I2S_DATAFORMAT_16B I2S3.ErrorAudioFreq-Half_Duplex_Master=0.0 % I2S3.IPParameters=AudioFreq-Half_Duplex_Master,ErrorAudioFreq-Half_Duplex_Master,RealAudioFreq-Half_Duplex_Master,Standard-Half_Duplex_Master,DataFormat-Half_Duplex_Master I2S3.RealAudioFreq-Half_Duplex_Master=192.0 KHz I2S3.Standard-Half_Duplex_Master=I2S_STANDARD_LSB KeepUserPlacement=true Mcu.Family=STM32F4 Mcu.IP0=DMA Mcu.IP1=I2S3 Mcu.IP2=NVIC Mcu.IP3=RCC Mcu.IP4=SYS Mcu.IP5=USART2 Mcu.IPNb=6 Mcu.Name=STM32F401R(B-C-D-E)Tx Mcu.Package=LQFP64 Mcu.Pin0=PC13-ANTI_TAMP Mcu.Pin1=PC14-OSC32_IN Mcu.Pin10=PA14 Mcu.Pin11=PB3 Mcu.Pin12=PB5 Mcu.Pin2=PC15-OSC32_OUT Mcu.Pin3=PH0 - OSC_IN Mcu.Pin4=PH1 - OSC_OUT Mcu.Pin5=PA2 Mcu.Pin6=PA3 Mcu.Pin7=PA4 Mcu.Pin8=PA5 Mcu.Pin9=PA13 Mcu.PinsNb=13 Mcu.UserName=STM32F401RETx NVIC.DMA1_Stream5_IRQn=true\:0\:0 NVIC.PriorityGroup=NVIC_PRIORITYGROUP_0 NVIC.SysTick_IRQn=true\:0\:0 PA13.GPIOParameters=GPIO_Label PA13.GPIO_Label=TMS PA13.Locked=true PA13.Mode=Serial-Wire PA13.Signal=SYS_JTMS-SWDIO PA14.GPIOParameters=GPIO_Label PA14.GPIO_Label=TCK PA14.Locked=true PA14.Mode=Serial-Wire PA14.Signal=SYS_JTCK-SWCLK PA2.GPIOParameters=GPIO_Label,GPIO_Speed,GPIO_PuPd,GPIO_Mode PA2.GPIO_Label=USART_TX PA2.GPIO_Mode=GPIO_MODE_AF_PP PA2.GPIO_PuPd=GPIO_NOPULL PA2.GPIO_Speed=GPIO_SPEED_LOW PA2.Locked=true PA2.Mode=Asynchronous PA2.Signal=USART2_TX PA3.GPIOParameters=GPIO_Label,GPIO_Speed,GPIO_PuPd,GPIO_Mode PA3.GPIO_Label=USART_RX PA3.GPIO_Mode=GPIO_MODE_AF_PP PA3.GPIO_PuPd=GPIO_NOPULL PA3.GPIO_Speed=GPIO_SPEED_LOW PA3.Locked=true PA3.Mode=Asynchronous PA3.Signal=USART2_RX PA4.Mode=Half_Duplex_Master PA4.Signal=I2S3_WS PA5.GPIOParameters=GPIO_Label,GPIO_ModeDefaultOutputPP,GPIO_Speed,GPIO_PuPd,GPIO_Mode PA5.GPIO_Label=LD2 [Green Led] PA5.GPIO_Mode=GPIO_MODE_OUTPUT_PP PA5.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP PA5.GPIO_PuPd=GPIO_NOPULL PA5.GPIO_Speed=GPIO_SPEED_LOW PA5.Locked=true PA5.Signal=GPIO_Output PB3.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Mode PB3.GPIO_Mode=GPIO_MODE_AF_PP PB3.GPIO_PuPd=GPIO_NOPULL PB3.GPIO_Speed=GPIO_SPEED_MEDIUM PB3.Locked=true PB3.Mode=Half_Duplex_Master PB3.Signal=I2S3_CK PB5.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Mode PB5.GPIO_Mode=GPIO_MODE_AF_PP PB5.GPIO_PuPd=GPIO_NOPULL PB5.GPIO_Speed=GPIO_SPEED_MEDIUM PB5.Locked=true PB5.Mode=Half_Duplex_Master PB5.Signal=I2S3_SD PC13-ANTI_TAMP.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI,GPIO_PuPd PC13-ANTI_TAMP.GPIO_Label=B1 [Blue PushButton] PC13-ANTI_TAMP.GPIO_ModeDefaultEXTI=GPIO_MODE_EVT_RISING PC13-ANTI_TAMP.GPIO_PuPd=GPIO_NOPULL PC13-ANTI_TAMP.Locked=true PC13-ANTI_TAMP.Signal=GPXTI13 PC14-OSC32_IN.Locked=true PC14-OSC32_IN.Signal=RCC_OSC32_IN PC15-OSC32_OUT.Locked=true PC15-OSC32_OUT.Signal=RCC_OSC32_OUT PCC.Family=STM32F4 PCC.MCU=STM32F401R(D-E)Tx PCC.MXVersion=4.3.1 PCC.PartNumber=STM32F401RETx PCC.Seq0=0 PCC.SubFamily=STM32F401 PCC.Temperature=25 PCC.Vdd=null PH0\ -\ OSC_IN.Locked=true PH0\ -\ OSC_IN.Mode=HSE-External-Oscillator PH0\ -\ OSC_IN.Signal=RCC_OSC_IN PH1\ -\ OSC_OUT.Locked=true PH1\ -\ OSC_OUT.Mode=HSE-External-Oscillator PH1\ -\ OSC_OUT.Signal=RCC_OSC_OUT ProjectManager.AskForMigrate=true ProjectManager.BackupPrevious=false ProjectManager.CompilerOptimize=2 ProjectManager.ComputerToolchain=false ProjectManager.CoupleFile=false ProjectManager.DeletePrevious=true ProjectManager.DeviceId=STM32F401RETx ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.3.0 ProjectManager.FreePins=false ProjectManager.HalAssertFull=false ProjectManager.KeepUserCode=true ProjectManager.LastFirmware=true ProjectManager.LibraryCopy=1 ProjectManager.ProjectBuild=false ProjectManager.ProjectFileName=soft_spdif.ioc ProjectManager.ProjectName=soft_spdif ProjectManager.TargetToolchain=MDK-ARM 4.73 RCC.APB1CLKDivider=RCC_HCLK_DIV2 RCC.HSE_VALUE=8000000 RCC.HSI_VALUE=16000000 RCC.IPParameters=,LSE_VALUE,PLLP,SYSCLKSource,APB1CLKDivider,PLLN,HSE_VALUE,PLLM,HSI_VALUE,PLLQ,PLLSource,VcooutputI2S,PLLI2SR,LSI_VALUE RCC.LSE_VALUE=32768 RCC.LSI_VALUE=32000 RCC.PLLI2SR=5 RCC.PLLM=5 RCC.PLLN=210 RCC.PLLP=RCC_PLLP_DIV4 RCC.PLLQ=7 RCC.PLLSource=RCC_PLLSOURCE_HSE RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.VcooutputI2S=61440000 SH.GPXTI13.0=GPIO_EXTI13 SH.GPXTI13.ConfNb=1 boardIOC=true
ピンの設定は下の図のようになります。
メイン・クロック、I2S クロック発生用 PLL の設定は下の図のようになります。