OpenEdv-开源电子网

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

自己画的一块板子,实现录音机,麦克风不工作,什么原因?

[复制链接]

55

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
517
金钱
517
注册时间
2018-5-3
在线时间
147 小时
发表于 2019-5-13 13:05:57 | 显示全部楼层 |阅读模式
5金钱
自己画的一块板子,实现录音机,麦克风不工作,什么原因?根据原子的原理图,自己花了一下,播放是正常的,但是为什么麦克风不工作?
QQ截图20190513130342.png

最佳答案

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

哈哈,问题找到了,因为用到了PB4这个引脚的缘故,这个引脚是JTAG也用到了,所以导致这个情况,换了一个引脚一切正常,谢谢大家!
回复

使用道具 举报

55

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
517
金钱
517
注册时间
2018-5-3
在线时间
147 小时
 楼主| 发表于 2019-5-13 13:05:58 | 显示全部楼层
哈哈,问题找到了,因为用到了PB4这个引脚的缘故,这个引脚是JTAG也用到了,所以导致这个情况,换了一个引脚一切正常,谢谢大家!
回复

使用道具 举报

17

主题

910

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2281
金钱
2281
注册时间
2018-8-3
在线时间
378 小时
发表于 2019-5-13 14:49:46 | 显示全部楼层
帮顶   
回复

使用道具 举报

0

主题

174

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2019-4-28
在线时间
5 小时
发表于 2019-5-14 13:19:37 | 显示全部楼层
帮顶        
回复

使用道具 举报

0

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
526
金钱
526
注册时间
2018-4-21
在线时间
138 小时
发表于 2019-5-14 20:14:38 来自手机 | 显示全部楼层
帮顶!!
回复

使用道具 举报

55

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
517
金钱
517
注册时间
2018-5-3
在线时间
147 小时
 楼主| 发表于 2019-5-15 08:49:08 | 显示全部楼层
本帖最后由 13372533333 于 2019-5-15 09:31 编辑

回复

使用道具 举报

55

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
517
金钱
517
注册时间
2018-5-3
在线时间
147 小时
 楼主| 发表于 2019-5-15 10:34:37 | 显示全部楼层
本帖最后由 13372533333 于 2019-5-15 10:37 编辑

不知道是板子的问题还是程序的问题,数据接收用的IIS3+DMA来实现的,DMA选的是DMA1数据流0通道3,DMA可以进入中断但是数据全部为0,好难受!
回复

使用道具 举报

55

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
517
金钱
517
注册时间
2018-5-3
在线时间
147 小时
 楼主| 发表于 2019-5-15 16:36:49 | 显示全部楼层
本帖最后由 13372533333 于 2019-5-15 16:42 编辑

@正点原子 原子哥  帮忙看下,这个原理图正常吗?我把你的原理图上面的模拟地和数字地没有区分,电源也没有区分,为什么我的MIC就工作不正常了。主要的是播放确实可以的,这让我很纳闷,不知道什么原因?
回复

使用道具 举报

548

主题

10万

帖子

32

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
142839
金钱
142839
注册时间
2010-12-1
在线时间
1541 小时
发表于 2019-5-16 02:28:43 | 显示全部楼层
13372533333 发表于 2019-5-15 16:36
@正点原子 原子哥  帮忙看下,这个原理图正常吗?我把你的原理图上面的模拟地和数字地没有区分,电源也没有 ...

原理图看起来ok
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

71

主题

180

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1144
金钱
1144
注册时间
2015-11-14
在线时间
503 小时
发表于 2019-5-16 06:44:58 | 显示全部楼层
建议,在MDK里面看一看,运行的时候,麦克风采样的数据有没有变化。   WM8978  有 ADC 开启 的设置,很可能是软件的问题。  
回复

使用道具 举报

55

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
517
金钱
517
注册时间
2018-5-3
在线时间
147 小时
 楼主| 发表于 2019-5-16 08:10:24 | 显示全部楼层
本帖最后由 13372533333 于 2019-5-16 09:37 编辑

这就有点奇怪了,播放是正常的,录音的时候,DMA也能进入中断,就是数据为0,原子哥知道大概是哪地方出问题了?麦克风也是好的。这个原理图模拟地和数字地,不区分应该不影响正常使用吧?电源也是同一个电源也没有区分,采用的是IIS3,WM8978和STM32连线应该也没错吧,如果错了的话,播放应该也是不可以的。
QQ截图20190516082815.png
回复

