DMA和uC对变量一无所知。 DMA外设有两个配置寄存器,用于存储外设地址和存储器地址。如果你从阅读uC文档而不是HAL开始,一切都会立即显现
您指示HAL DMA ADC驱动程序在开始转换时将样本数据放在何处:
volatile uint32_t adcBuffer[SAMPLE_COUNT]; HAL_ADC_Start_DMA( &hadc, adcBuffer, SAMPLE_COUNT );
请注意,某些STM32部件的SRAM分为多个总线,其中一个部分比其他部分小得多。在为DMA缓冲区保留此部分时,可以获得性能优势,因为它可以减少正常软件数据提取时的总线争用。因此,您可能希望自定义链接描述文件以创建节,并将DMA缓冲区显式放在一个,同时排除应用程序数据的位置。
如果您查看HAL文档和示例,可以获得如何将ADC与DMA配合使用的示例。
简而言之 :
要开始转换,请使用以下函数:
HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);
其中pData是你的变量/数组,其中DMA应该放置数据。