OpenEdv-开源电子网

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

STM32F429 WM8978 音乐开始结束喇叭会响一下

[复制链接]

5

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2019-12-5
在线时间
48 小时
发表于 2020-4-2 19:58:59 | 显示全部楼层 |阅读模式
10金钱
最近想自己做一个音乐播放器,搞了个简单的界面,通过点击液晶屏播放对应的wav格式音频。WM8978硬件电路参照STM32F429阿波罗开发板,只连接了一个喇叭,
每次通过调用u8 wav_play_song(u8* fname)函数从Flash中读取wav文件播放。
我遇到的问题是,每次音乐开始播放前和播放完,喇叭都会响一下,jlink跟踪了一下,
播放完后调用SAI_Play_Stop()-> __HAL_DMA_DISABLE(&SAI1_TXDMA_Handler);好像是这里关DMA引起的尾音,
请教大家该从哪里入手去解决这个问题呢,还请大家赐教。

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

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5136
金钱
5136
注册时间
2014-8-26
在线时间
1316 小时
发表于 2020-4-2 22:48:56 | 显示全部楼层
回复

使用道具 举报

5

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2019-12-5
在线时间
48 小时
 楼主| 发表于 2020-4-2 23:53:03 | 显示全部楼层

感谢帮顶帖。
晚上又拿Jlink单步调试一下,发现初始化打开LOUT2和ROUT2喇叭输出,之后配置R43,INVROUT2反向,喇叭也响了一声。

u8 WM8978_Init(void)
{
    u8 res;

    WM8978_IIC_Init();                 //初始化IIC接口
    res=WM8978_Write_Reg(0,0);  //软复位WM8978
    if(res)return 1;            //发送指令失败,WM8978异常
    //以下为通用设置
    WM8978_Write_Reg(1,0X0F);   //R1,MICEN设置为1(MIC使能),BIASEN设置为1(模拟器工作),VMIDSEL[1:0]设置为:11(5K)
   //WM8978_Write_Reg(2,0X1B0);  //R2,ROUT1,LOUT1输出使能(耳机可以工作),BOOSTENR,BOOSTENL使能
    WM8978_Write_Reg(3,0X6C);   //R3,LOUT2,ROUT2输出使能(喇叭工作),RMIX,LMIX使能       
    WM8978_Write_Reg(6,0);      //R6,MCLK由外部提供
    WM8978_Write_Reg(43,1<<4);  //R43,INVROUT2反向,驱动喇叭
    //WM8978_Write_Reg(47,1<<8);  //R47设置,PGABOOSTL,左通道MIC获得20倍增益
    //WM8978_Write_Reg(48,1<<8);  //R48设置,PGABOOSTR,右通道MIC获得20倍增益
    WM8978_Write_Reg(49,1<<1);  //R49,TSDEN,开启过热保护
    //WM8978_Write_Reg(49,1<<2);  //R49,SPEAKER BOOST,1.5x
    WM8978_Write_Reg(10,1<<3);  //R10,SOFTMUTE关闭,128x采样,最佳SNR
    WM8978_Write_Reg(14,1<<3);  //R14,ADC 128x采样率
  //WM8978_Write_Reg(3,0X6C);   //R3,LOUT2,ROUT2输出使能(喇叭工作),RMIX,LMIX使能       
  return 0;
}

图片是我的原理图,还会继续找原因。期待有遇到过类似问题的大神指点一二。
20200402234632812.jpg

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2020-4-3 00:59:13 | 显示全部楼层
发送一些0, 然后再关闭。
回复

使用道具 举报

5

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2019-12-5
在线时间
48 小时
 楼主| 发表于 2020-4-7 16:45:04 | 显示全部楼层
正点原子 发表于 2020-4-3 00:59
发送一些0, 然后再关闭。

感谢原子大哥的回复,放了几天时间。今天又弄了一下,在播放结束的时候加了一些零,没有起作用。
也试着更改wav文件源,在开头和末尾加入一些静音时间,也没有起作用。
用示波器直接接在ROUT2和LOUT2端口,看到初始化WM8978的时候,还有播放完成的时候有脉冲输出,下面是我抓的图。
还在继续查找原因,找到原因再跟大家分享。
20200407120801551.jpg
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2020-4-8 01:06:25 | 显示全部楼层
CharlesP 发表于 2020-4-7 16:45
感谢原子大哥的回复,放了几天时间。今天又弄了一下,在播放结束的时候加了一些零,没有起作用。
也试着 ...

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

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2020-11-21
在线时间
0 小时
发表于 2020-11-21 15:49:52 | 显示全部楼层
您好  您的问题解决了吗??
回复

使用道具 举报

5

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2019-12-5
在线时间
48 小时
 楼主| 发表于 2020-11-30 20:28:42 | 显示全部楼层
WZWM123456 发表于 2020-11-21 15:49
您好  您的问题解决了吗??

记得后面用了比较土的方法,播放完成后设置喇叭静音,下次播放前再设置一遍输出音量。
回复

使用道具 举报

9

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-5-2
在线时间
49 小时
发表于 2020-12-22 23:39:13 | 显示全部楼层
我碰到类似问题,用wav格式音乐播放正常,但是用人工录音播放,会出现这个破音,对比音频文件发现,录音文件fmt字段多出两个字节附加内容,采样率是44.1k,16位;我用千千静听将文件转换为48k采样率,这个时候再去播放就不会有这个破音;原子哥代码还没深入研究,我感觉是代码不够严谨导致的,音乐文件和录音文件用电脑播放没有任何问题,所以音频文件不存在问题,那问题就是在代码处理上
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-3-1 08:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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