本帖最后由 sjtitr 于 2014-2-16 16:45 编辑
首先,回顾一下先行构想贴……
晒设计方案+吊丝生活之用STM32F429i听音乐
抱着呵呵的态度,先检查了下相关内容,恕我才疏学浅,构想贴中有些想法是错误的。
可以确定,DMA配合了Timer,完全可以按照自己设想的频率进行数据传送。只不过,很可惜的是,DMA支持的数据长度好像不足以播放楼主提供的这段歌曲,那么,我也懒得设计流程控制了,所以干脆就用SysTick直接来控制DAC变化的频率吧。
所以最终设计方案:DAC将8bit数据转为模拟信号,SysTick以8KHz速度来将数据送往DAC,这一下,就简单啦。
DAC的初始化和使用,我就不详细介绍啦,示例里面很具体的。我只是增加了一个SysTck中要调用的函数——
void timer(void)
{
TIM4->CCR1 = TOUT_Array[t_index];
DAC_SetChannel1Data(DAC_Align_8b_R, TOUT_Array[t_index]);
t_index++;
if(t_index >= 1573664)
{
t_index = 0;
}
}
可以看到其中内容就是将数据区的字节顺序地送给DAC,我的音乐很大呢,要1573664个字节,无论如何我也不想每次都烧写到Flash里啦,所以这里参考我的上一篇文章:
晒设计方案+马里奥大叔还可以在SDRAM里跑!
哦对了,我把8KHz8bit的Wav文件直接导出为数组放在里面了,实际播放的话,前面会有一段垃圾,体现出来就是噪音,但是数据很少,所以很短很短
我使用了DAC1,所以最后只要把耳机串在PA4和GND之间就可以了。我比较懒,所以只是矬矬地这样连了一下
本来想这个可以录个视频看看,可是从耳机传出的声音好小啊……嗯,没错,楼主木有有源功放。于是视频计划又失败啦。
好了,就这样吧。像从前一样,最后是我调试好的工程,需要注意的是,这个工程是直接在SDRAM中调试的,不可以Download,大家猜猜看里面播放的是什么歌曲?
F4_Music.zip
(3.51 MB, 下载次数: 113)
(7z压缩,体积更小)
补充一句,个人觉得,声音虽然小,音质还不错呢。