我在CubeMX中启用了DMA外设对ADC1的内存传输,并生成了代码。然而,我对ADC中的数据将写入何处感到困惑?我应该显式定义一个变量来包含这个数据吗?如何检索DMA通道1 ISR中的数据?
发布于 2019-03-08 20:38:05
DMA既不管理内存,也不选择有效地址来设置数据。一般而言,DMA允许在不使用CPU的情况下进行数据传输,但不会更多。
STM32微控制器提供以下传输:
在所有这些配置中,开发人员必须了解它们的用途,以便配置(除DMA之外)源位置和目标位置,例如外围设备的地址、保留内存(以及哪种内存)等。
在您的特定情况下(检查RM、AN、docs等),模数转换器到存储器(外设到存储器)传输中的主要因素是:
DMA源: ADC外设,开发人员必须知道ADC外设的位置,并根据ADC参数配置(除ADC外)作为information.
发布于 2019-03-08 22:59:44
您指示HAL DMA ADC驱动程序在开始转换时将样本数据放在何处:
volatile uint32_t adcBuffer[SAMPLE_COUNT];
HAL_ADC_Start_DMA( &hadc,
adcBuffer,
SAMPLE_COUNT ); 请注意,一些STM32部件将静态随机存储器划分为多条总线,其中一条总线的部分比其他总线小得多。将此部分保留给DMA缓冲区具有性能优势,因为它减少了与正常软件数据获取的总线争用。因此,您可能希望定制您的链接器脚本以创建节,并显式地将DMA缓冲区放入其中,同时排除应用程序数据在其中的放置。
发布于 2019-03-08 20:14:08
如果你看过HAL文档和例子,你会发现一个如何使用DMA的ADC的例子。
简而言之:
要开始转换,可以使用以下函数:
HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);其中pData是你的变量/数组,它应该把数据放在那里。
https://stackoverflow.com/questions/55058248
复制相似问题