我正在编程 stm32f2xx 的 DAC 外设。我有一个字节数组(声音),我想生成采样率 = 8K 的信号。
现在我的问题是:如何指定采样率?
注意:我google了很多。我只使用 DMA 生成三角波和正弦波。我不想使用 DMA。
在此先感谢您的帮助...问候,
我正在编程 stm32f2xx 的 DAC 外设。我有一个字节数组(声音),我想生成采样率 = 8K 的信号。
现在我的问题是:如何指定采样率?
注意:我google了很多。我只使用 DMA 生成三角波和正弦波。我不想使用 DMA。
在此先感谢您的帮助...问候,
在不使用 DMA 的情况下从 DAC 中播放波形是不切实际的。您使用样本设置 DMA,并设置 DAC 以使用定时器作为触发器。然后你设置你的定时器以你想要的采样率触发。
我同意 TJD 的观点,一般来说,如果没有 DMA,这样做是不切实际的,但这并非不可能,尤其是在低采样率的情况下。
可以使用设置为每 1/8000 秒触发一次的计时器作为固定时基。从那里,中断例程需要将下一个样本加载到 DAC 中。可以通过改变定时器的时基来改变采样率。
与编写代码以将正确的样本移入缓冲区相比,编写代码来配置 DMA 控制器的工作类似。但是,DMA 方法会更可靠,采样率的抖动可能更小,并且可以释放内核来执行可能需要的其他代码。事实上,通过 TIM/DMA/DAC 设置,您可能能够停止内核或进入保持外设时钟运行的睡眠模式。
是的,我也同意 TJD。
使用 DMA 是有效的,并且可以为其他任务释放 CPU [good]。
在软件中管理时间(带有繁忙循环的核心)[坏] 不会产生好的结果。(所以,使用计时器来计时[好])。
现在要进行复制,您必须在特定时间间隔(从繁忙循环或定时器超时)到 DAC 寄存器后专门使用 CPU 进行复制。[坏]
最后我建议,连接 DMA 和定时器,超时时,DMA 会将数据复制到 DAC 寄存器 [good]。这个解决方案看起来很难,但实际上在设置时更容易使用。
[注:写在某人试图理解/开始这样的事情的观点中]