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