【问题标题】:If I disable DMAContinuousRequests, does the ADC automatically trigger a DMA request every time it finishes a conversion?如果我禁用 DMAContinuousRequests,ADC 是否会在每次完成转换时自动触发 DMA 请求?
【发布时间】:2021-06-20 03:46:43
【问题描述】:
  1. 如果我禁用 DMAContinuousRequests,ADC 是否会自动触发 DMA 每次完成转换时请求?
  2. 如果我启用 DMAContinousRequests,DMA 会怎样? 如果没有新的,则多次传输 adc 的样本 之间的转换?

手册是这么说的:

"[...] 此参数指定 DMA 请求是以单次模式执行(达到转换次数时 DMA 传输停止)还是以连续模式执行(DMA 传输不受限制,无论转换次数如何)。 "

我想做什么

我想查看输入中是否存在超过阈值的边。 如果我检测到一个,我想通过 DMA 以 Y 个样本/秒的采样率将下一个 X 样本保存到内存中。

(例如:X = 64 和 Y = 10k)

我的想法

  1. 设置模拟看门狗
  2. 当超过阈值时,使用回调将 ADC 设置为 DMA 模式并使用计时器触发它(禁用连续转换模式和禁用 DMAContinousRequests)
  3. X 次采样后切换回看门狗模式(DMA 缓冲区已满)

回到问题

我的连续转换模式和 DMA 连续请求设置是否正确?

【问题讨论】:

    标签: stm32 dma adc nucleo


    【解决方案1】:

    连续模式意味着它在转换每个启用的通道后,再次从第一个通道开始,而不是停止。

    无论哪种方式,都要求 DMA 仅在数据准备好时才传输数据。

    [编辑新问题]

    当我阅读手册时,ADC 只有两种 DMA 模式:在连续模式下它将永远存在。在非连续情况下,它只会将每个启用的通道转换一次。

    如果您想多次读取同一通道,但不是永远读取,则需要先启用连续 DMA 模式,然后在以后的某个时间将其关闭。可能 DMA 完成中断将适用于此。

    【讨论】:

    • 我试图编辑帖子以澄清我的问题。如果我理解手册并且您的回答正确,则仅当我将 ADC 设置为连续进行多次转换时,DMAContinousRequests 才有意义。但是如果我单独触发每个转换,我不应该需要它,但它也不会造成任何伤害。对吗?
    猜你喜欢
    • 2015-05-07
    • 2012-01-29
    • 2020-11-04
    • 2013-02-08
    • 2020-11-19
    • 2012-01-17
    • 1970-01-01
    • 2011-04-13
    相关资源
    最近更新 更多