专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
请问有没有哪位写过WM8978录音和播放同时工作的驱动程序?
2019-07-20 01:54
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
8679
9
947
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
13372533333
2019-07-20 22:54
本帖最后由 13372533333 于 2019-5-15 16:31 编辑
刘先森 发表于 2019-5-13 15:47
原子哥,可以加QQ或者微信聊么,你说的这个方法不太会啊,这个例程看了好久了,发0是在哪里发的啊
void recoder_enter_rec_mode(void)
{
WM8978_ADDA_Cfg(1,1); //¿aÆôADC
WM8978_Input_Cfg(1,1,1); //¿aÆôêäèëí¨μà(MIC&LINE IN)
WM8978_Output_Cfg(1,1); //¿aÆôBYPASSêä3ö
WM8978_MIC_Gain(20); //MICÔöòæéèÖÃ
WM8978_I2S_Cfg(2,0); //·éàûÆÖ±ê×¼,16λêy¾Y3¤¶è
my_decode_init(&wavctrl);//μÃμ½ÎļtμÄDÅÏ¢
I2S3_Init(I2S_Standard_Phillips,I2S_Mode_MasterTx,I2S_CPOL_Low,I2S_DataFormat_16b); //·éàûÆÖ±ê×¼,Ö÷»ú·¢Ëí,ê±ÖóμíμçƽóDD§,16λ֡3¤¶è
I2S3ext_Init(I2S_Standard_Phillips,I2S_Mode_SlaveRx,I2S_CPOL_Low,I2S_DataFormat_16b); //·éàûÆÖ±ê×¼,′ó»ú½óêÕ,ê±ÖóμíμçƽóDD§,16λ֡3¤¶è
I2S3_SampleRate_Set(16000); //éèÖÃ2éÑùÂê
I2S3_TX_DMA_Init(audiodev.i2sbuf1,audiodev.i2sbuf2,WAV_I2S_TX_DMA_BUFSIZE/2); //ÅäÖÃTX DMA
//DMA1_Stream4->CR&=~(1<<4); //1رÕ′«êäíê3éÖD¶Ï(Õaàï2»óÃÖD¶ÏËíêy¾Y)
audio_stop();
i2s_tx_callback=wav_i2s_dma_tx_callback;
I2S3ext_RX_DMA_Init(i2srecbuf1,i2srecbuf2,I2S_RX_DMA_BUF_SIZE/2); //ÅäÖÃRX DMA
i2s_rx_callback=rec_i2s_dma_rx_callback;//»Øμ÷oˉêyÖ¸wav_i2s_dma_callback
I2S_Rec_Stop(); //¿aê¼I2Sêy¾Y½óêÕ(′ó»ú)
}
void rec_i2s_dma_rx_callback(void)
{
u8 *p,*pp;
int32_t j;
if(DMA1_Stream2->CR&(1<<19))
{
p = i2srecbuf1;
}else
{
p = i2srecbuf2;
}
pp = (u8 *)i2srecbuf3;
for(j=0;j<I2S_RX_DMA_BUF_SIZE;j++)
{
pp
=p[j];
if(i==I2S_RX_DMA_BUF_SIZE*14-1)
{
i=0;
}
else
{
i++;
}
}
}
u32 wav_buffill(u8 *buf,u16 size,u8 bits)
{
// u16 readlen=0;
u32 bread;
int32_t j;
if(bits==24)//24bitòôÆμ,Dèòa′|àíò»ÏÂ
{
// // readlen=(size/4)*3; //′Ë′Îòa¶áè¡μÄ×Ö½úêy
//// f_read(audiodev.file,audiodev.tbuf,readlen,(UINT*)&bread); //¶áè¡êy¾Y
// p=audiodev.tbuf;
// for(1=0;i<size;)
// {
// buf[1++]=p[1];
// buf[1]=p[2];
// 1+=2;
// buf[1++]=p[0];
// p+=3;
// }
// bread=(size*4)/3; //ìî3äoóμÄ′óD¡.
}else
{
for(j=0;j<size;j++)
{
buf[j]=i2srecbuf3[a];
if(a==I2S_RX_DMA_BUF_SIZE*14-1)
{
a=0;
}
else
{
a++;
}
}
bread=size;
}
return bread;
}
这个我改了一下,和例程里面的不一样,你可以把上面的I2S3改成I2S2就行了,和楼主说的有点不一样的就是,我是把录进来的数据直接播放出去,不是播放其他的音频文件。楼主说的和这个差不多,你只要把填充的BUFF改成你从SD卡读出来的音频数据就行了。
加载中...
查看其它9个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
void recoder_enter_rec_mode(void)
{
WM8978_ADDA_Cfg(1,1); //¿aÆôADC
WM8978_Input_Cfg(1,1,1); //¿aÆôêäèëí¨μà(MIC&LINE IN)
WM8978_Output_Cfg(1,1); //¿aÆôBYPASSêä3ö
WM8978_MIC_Gain(20); //MICÔöòæéèÖÃ
WM8978_I2S_Cfg(2,0); //·éàûÆÖ±ê×¼,16λêy¾Y3¤¶è
my_decode_init(&wavctrl);//μÃμ½ÎļtμÄDÅÏ¢
I2S3_Init(I2S_Standard_Phillips,I2S_Mode_MasterTx,I2S_CPOL_Low,I2S_DataFormat_16b); //·éàûÆÖ±ê×¼,Ö÷»ú·¢Ëí,ê±ÖóμíμçƽóDD§,16λ֡3¤¶è
I2S3ext_Init(I2S_Standard_Phillips,I2S_Mode_SlaveRx,I2S_CPOL_Low,I2S_DataFormat_16b); //·éàûÆÖ±ê×¼,′ó»ú½óêÕ,ê±ÖóμíμçƽóDD§,16λ֡3¤¶è
I2S3_SampleRate_Set(16000); //éèÖÃ2éÑùÂê
I2S3_TX_DMA_Init(audiodev.i2sbuf1,audiodev.i2sbuf2,WAV_I2S_TX_DMA_BUFSIZE/2); //ÅäÖÃTX DMA
//DMA1_Stream4->CR&=~(1<<4); //1رÕ′«êäíê3éÖD¶Ï(Õaàï2»óÃÖD¶ÏËíêy¾Y)
audio_stop();
i2s_tx_callback=wav_i2s_dma_tx_callback;
I2S3ext_RX_DMA_Init(i2srecbuf1,i2srecbuf2,I2S_RX_DMA_BUF_SIZE/2); //ÅäÖÃRX DMA
i2s_rx_callback=rec_i2s_dma_rx_callback;//»Øμ÷oˉêyÖ¸wav_i2s_dma_callback
I2S_Rec_Stop(); //¿aê¼I2Sêy¾Y½óêÕ(′ó»ú)
}
void rec_i2s_dma_rx_callback(void)
{
u8 *p,*pp;
int32_t j;
if(DMA1_Stream2->CR&(1<<19))
{
p = i2srecbuf1;
}else
{
p = i2srecbuf2;
}
pp = (u8 *)i2srecbuf3;
for(j=0;j<I2S_RX_DMA_BUF_SIZE;j++)
{
pp=p[j];
if(i==I2S_RX_DMA_BUF_SIZE*14-1)
{
i=0;
}
else
{
i++;
}
}
}
u32 wav_buffill(u8 *buf,u16 size,u8 bits)
{
// u16 readlen=0;
u32 bread;
int32_t j;
if(bits==24)//24bitòôÆμ,Dèòa′|àíò»ÏÂ
{
// // readlen=(size/4)*3; //′Ë′Îòa¶áè¡μÄ×Ö½úêy
//// f_read(audiodev.file,audiodev.tbuf,readlen,(UINT*)&bread); //¶áè¡êy¾Y
// p=audiodev.tbuf;
// for(1=0;i<size;)
// {
// buf[1++]=p[1];
// buf[1]=p[2];
// 1+=2;
// buf[1++]=p[0];
// p+=3;
// }
// bread=(size*4)/3; //ìî3äoóμÄ′óD¡.
}else
{
for(j=0;j<size;j++)
{
buf[j]=i2srecbuf3[a];
if(a==I2S_RX_DMA_BUF_SIZE*14-1)
{
a=0;
}
else
{
a++;
}
}
bread=size;
}
return bread;
}
这个我改了一下,和例程里面的不一样,你可以把上面的I2S3改成I2S2就行了,和楼主说的有点不一样的就是,我是把录进来的数据直接播放出去,不是播放其他的音频文件。楼主说的和这个差不多,你只要把填充的BUFF改成你从SD卡读出来的音频数据就行了。
一周热门 更多>