OpenEdv-开源电子网

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

关于STM32的DAC输出音频的问题向大家请教

[复制链接]

5

主题

28

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-9
在线时间
12 小时
发表于 2018-11-9 16:16:08 | 显示全部楼层 |阅读模式
1金钱
各位大神,本人新手,关于STM32的DAC输出音频的问题要向大家请教

1.我想输出几个汉字的语音,这些语音的格式是十六进制吗,如何获取呀
2.通过DMA如何输出

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

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-11-9 17:56:14 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-10 02:30:43 | 显示全部楼层
先学会我们的音乐播放器实验先
回复

使用道具 举报

5

主题

28

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-9
在线时间
12 小时
 楼主| 发表于 2018-11-12 09:21:23 | 显示全部楼层
原子哥,音乐播放器实验能不能发给我一份,我没有找到
回复

使用道具 举报

5

主题

28

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-9
在线时间
12 小时
 楼主| 发表于 2018-11-12 09:25:11 | 显示全部楼层
而且,我这边没有SD卡,如何将WAV格式的音乐转换为数据之间存储在单片机中呀
回复

使用道具 举报

5

主题

28

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-9
在线时间
12 小时
 楼主| 发表于 2018-11-12 11:08:51 | 显示全部楼层
各位大神,用WinHex软件将WAV中的数据拷出来一部分放在数组中来定时中断播放,不知道可不可以呀,有没有兄弟姐妹试过
回复

使用道具 举报

5

主题

28

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-9
在线时间
12 小时
 楼主| 发表于 2018-11-12 11:25:39 | 显示全部楼层
各位前辈,我自己试了一下
void TIM6_DAC_IRQHandler(void)
{
    static u16 a1 = 0;
    if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
    {
        //Usart6_SendByte(0x22);
        if (is_finish == 0)
        {
            DAC_SetChannel1Data(DAC_Align_12b_R, test[a1]);
            DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);
            a1 += 1;
            if (a1 >= sizeof(test))
            {
                a1 = 0;
                is_finish = 1;
            }
        }
        TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
    }
}

结果只有噪音
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-13 02:09:22 | 显示全部楼层
守望冬天2018 发表于 2018-11-12 11:25
各位前辈,我自己试了一下
void TIM6_DAC_IRQHandler(void)
{

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

使用道具 举报

11

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2013-8-4
在线时间
69 小时
发表于 2018-11-13 12:41:03 来自手机 | 显示全部楼层
你先了解下音频格式 我播放过WAV格式 音效还是不错滴
回复

使用道具 举报

5

主题

28

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-9
在线时间
12 小时
 楼主| 发表于 2018-11-14 13:52:53 | 显示全部楼层
yygkqzh 发表于 2018-11-13 12:41
你先了解下音频格式 我播放过WAV格式 音效还是不错滴

前辈,我看了原子哥的WAV格式分析,采样频率是22.05,单声道16位,是不是我需要把定时器的进入中断频率设置为22.05,还有将数据开始后的两个字节当做一个采样值 ,比如
unsigned AnsiChar data[20] = {        0x58, 0x00, 0x40, 0x00, 0x52, 0x00, 0x3D, 0x00, 0x3F, 0x00, 0x4C, 0x00, 0x53, 0x00, 0x3A, 0x00,
        0x20, 0x00, 0x04, 0x00
};

其中0x0058, 是一个采样值
aaa.PNG
回复

使用道具 举报

5

主题

28

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-9
在线时间
12 小时
 楼主| 发表于 2018-11-16 09:12:52 | 显示全部楼层
各位前辈,我在网上找了一个做法,现在能播放16位单通道的WAV音频了,但是音质不好,杂音特别大,而且还音量比较低,请问如何解决呀?
是在定时器里循环读出音频中的数据,然后放到DAC中。
void TIM6_DAC_IRQHandler(void)
{
    static u32 a1 = 0;
    u16 data1 = 0;
    if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
    {
        if (is_finish == 0)
        {
            data1 = test[a1+1];
            data1 <<= 8;
            data1 |= test[a1];
            data1 -= 0x8000;
            data1 >>= 4;
            
            //DAC_SetChannel1Data(DAC_Align_12b_R, test[a1]);
            DAC_SetChannel1Data(DAC_Align_12b_R, data1);
            //DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);
            a1 += 2;
            if (a1 >= sizeof(test))
            {
                a1 = 0;
                //is_finish = 1;
            }
        }
        TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
    }
}
回复

使用道具 举报

5

主题

28

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-9
在线时间
12 小时
 楼主| 发表于 2018-11-21 14:37:37 | 显示全部楼层
各位前辈,我现在使能DAC的时候,喇叭会先响一下,然后播放语音,不知道你们有没有遇到过这个问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-22 02:13:05 | 显示全部楼层
守望冬天2018 发表于 2018-11-21 14:37
各位前辈,我现在使能DAC的时候,喇叭会先响一下,然后播放语音,不知道你们有没有遇到过这个问题

正常现象,上点/无数据的时候,可能有这个问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

28

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-9
在线时间
12 小时
 楼主| 发表于 2018-11-22 09:41:36 | 显示全部楼层
正点原子 发表于 2018-11-22 02:13
正常现象,上点/无数据的时候,可能有这个问题

原子哥,那我该怎么解决呢,因为我可能要做低功耗,所以在有语音播放的时候才使能DAC的,平常关闭的,每次播放时都会听到喇叭先响一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-14 16:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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