使用道具 举报

55

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
517
金钱
517
注册时间
2018-5-3
在线时间
147 小时
 楼主| 发表于 2019-5-16 11:39:09 | 显示全部楼层
walker168 发表于 2019-5-16 06:44
建议,在MDK里面看一看,运行的时候,麦克风采样的数据有没有变化。   WM8978  有 ADC 开启 的设置,很可能 ...

用DUBUG看了一下,中断进去了,里面数据全是0,
WM8978_ADDA_Cfg(0,1);
WM8978_Input_Cfg(1,0,0);
WM8978_Output_Cfg(1,1);
ADC也开启了,
回复

使用道具 举报

548

主题

10万

帖子

32

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
142839
金钱
142839
注册时间
2010-12-1
在线时间
1541 小时
发表于 2019-5-17 02:21:57 | 显示全部楼层
13372533333 发表于 2019-5-16 11:39
用DUBUG看了一下,中断进去了,里面数据全是0,
WM8978_ADDA_Cfg(0,1);
WM8978_Input_Cfg(1,0,0);

看下是否是焊接问题吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

26

主题

329

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2017-7-17
在线时间
115 小时
发表于 2019-5-17 08:44:23 | 显示全部楼层
本帖最后由 candylife9 于 2019-5-17 08:45 编辑

既然自己画了电路,出了问题就要自己花心思去调试。如果你只是想画个板子不想调试,就不要在乎能不能录音。
回复

使用道具 举报

55

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
517
金钱
517
注册时间
2018-5-3
在线时间
147 小时
 楼主| 发表于 2019-5-17 09:20:05 | 显示全部楼层
candylife9 发表于 2019-5-17 08:44
既然自己画了电路,出了问题就要自己花心思去调试。如果你只是想画个板子不想调试,就不要在乎能不能录音。

你这话说的我没法接,如果我要是只想画板子玩,我是闲的蛋疼,花钱找麻烦,如果你没有建议,就请你帮忙顶一下,不要乱下结论,侮辱人。OK?
回复

使用道具 举报

55

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
517
金钱
517
注册时间
2018-5-3
在线时间
147 小时
 楼主| 发表于 2019-5-20 09:54:43 | 显示全部楼层
正点原子 发表于 2019-5-17 02:21
看下是否是焊接问题吧

原子哥,SPI3应该可以设置成主机发送从机接收数据吧?
void I2S3_Init(u16 I2S_Standard,u16 I2S_Mode,u16 I2S_Clock_Polarity,u16 I2S_DataFormat)
{
  I2S_InitTypeDef I2S_InitStructure;
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);//ê1ÄüSPI2ê±Öó
        
        RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3,ENABLE); //¸′λSPI2
        RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3,DISABLE);//½áêø¸′λ
  
        I2S_InitStructure.I2S_Mode=I2S_Mode;//IISÄ£ê½
        I2S_InitStructure.I2S_Standard=I2S_Standard;//IIS±ê×¼
        I2S_InitStructure.I2S_DataFormat=I2S_DataFormat;//IISêy¾Y3¤¶è
        I2S_InitStructure.I2S_MCLKOutput=I2S_MCLKOutput_Disable;//Ö÷ê±Öóêä3ö½ûÖ1
        I2S_InitStructure.I2S_AudioFreq=I2S_AudioFreq_Default;//IISÆμÂêéèÖÃ
        I2S_InitStructure.I2S_CPOL=I2S_Clock_Polarity;//¿ÕÏD×′ì¬ê±Öóμçƽ
        I2S_Init(SPI3,&I2S_InitStructure);//3õê¼»ˉIIS


        SPI_I2S_DMACmd(SPI3,SPI_I2S_DMAReq_Tx,ENABLE);//SPI2 TX DMAÇëÇóê1Äü.
  I2S_Cmd(SPI3,ENABLE);//SPI2 I2S ENê1Äü.        
}


