我为 CubeMX 中的 ADC1 启用了 DMA 外设到内存的传输并生成了代码。但是,我对 ADC 的数据将写入何处感到困惑?我应该明确定义一个变量来包含这些数据吗?如何检索 DMA channel 1 ISR 中的数据?
最佳答案
DMA 不管理内存,也不选择有效地址来设置数据。一般来说,DMA 允许在不使用 CPU 的情况下进行数据传输,但仅此而已。
STM32 微 Controller 提供来自以下方面的传输:
- 内存到内存
- 外设内存
- 外设到内存
在所有这些中,开发人员必须了解它们的目的,以便配置(除了 DMA 之外)源和目标位置,例如外围设备的地址,保留内存(以及什么样的内存)等.
在您的特定情况下(检查 RM 、 AN 、 docs 等),ADC 到内存(外设到内存)传输的主要参与者是:
- 来源:ADC 外设,开发人员必须知道 ADC 外设的位置,并根据作为信息源的 ADC 参数配置(除了 ADC 之外)DMA。
- Destination:内存,开发者必须预留一堆内存(heap/stack/global/etc),并根据已经分配的内存空间配置DMA。这样做,DMA 将允许您以不同的方式设置值(取决于设备),例如连续环形缓冲区、一个循环、乒乓缓冲区(stm32 使用术语“循环双缓冲区”)等。<
- DMA 和 ADC 配置:为了简单起见,我不打算包括大量因素,通常由制造商的 HAL 简化(使用它取决于您)。
关于c - DMA在STM32的什么地方存放ADC的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55058248/