DMA не управляет памятью и не выбирает действительный адрес для установки данных. Вообще говоря, DMA позволяет передавать данные без использования ЦП, но не более.
Микроконтроллеры STM32 обеспечивают передачу из:
- память в память
- память на периферию
- периферия к памяти
Во всех из них разработчики должны знать о своей цели, чтобы настроить (помимо DMA) источник и места назначения, такие как адрес периферийных устройств, резервная память (и какой тип памяти) и т. Д. .
В вашем конкретном случае (отметьте RM , AN , docs и т. Д.), Главные акторы в АЦП переносятся в память (периферийное устройство в память) являются:
- Источник: периферийное устройство АЦП, разработчик должен знать, где находится периферийное устройство АЦП, и настроить (кроме АЦП) DMA на основе параметров АЦП в качестве источника информации.
- Назначение: память, разработчик должен зарезервировать кучу памяти (heap / stack / global / etc) и настроить DMA в соответствии с уже выделенным пространством памяти. Таким образом, DMA позволит вам устанавливать значения различными способами (в зависимости от устройства), такими как непрерывный кольцевой буфер, один цикл, буфер пинг-понга (stm32 использует термин «круговой двойной буфер») и т. Д.
- Конфигурация DMA и ADC: существует огромное количество факторов, которые ради простоты я не собираюсь включать, обычно упрощенных HAL производителя (это зависит от вас, чтобы использовать его).