DAC信号发生器stm32

时间:2012-08-02 14:06:58

标签: c microcontroller stm32

我正在编程stm32f2xx的DAC外设。我有一个字节数组(声音)&我想生成采样率= 8K的信号。

现在我的问题是: 如何指定采样率?

注意: 我用Google搜索了很多。我只使用DMA获得trangle wave generation和正弦波生成。我不想使用DMA。

先谢谢你的帮助...... 的问候,

3 个答案:

答案 0 :(得分:4)

在不使用DMA的情况下从DAC播放波形是不切实际的。您可以使用样本设置DMA,并将DAC设置为使用定时器作为触发器。然后将您的计时器设置为以您想要的采样率触发。

答案 1 :(得分:2)

我同意TJD的观点,一般来说,没有DMA这样做是不切实际的,但这并非不可能,特别是在低采样率下。

可以使用定时器设置来触发每1/8000秒作为固定时基。从那里,中断程序需要将下一个采样加载到DAC中。可以通过改变计时器的时基来改变采样率。

与编写代码以将正确的样本移动到缓冲区相比,编写配置DMA控制器的代码也是类似的努力。但是,DMA方法更可靠,可能在采样率方面具有更少的抖动,并释放内核以执行可能需要的其他代码。实际上,通过TIM / DMA / DAC设置,您可以暂停内核或进入保持外设时钟运行的睡眠模式。

答案 2 :(得分:0)

是的,我同意TJD 使用DMA是有效的,并且为其他任务释放CPU [good] 管理软件中的时序(繁忙循环核心)[不好]不会产生好的结果。 (所以,使用计时器来计时[好]) 现在要进行复制,你必须在特定的时间间隔(从繁忙循环或定时器超时)到DAC寄存器之后专门用CPU进行复制。[bad]

最后我建议连接DMA和定时器,并在超时时,DMA将数据复制到DAC寄存器[good]。这个解决方案只是看起来很难,但在设置时实际上更容易使用。
[注意:写在pov中的人试图理解/开始这样的事情]