void I2S3ext_Init(u16 I2S_Standard,u16 I2S_Mode,u16 I2S_Clock_Polarity,u16 I2S_DataFormat)
{  
        I2S_InitTypeDef I2S3ext_InitStructure;
        
        I2S3ext_InitStructure.I2S_Mode=I2S_Mode^(1<<8);//IIS&#196;£ê&#189;
        I2S3ext_InitStructure.I2S_Standard=I2S_Standard;//IIS±ê×&#188;
        I2S3ext_InitStructure.I2S_DataFormat=I2S_DataFormat;//IISêy&#190;Y3¤&#182;è
        I2S3ext_InitStructure.I2S_MCLKOutput=I2S_MCLKOutput_Disable;//&#214;÷ê±&#214;óê&#228;3&#246;&#189;&#251;&#214;1
        I2S3ext_InitStructure.I2S_AudioFreq=I2S_AudioFreq_Default;//IIS&#198;μ&#194;êéè&#214;&#195;
        I2S3ext_InitStructure.I2S_CPOL=I2S_Clock_Polarity;//&#191;&#213;&#207;D×′ì&#172;ê±&#214;óμ&#231;&#198;&#189;
        
        I2S_FullDuplexConfig(I2S3ext,&I2S3ext_InitStructure);//3&#245;ê&#188;&#187;ˉI2S2ext&#197;&#228;&#214;&#195;
        
        SPI_I2S_DMACmd(I2S3ext,SPI_I2S_DMAReq_Rx,ENABLE);//I2S2ext RX DMA&#199;&#235;&#199;óê1&#196;ü.

        I2S_Cmd(I2S3ext,ENABLE);                //I2S2ext I2S ENê1&#196;ü.
        
}
void I2S3_TX_DMA_Init(u8* buf0,u8 *buf1,u16 num)
{
        NVIC_InitTypeDef   NVIC_InitStructure;
        DMA_InitTypeDef  DMA_InitStructure;
       

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);//DMA1ê±&#214;óê1&#196;ü
       
        DMA_DeInit(DMA1_Stream5);
        while (DMA_GetCmdStatus(DMA1_Stream5) != DISABLE){}//μè′yDMA1_Stream5&#191;é&#197;&#228;&#214;&#195;
               
        DMA_ClearITPendingBit(DMA1_Stream5,DMA_IT_FEIF5|DMA_IT_DMEIF5|DMA_IT_TEIF5|DMA_IT_HTIF5|DMA_IT_TCIF5);//&#199;&#229;&#191;&#213;DMA1_Stream5é&#207;&#203;ùóD&#214;D&#182;&#207;±ê&#214;&#190;

  /* &#197;&#228;&#214;&#195; DMA Stream */

  DMA_InitStructure.DMA_Channel = DMA_Channel_0;  //í¨μà
  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&SPI3->DR;//íaéèμ&#216;&#214;·&#206;au32)&SPI2->DR
  DMA_InitStructure.DMA_Memory0BaseAddr = (u32)buf0;//DMA ′&#230;′¢&#198;÷0μ&#216;&#214;·
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;//′&#230;′¢&#198;÷μ&#189;íaéè&#196;£ê&#189;
  DMA_InitStructure.DMA_BufferSize = num;//êy&#190;Y′&#171;ê&#228;á&#191;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//íaéè·&#199;&#212;&#246;á&#191;&#196;£ê&#189;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//′&#230;′¢&#198;÷&#212;&#246;á&#191;&#196;£ê&#189;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//íaéèêy&#190;Y3¤&#182;è:16&#206;&#187;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//′&#230;′¢&#198;÷êy&#190;Y3¤&#182;è£o16&#206;&#187;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;// ê1ó&#195;&#209;-&#187;·&#196;£ê&#189;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;//&#184;&#223;ó&#197;&#207;è&#188;&#182;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; //2&#187;ê1ó&#195;FIFO&#196;£ê&#189;        
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//íaéèí&#187;·¢μ¥′&#206;′&#171;ê&#228;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//′&#230;′¢&#198;÷í&#187;·¢μ¥′&#206;′&#171;ê&#228;
  DMA_Init(DMA1_Stream5, &DMA_InitStructure);//3&#245;ê&#188;&#187;ˉDMA Stream
       
        DMA_DoubleBufferModeConfig(DMA1_Stream5,(u32)buf1,DMA_Memory_0);//&#203;&#171;&#187;o3&#229;&#196;£ê&#189;&#197;&#228;&#214;&#195;

  DMA_DoubleBufferModeCmd(DMA1_Stream5,ENABLE);//&#203;&#171;&#187;o3&#229;&#196;£ê&#189;&#191;a&#198;&#244;

  DMA_ITConfig(DMA1_Stream5,DMA_IT_TC,ENABLE);//&#191;a&#198;&#244;′&#171;ê&#228;íê3é&#214;D&#182;&#207;

        NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream5_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//×óó&#197;&#207;è&#188;&#182;0
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ê1&#196;üía2&#191;&#214;D&#182;&#207;í¨μà
  NVIC_Init(&NVIC_InitStructure);//&#197;&#228;&#214;&#195;       
}

