stm32和vs1003b程序怎么写

stm32和vs1003b程序怎么写,第1张

下面是我的VS1003b_Init代码:

void My_VS1003b_Init()

{

u16 uReadVal = 0

My_VS1003b_GPIOConfig()

My_SPI_Init(SPI1)

SPI_SetSpeed(SPI1,SPI_BaudRatePrescaler_16)//在模块为初始化之前SCLKI = 12MHZ,SPI允许的通信速率为SCLKI/6= 2MHZ

//SDI、SCI为SCLKI/4

// My_VS1003b_ExitConfig()

My_VS1003b_HardReset()

XDCS_H

XCS_H

My_TimeDelay(2)

My_VS1003b_WriteSCI(MODE,0x08,0x00)//软件复位,向0号寄存器写入0x0804 SM_SDINEW为1 SM_RESET为1 SM_DIFF为1环绕声

while(My_VS1003b_GetDREQState() == LOW)

My_VS1003b_WriteSCI(CLOCKF,0x98,0x00)//设置 VS1003 的时钟:例如SCI_CLOCKF=0x9800,向3号寄存器写入0x9800

//100 11 000 0000 0000 SC_MULT 为4 SC_ADD 为3 SC_FREQ为 0

// 设置完以后XTAIL不变,SCLKI = XTAIL*SC_MULT = 36MHZ,编解码速率 SCLKI*1.5 = 48MHZ

uReadVal = My_VS1003b_Read(CLOCKF)

uReadVal += 0

// SPI_SetSpeed(SPI1,SPI_BaudRatePrescaler_8)

My_VS1003b_WriteSCI(AUDATA,0xBB,0x81)//设置 VS1003 的采样率:SPI_AUDATA=0xbb81,采样率 0xBB80 48k,0x0001立体声

uReadVal = My_VS1003b_Read(AUDATA)

uReadVal += 0

My_VS1003b_WriteSCI(BASS,0x00,0x00) //SPI_BASS=0x0055,重音设置,向2号寄存器写入0x0055

//SB_AMPLITUDE=5 SB_FREQLIMIT=5 低于50Hz时进行5dB的增强

uReadVal = My_VS1003b_Read(BASS)

uReadVal += 0

My_VS1003b_WriteSCI(VOL,VOL_VALUE,VOL_VALUE)//初始设置音量:SCI_VOL=0x2020 左右声道相同

// while(1)

// {

// uReadVal = My_VS1003b_Read(VOL)

// uReadVal += 0

// }

// VS1003_ResetDecodeTime()

SPI_WriteByte(SPI1,0)//SDI测试

SPI_WriteByte(SPI1,0)

SPI_WriteByte(SPI1,0)

SPI_WriteByte(SPI1,0)

while(My_VS1003b_GetDREQState() == LOW)

VS1003_Sintest(5)

}

SPI初始化代码:

GPIO初始略过。。。

SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex

SPI_InitStruct.SPI_Mode = SPI_Mode_Master

SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b

SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low

SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge

SPI_InitStruct.SPI_NSS = SPI_NSS_Soft

SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16

SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB

SPI_InitStruct.SPI_CRCPolynomial = 7

SPI_Cmd(pstSPIx,DISABLE)

SPI_Init(pstSPIx,&SPI_InitStruct)

SPI_Cmd(pstSPIx,ENABLE)

由于我的HCLK = 36MHZ,所以此处为16分频。。。。

这是我的100b 的 GPIO_Init代码:

void My_VS1003b_GPIOConfig()

{

GPIO_InitTypeDef GPIO_InitStruct = {0}

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE)

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)

GPIO_InitStruct.GPIO_Pin = VS1003b_DREQ

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU

GPIO_Init(GPIOC,&GPIO_InitStruct)

GPIO_InitStruct.GPIO_Pin = VS1003b_XDCS | VS1003b_XCS | VS1003b_RSET

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP

GPIO_Init(GPIOC,&GPIO_InitStruct)

}

1003b 读写模块函数:

u16 My_VS1003b_Read(u8 uAddress)

{

u16 uReturnVal = 0

// while(My_VS1003b_GetXCSState() == HIGH)

My_VS1003b_SCIStart()

SPI_WriteByte(SPI1,VS1003b_Read)

SPI_WriteByte(SPI1,uAddress)

uReturnVal = (SPI_ReadWriteByte(SPI1,0xff) <<8)

uReturnVal |= SPI_ReadWriteByte(SPI1,0xff)

My_VS1003b_SCIStop()

return uReturnVal

}

void My_VS1003b_WriteSDI(u8 uAddress,u8 uVal)

{

// while(My_VS1003b_GetXCSState() == HIGH)

My_VS1003b_SDIStart()

SPI_WriteByte(SPI1,VS1003b_Write)

SPI_WriteByte(SPI1,uAddress)

SPI_ReadWriteByte(SPI1,uVal % 0x100)

My_VS1003b_SDIStop()

My_TimeDelay(1)

}

void My_VS1003b_WriteSCI(u8 uAddress,u8 uHbyte,u8 uLbyte)

{

// while(My_VS1003b_GetXCSState() == HIGH)

My_VS1003b_SCIStart()

SPI_WriteByte(SPI1,VS1003b_Write)

SPI_WriteByte(SPI1,uAddress)

SPI_WriteByte(SPI1,uHbyte)

SPI_WriteByte(SPI1,uLbyte)

My_VS1003b_SCIStop()

My_TimeDelay(1)

}

VS1003 是一个单片MP3/WMA/MIDI 音频解码器和ADPCM编码器。它包含一个高性能,自主产权的低功耗DSP 处理器核

VS_DSP4,工作数据存储器,为用户应用提供5KB 的指令RAM 和0.5KB 的数据RAM。串行的控制和数据接口,4个常规用

途的I/O 口,一个UART,也有一个高品质可变采样率的ADC和立体声DAC,还有一个耳机放大器和地线缓冲器。

●VS1003 通过一个串行接口来接收输入的比特流,它可以作为一个系统的从机。输入的比特流被解码,然后通过一个数

字音量控制器到达一个18 位过采样多位ε-Δ DAC。通过串行总线控制解码器。除了基本的解码,在用户RAM 中它还可

以做其他特殊应用,例如DSP 音效处理。 VS1053b 是单片Ogg Vorbis/MP3/AAC/WMA/MIDI音频

解码器,及IMA ADPCM 编码器和用户加载的Ogg Vorbis编

码器。它包含了一个高性能、有专利的低功耗DSP 处理器

内核VS_DSP4、工作数据存储器、供用户应用程序和任何固

化解码器一起运行的16 KiB 指令RAM 及0.5KiB 多的数据

RAM、串行的控制和输入数据接口、最多8 个可用的通用I/O

引脚、一个UART、并有一个优质的可变采样率立体声ADC

(“咪”、“线路”、“线路+咪”或“线路*2”)和立体声

DAC、和跟随的一个耳机功放及一个公共电压缓冲器。

化解码器一起运行的16 KiB 指令RAM 及0.5KiB 多的数据

RAM、串行的控制和输入数据接口、最多8 个可用的通用I/O

引脚、一个UART、并有一个优质的可变采样率立体声ADC

(“咪”、“线路”、“线路+咪”或“线路*2”)和立体声

DAC、和跟随的一个耳机功放及一个公共电压缓冲器。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7863261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存