OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7437|回复: 3

stm32f1 驱动vs1003调整音量问题

[复制链接]

14

主题

164

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1861
金钱
1861
注册时间
2012-5-19
在线时间
286 小时
发表于 2014-11-25 15:38:49 | 显示全部楼层 |阅读模式
5金钱
最近在用STM32F103驱动VS1003,发现在播放过程中音量无法调节大小,

在系统初始化的时候音量可以设置

请问我哪个地方不合适?

下面是我的播放代码

[mw_shl_code=c,true]char MP3Broadcast(void) { OS_ERR err; unsigned int count=0; unsigned char j=0; static u8 buffer[512]; unsigned int br;// 文件读计数器 FRESULT res;// FatFs 功能函数返回结果变量 static FIL MB_fsrc; // 文件标志 static char Volume; res = f_open(&MB_fsrc, str[0], FA_OPEN_EXISTING | FA_READ);//打开要播放的歌曲str[x] res = f_read(&MB_fsrc, buffer, sizeof(buffer), &br); //读取文件开始的512字节 if(buffer[0]==0x49&&buffer[1]==0x44&&buffer[2]==0x33) { //起始帧是ID3帧 j=buffer[8]*128+ buffer[9]+10; //计算出数据帧头位置 f_lseek(&MB_fsrc,j); //定位到数据帧 res = f_read(&MB_fsrc,buffer,sizeof(buffer),&br); //读取512字节 } VS10xx_Reset_DecodeTime();//必须复位播放时间否则会出现播放迟缓现象 br=1; XDCS_SET(0); //xDCS = 0,选择vs1003的数据接口 SysParameter.SysSDCard.VS10xxRunFlag = 1; for (;;) { res = f_read(&MB_fsrc, buffer, sizeof(buffer), &br); if(res==0) { count=0; //下面这个延时设置太大卡顿,太小对系统压力大 OSTimeDlyHMSM(0, 0, 0, 20,OS_OPT_TIME_HMSM_STRICT,&err); while(count<512) { //根据SD卡介质的原因,文件每次只能读出512字节 if(!SysParameter.SysSDCard.VS10xxBroadcastControl)//停止播放 { br = 0;//用于跳出for(;;)循环 break; } if(VS_DREQ!=0) { //VS1003数据申请口线, 每次为高后,可以通过SPI2写入32字节的音频数据 for(j=0;j<32;j++) //每次送32个数据 { // VS10xx_WriteByte(buffer[count]); //写入音频数据 SysDMAVS10xx.SendBuff[j] = buffer[count]; count++; } DMA1CHx_Enable(DMA1_Channel5,32); while(DMA1_Channel5->CNDTR!=0)OSTimeDlyHMSM(0, 0, 0, 4,OS_OPT_TIME_HMSM_STRICT,&err); SysParameter.SysSDCard.VS10xx_Step += 32;//播放进度 } if (res || br == 0) break; // 是否到文件尾 } if(Volume != SysDWINTouchLCD.Vs100xVolume)//如果音量修改了,设置音量大小 { while(VS_DREQ==0); VS10xx_SPI_SpeedLow(); //低速 XDCS_SET(1); //xDCS = 1 CS_SET(0); //xCS = 0 VS10xx_Set_Vol(SysDWINTouchLCD.Vs100xVolume); CS_SET(1); //xCS = 1 XDCS_SET(0); //xDCS = 0,选择vs1003的数据接口 VS10xx_SPI_SpeedHigh(); //高速 while(VS_DREQ==0); Volume = SysDWINTouchLCD.Vs100xVolume; } } if (res || br == 0) break; // 是否到文件尾 } count=0; while(count<2048) { //根据VS1003的特性,需要音乐文件的末尾发送一些个0 ,保证下一个音频文件的播放 if(VS_DREQ!=0) { for(j=0;j<32;j++) //每次送32个数据 { VS10xx_WriteByte(0); count++; } } } XDCS_SET(1); f_close(&MB_fsrc); return FR_OK; }[/mw_shl_code]
[mw_shl_code=c,true] //设定VS10XX播放的音量和高低音 //volx:音量大小(0~254) void VS10xx_Set_Vol(unsigned char volx) { u16 volt=0; //暂存音量值 volt=254-volx; //取反一下,得到最大值,表示最大的表示 volt<<=8; volt+=254-volx; //得到音量设置后大小 VS10xx_WriteReg(SPI_VOL,volt);//设音量 }[/mw_shl_code]

[mw_shl_code=c,true] /**************************************************************************** * 名 称:void VS10xx_WriteReg(unsigned char add, unsigned short Data) * 功 能:写VS10xx寄存器 * 入口参数:add:寄存器地址,Data:要发送的16bit数据 * 出口参数:无 * 说 明: * 调用方法:无 ****************************************************************************/ void VS10xx_WriteReg(unsigned char add, unsigned short Data) { while(VS_DREQ==0); //等待空闲 VS10xx_SPI_SpeedLow(); //低速 XDCS_SET(1); //xDCS = 1 CS_SET(0); //xCS = 0 VS10xx_WriteByte(VS_WRITE_COMMAND); //发送写寄存器命令 VS10xx_WriteByte(add); //发送寄存器的地址 VS10xx_WriteByte(Data>>8); //发送待写数据的高8位 VS10xx_WriteByte(Data); //发送待写数据的低8位 CS_SET(1); //xCS = 1 VS10xx_SPI_SpeedHigh(); //高速 } [/mw_shl_code]


最佳答案

查看完整内容[请看2#楼]

回复【2楼】正点原子: --------------------------------- 自己结贴,找到问题了,播放音频文件用的是DMA模式,然后转为不用DMA发送数据,结果就出问题了。 现在舍去DMA发送模式 一切工作正常了。 想问一下原子 如果播放音频用DMA 可否发送控制命令也使用DMA模式发送数据
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

164

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1861
金钱
1861
注册时间
2012-5-19
在线时间
286 小时
 楼主| 发表于 2014-11-25 15:38:50 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
自己结贴,找到问题了,播放音频文件用的是DMA模式,然后转为不用DMA发送数据,结果就出问题了。
现在舍去DMA发送模式 一切工作正常了。

想问一下原子 如果播放音频用DMA 可否发送控制命令也使用DMA模式发送数据
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-25 16:17:42 | 显示全部楼层
看上去没问题,帮顶。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

164

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1861
金钱
1861
注册时间
2012-5-19
在线时间
286 小时
 楼主| 发表于 2014-11-25 16:40:20 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
那就怪了,多次尝试无果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 12:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表