OpenEdv-开源电子网

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

WM8731 I2S驱动不起来,是哪里设置不对吗。

[复制链接]

8

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2016-10-1
在线时间
117 小时
发表于 2016-10-1 11:48:32 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 20161001 于 2016-10-1 11:52 编辑

原理图是这个,用的103VCT6 ,播放声音,声音数据是个数组放在单片机的flash里直接读取。
123.jpg


现在情况是,通过iic可以设置静音,包括声音音量大小。我改变IIC设置的数值能感觉到默认的电流声音的大小是可以改变证明IIC设置是正确的。


但是I2S数据好像没什么效果,发出去的数据也听不到声音。我插的是耳机。

不知道哪里的问题。


[mw_shl_code=applescript,true]void GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB|  RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOE| RCC_APB2Periph_AFIO, ENABLE);

  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

    /* I2S2 SD, CK and WS pins configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

}[/mw_shl_code]


[mw_shl_code=applescript,true]void I2S_Config(uint16_t Standard, uint16_t MCLKOutput, uint16_t AudioFreq)
{
  I2S_InitTypeDef I2S_InitStructure;

  /* Enable I2S2 APB1 clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

  /* Deinitialize SPI2 peripheral */
  SPI_I2S_DeInit(SPI2);

  /* I2S2 peripheral configuration */
  I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx;
  I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips;
  I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b;
  I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;
  I2S_InitStructure.I2S_AudioFreq = AudioFreq;
  I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
  I2S_Init(SPI2, &I2S_InitStructure);

  /* Disable the I2S2 TXE Interrupt */
  //SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, DISABLE);

  /* Enable the SPI2/I2S2 peripheral */
  I2S_Cmd(SPI2, ENABLE);
  
  
    /* Enable the I2S3 TxE interrupt */
  SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, ENABLE);
  
}[/mw_shl_code]


语音数据是在中断函数中不断发送的,这个中断函数是可以正常进入的。并且在线仿真,可以看到数据寄存器是有发送的数据的。但实际就是没有有声音。

[mw_shl_code=applescript,true]void SPI2_IRQHandler(void)
{
  /* Check the interrupt source */
  if (SPI_I2S_GetITStatus(SPI2, SPI_I2S_IT_TXE) == SET)
  {

   
   
    /* Send a data from I2S3 */
    SPI_I2S_SendData(SPI2, AUDIO_SAMPLE1[TxIdx++]);
   
   
   
    if(TxIdx>=2000)
      TxIdx=0;
  }
}[/mw_shl_code]




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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-10-1 16:50:06 | 显示全部楼层
示波器看看几个信号线的波形先
回复

使用道具 举报

8

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2016-10-1
在线时间
117 小时
 楼主| 发表于 2016-10-1 17:26:24 | 显示全部楼层
正点原子 发表于 2016-10-1 16:50
示波器看看几个信号线的波形先

手头暂时没有示波器,一般调试都是盲调。折腾了好几天了。板子自己做的,第一次用I2S接口,第一次用这种音频ic,还不熟悉。看来还是得找个示波器看看了。


另外理论上只要,各个通信线上有波形了应该就可以发出声音了吧。感觉不应该很难的。
回复

使用道具 举报

8

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2016-10-1
在线时间
117 小时
 楼主| 发表于 2016-10-1 17:29:28 | 显示全部楼层
各种怀疑,我甚至怀疑板子芯片焊接不知道有没有问题。第一次用I2S,还不熟悉,实在不行我再焊接一块板子试试。搞了几天网上也搜索不到例子程序。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-10-2 22:23:30 | 显示全部楼层
20161001 发表于 2016-10-1 17:26
手头暂时没有示波器,一般调试都是盲调。折腾了好几天了。板子自己做的,第一次用I2S接口,第一次用这种 ...

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

使用道具 举报

8

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2016-10-1
在线时间
117 小时
 楼主| 发表于 2016-10-3 22:31:13 | 显示全部楼层

头疼,又焊接了一块板子,还不如第一块板子,连IIC初始化芯片设置好像都没成功,因为耳机里听不到静态的声音。没示波器真不方便。
回复

使用道具 举报

23

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
449
金钱
449
注册时间
2016-7-12
在线时间
121 小时
发表于 2016-11-7 08:44:38 | 显示全部楼层
SPI2没有复用JTAG吧!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 00:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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