void I2S3ext_RX_DMA_Init(u8* buf0,u8 *buf1,u16 num)
{        
       
        NVIC_InitTypeDef   NVIC_InitStructure;
        DMA_InitTypeDef  DMA_InitStructure;
       

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);//DMA1ê±&#214;óê1&#196;ü
       
        DMA_DeInit(DMA1_Stream0);
        while (DMA_GetCmdStatus(DMA1_Stream0) != DISABLE){}//μè′yDMA1_Stream3&#191;é&#197;&#228;&#214;&#195;
               
        DMA_ClearITPendingBit(DMA1_Stream0,DMA_IT_FEIF0|DMA_IT_DMEIF0|DMA_IT_TEIF0|DMA_IT_HTIF0|DMA_IT_TCIF0);//&#199;&#229;&#191;&#213;DMA1_Stream3é&#207;&#203;ùóD&#214;D&#182;&#207;±ê&#214;&#190;

  /* &#197;&#228;&#214;&#195; DMA Stream */

  DMA_InitStructure.DMA_Channel = DMA_Channel_3;  //í¨μà3 I2S2ext_RXí¨μà
  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&I2S3ext->DR;//íaéèμ&#216;&#214;·&#206;au32)&I2S2ext->DR>DR
  DMA_InitStructure.DMA_Memory0BaseAddr = (u32)buf0;//DMA ′&#230;′¢&#198;÷0μ&#216;&#214;·
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//íaéèμ&#189;′&#230;′¢&#198;÷&#196;£ê&#189;
  DMA_InitStructure.DMA_BufferSize = num;//êy&#190;Y′&#171;ê&#228;á&#191;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//íaéè·&#199;&#212;&#246;á&#191;&#196;£ê&#189;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//′&#230;′¢&#198;÷&#212;&#246;á&#191;&#196;£ê&#189;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//íaéèêy&#190;Y3¤&#182;è:16&#206;&#187;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//′&#230;′¢&#198;÷êy&#190;Y3¤&#182;è£o16&#206;&#187;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;// ê1ó&#195;&#209;-&#187;·&#196;£ê&#189;
  DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//&#214;Dμèó&#197;&#207;è&#188;&#182;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; //2&#187;ê1ó&#195;FIFO&#196;£ê&#189;        
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//íaéèí&#187;·¢μ¥′&#206;′&#171;ê&#228;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//′&#230;′¢&#198;÷í&#187;·¢μ¥′&#206;′&#171;ê&#228;
  DMA_Init(DMA1_Stream0, &DMA_InitStructure);//3&#245;ê&#188;&#187;ˉDMA Stream
       
        DMA_DoubleBufferModeConfig(DMA1_Stream0,(u32)buf1,DMA_Memory_0);//&#203;&#171;&#187;o3&#229;&#196;£ê&#189;&#197;&#228;&#214;&#195;

  DMA_DoubleBufferModeCmd(DMA1_Stream0,ENABLE);//&#203;&#171;&#187;o3&#229;&#196;£ê&#189;&#191;a&#198;&#244;

  DMA_ITConfig(DMA1_Stream0,DMA_IT_TC,ENABLE);//&#191;a&#198;&#244;′&#171;ê&#228;íê3é&#214;D&#182;&#207;

               
        NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0x00;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//×óó&#197;&#207;è&#188;&#182;1
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//ê1&#196;üía2&#191;&#214;D&#182;&#207;í¨μà
  NVIC_Init(&NVIC_InitStructure);//&#197;&#228;&#214;&#195;
       
         
}

现在还是没有找到原因,求原子哥帮看一下这样的配置对吗?
回复

使用道具 举报

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

本版积分规则



关闭

正点原子T100智能焊台强势面市上一条 /1 下一条

正点原子公众号

QQ|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2019-7-18 13:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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