STM32中DMA将ADC值存储在哪里?

six*_*ter 2 c embedded arm stm32 dma

我在 CubeMX 中为 ADC1 启用了 DMA 外设到内存传输并生成了代码。但是,我对来自 ADC 的数据将写入何处感到困惑?我应该明确定义一个变量来包含这些数据吗?如何检索 DMA 通道 1 ISR 中的数据?

Jos*_*ose 5

DMA 不管理内存,也不选择有效地址来设置数据。一般而言,DMA 允许在不使用 CPU 的情况下进行数据传输,但仅此而已。


STM32 微控制器提供以下传输:

  • 记忆到记忆
  • 内存到外围设备
  • 记忆外围

在所有这些中,开发人员必须了解它们的用途,以便配置(除了 DMA)源和目标位置,例如外设的地址、保留内存(以及哪种内存)等。


在您的特定情况下(检查RMANdocs等),ADC 到内存(外设到内存)传输中的主要参与者是:

  • 来源:ADC外设,开发者必须知道ADC外设的位置,并根据ADC参数作为信息源配置(除ADC外)DMA。
  • Destination:内存,开发者要预留一堆内存(heap/stack/global/etc),并根据已经分配的内存空间配置DMA。这样做,DMA 将允许您以不同的方式设置值(取决于设备),例如连续环形缓冲区、一个循环、乒乓缓冲区(stm32 使用术语“循环双缓冲区”)等。
  • DMA 和 ADC 配置:有很多因素为了简单起见我不会包括在内,通常由制造商的 HAL 简化(由您决定使用它)。