OpenEdv-开源电子网

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

关于探索者F4开发板录音项目16bit改成24bit方法

[复制链接]

2

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2020-2-27
在线时间
33 小时
发表于 2020-3-10 12:08:16 | 显示全部楼层 |阅读模式
1金钱
目前我更改了两个函数,这是更改完以后得代码,现在录得音只有一个声道,而且噪音很重。@正点原子 @原子哥


void recoder_enter_rec_mode(void)
{
WM8978_ADDA_Cfg(0,1);  //开启ADC
WM8978_Input_Cfg(1,1,0); //开启输入通道(MIC&LINE IN)
WM8978_Output_Cfg(0,1);  //开启BYPASS输出
WM8978_MIC_Gain(46);  //MIC增益设置

WM8978_I2S_Cfg(2,2);  //飞利浦标准,16位数据长度
I2S2_Init(I2S_Standard_Phillips,I2S_Mode_MasterTx,I2S_CPOL_Low,I2S_DataFormat_24b);   //飞利浦标准,主机发送,时钟低电平有效,16位帧长度
I2S2ext_Init(I2S_Standard_Phillips,I2S_Mode_SlaveRx,I2S_CPOL_Low,I2S_DataFormat_24b);  //飞利浦标准,从机接收,时钟低电平有效,16位帧长度
I2S2_SampleRate_Set(48000); //设置采样率
  I2S2_TX_DMA_Init((u8*)&i2splaybuf[0],(u8*)&i2splaybuf[1],1);   //配置TX DMA ??????????????????
DMA1_Stream4->CR&=~(1<<4); //关闭传输完成中断(这里不用中断送数据)
I2S2ext_RX_DMA_Init(i2srecbuf1,i2srecbuf2,I2S_RX_DMA_BUF_SIZE/ 2);  //配置RX DMA
   i2s_rx_callback=rec_i2s_dma_rx_callback;//回调函数指wav_i2s_dma_callback
  I2S_Play_Start(); //开始I2S数据发送(主机)
I2S_Rec_Start();  //开始I2S数据接收(从机)
recoder_remindmsg_show(0);
}  


void recoder_wav_init(__WaveHeader* wavhead) //初始化WAV头      
{
wavhead->riff.ChunkID=0X46464952; //"RIFF"
wavhead->riff.ChunkSize=0;   //还未确定,最后需要计算
wavhead->riff.Format=0X45564157;  //"WAVE"
wavhead->fmt.ChunkID=0X20746D66;  //"fmt "
wavhead->fmt.ChunkSize=16;    //大小为16个字节
wavhead->fmt.AudioFormat=0X01;   //0X01,表示PCM;0X01,表示IMA ADPCM
  wavhead->fmt.NumOfChannels=2;  //双声道
  wavhead->fmt.SampleRate=48000;  //16Khz采样率 采样速率
  wavhead->fmt.ByteRate=wavhead->fmt.SampleRate*6;//字节速率=采样率*通道数*(ADC位数/8)
  wavhead->fmt.BlockAlign=6;   //块大小=通道数*(ADC位数/8)
  wavhead->fmt.BitsPerSample=24 ;  //16位PCM??????????????????
    wavhead->data.ChunkID=0X61746164; //"data"
  wavhead->data.ChunkSize=0;   //数据大小,还需要计算  
}      


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

59

主题

196

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2018-5-3
在线时间
192 小时
发表于 2020-3-10 12:59:40 | 显示全部楼层
DMA传输的数据长度需要改下吧
回复

使用道具 举报

2

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2020-2-27
在线时间
33 小时
 楼主| 发表于 2020-3-10 13:32:29 | 显示全部楼层
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据长度:16位
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//存储器数据长度:16位

#define DMA_PeripheralDataSize_HalfWord   ((uint32_t)0x00000800)
#define DMA_MemoryDataSize_HalfWord       ((uint32_t)0x00002000)

这是现在得数据,应该改成什么?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-9-16
在线时间
6 小时
发表于 2020-3-10 19:02:08 | 显示全部楼层
不知道,我现在也在试着块
回复

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-5-23
在线时间
6 小时
发表于 2020-3-11 00:00:50 来自手机 | 显示全部楼层
dma的不用管
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2019-8-10
在线时间
42 小时
发表于 2021-2-24 18:27:07 | 显示全部楼层
兄弟你解决了吗,我现在也是只有一个声道有声音,杂音很重;
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-10 08:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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