【问题标题】: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]。这个解决方案看起来很难,但实际上在设置时更容易使用。
      [注:写在某人试图理解/开始这样的事情的观点中]

      【讨论】:

        猜你喜欢
        • 2021-08-17
        • 2020-04-11
        • 2021-06-16
        • 1970-01-01
        • 2021-07-03
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 2019-07-09
        相关资源
        最近更新 更多