OpenEdv-开源电子网

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

不用VS1053,只用stm32的ADC,DAC录音的问题

[复制链接]

0

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2025-6-13
在线时间
8 小时
发表于 4 天前 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 zhengdiandianzi 于 2025-8-10 23:27 编辑

请问我用stm32f103zet6的ADC采集声音,然后用stm32f103zet6的DAC播放,声音一模一样,就是稍微快进了一点,如何解决?ADC采集声音的频率和DAC定时器触发转换的频率一样的。把DAC的定时器触发转换频率降低,声音失真甚至没有。定时器触发转换频率不变,把DAC每次转换的数字信号个数增加,转换速率还是快了一点。没时间研究,请教一下DAC转换速率如何控制!

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

使用道具 举报

13

主题

3429

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8765
金钱
8765
注册时间
2020-5-11
在线时间
4294 小时
发表于 3 天前 | 显示全部楼层
专治疑难杂症
回复

使用道具 举报

13

主题

136

帖子

0

精华

高级会员

Rank: 4

积分
967
金钱
967
注册时间
2018-4-5
在线时间
73 小时
发表于 3 天前 | 显示全部楼层
可以试试把输出的间隔改为和采样的间隔相同试试
保守秘密,守望共济,等价交换,尊重知识,探求真知。
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2025-6-13
在线时间
8 小时
 楼主| 发表于 3 天前 | 显示全部楼层

采样率44K
回复

使用道具 举报

13

主题

3429

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8765
金钱
8765
注册时间
2020-5-11
在线时间
4294 小时
发表于 3 天前 | 显示全部楼层

看你的描述,ADC与DAC的频率是单独控制的,为啥要这样?
试一下在同一个定时中断里让DAC输出ADC采集的数据?
专治疑难杂症
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2025-6-13
在线时间
8 小时
 楼主| 发表于 3 天前 | 显示全部楼层
本帖最后由 zhengdiandianzi 于 2025-8-11 20:51 编辑
TheHellc 发表于 2025-8-11 12:15
可以试试把输出的间隔改为和采样的间隔相同试试

说的有道理,这是正确的思路。程序如何实现呢?delay_ms()函数,可以控制声音有无,不精确。而且噪声巨大。如何控制DAC间隔一定时间(例1MS)转换一次呢?用定时器吗?还需要学习,水平有限。
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2025-6-13
在线时间
8 小时
 楼主| 发表于 3 天前 | 显示全部楼层
本帖最后由 zhengdiandianzi 于 2025-8-11 20:01 编辑
LcwSwust 发表于 2025-8-11 17:16
看你的描述,ADC与DAC的频率是单独控制的,为啥要这样?
试一下在同一个定时中断里让DAC输出ADC采集的数 ...

ADC采集的数据要写入SD卡保存,写的时候要DMA中断,DAC从SD卡读出数据就没有中断了。问题就在这里,这个间隔如何加人DAC?
试一下在同一个定时中断里让DAC输出ADC采集的数,具体逻辑是什么?
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2025-6-13
在线时间
8 小时
 楼主| 发表于 3 天前 | 显示全部楼层
感谢大家,在大家贴子建议中,知道问题所在。
回复

使用道具 举报

13

主题

3429

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8765
金钱
8765
注册时间
2020-5-11
在线时间
4294 小时
发表于 前天 09:18 | 显示全部楼层
zhengdiandianzi 发表于 2025-8-11 19:54
ADC采集的数据要写入SD卡保存,写的时候要DMA中断,DAC从SD卡读出数据就没有中断了。问题就在这里,这个 ...

你这相当于是录音机加播放器的思路是吧,录音录完了再播放是吗?
我的意思相当于下面这段伪代码,DAC输出等于ADC输入:
int d;
while(1)
{
    d=ADC_GetConversionValue(ADC1);//ADC采集
    DAC_SetChannel1Data(DAC_Align_12b_R,d);//DAC输出
}
专治疑难杂症
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2025-6-13
在线时间
8 小时
 楼主| 发表于 前天 22:25 | 显示全部楼层
这个程序对音频编解码研究有作用,没实用价值,不是文件系统,必须用唯一的设备录放。当时录出音来,感到神奇与振奋。DMA从SD卡中读出一定量的数据并产生中断,给DAC输出,应该可以解决。暂没时间研究了。

感谢原子哥的教学,让想学单片机的人有了学习的途径。
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2025-6-13
在线时间
8 小时
 楼主| 发表于 前天 22:30 | 显示全部楼层
LcwSwust 发表于 2025-8-12 09:18
你这相当于是录音机加播放器的思路是吧,录音录完了再播放是吗?
我的意思相当于下面这段伪代码,DAC输 ...

这个程序对音频编解码研究有作用,没实用价值,不是文件系统,必须用唯一的设备录放。当时录出音来,感到神奇与振奋。启动DMA传输从SD卡中读出一定量的数据并产生DMA中断,给DAC输出,应该可以解决问题。暂没时间研究了。

谢谢大家,感谢原子哥的教学,让想学单片机的人有了学习的途径。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-14 01:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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