Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2753
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

9. Управление DMA

Каждое встроенное приложение должно обмениваться данными с внешним миром или управлять внешними периферийными устройствами. Например, наш микроконтроллер может обмениваться сообщениями с другими модулями на печатной плате, используя UART, или он может хранить данные во внешней Flash-памяти, используя один из доступных интерфейсов SPI. Все это включает в себя передачу определенного объема данных между внутреннего SRAM или Flash-памятью и периферийными регистрами, и для выполнения передачи требуется определенное количество тактовых циклов ЦПУ. Это приводит к потере вычислительной мощности (процессор занят процессом передачи), к снижению общей производительности и, в конечном итоге, к потере важных асинхронных событий.

Контроллер прямого доступа к памяти (Direct Memory Access, DMA) – это специализированный и программируемый аппаратный модуль, позволяющий периферийным устройствам микроконтроллера получать доступ к внутренней памяти без вмешательства ядра Cortex-M. ЦПУ полностью освобождается от накладных расходов (или, как говорят, от «оверхеда», overhead), порождаемых передачей данных (за исключением накладных расходов, связанных с конфигурацией DMA), благодаря чему он может выполнять другие действия параллельно1. DMA спроектирован так, чтобы работать обоими способами (то есть позволяет передавать данные из памяти в периферийные устройства и наоборот), при этом все микроконтроллеры STM32 предоставляют как минимум один контроллер DMA, но большинство из них имеют два независимых контроллера DMA.

DMA является «продвинутой» функцией современных микроконтроллеров, и начинающие пользователи склонны считать ее слишком сложной в использовании. Вместо этого, концепции, лежащие в основе DMA, действительно просты, и как только вы их поймете, будет довольно легко их использовать. Более того, хорошая новость заключается в том, что CubeHAL предназначен для абстрагирования от большинства этапов конфигурации DMA для используемого периферийного устройства, оставляя пользователю ответственность за предоставление лишь нескольких базовых конфигураций.

Данная глава познакомит вас с основными понятиями, касающимися использования DMA, и предоставит обзор характеристик DMA во всех семействах STM32. Как обычно, эта глава не ставит целью быть исчерпывающей и не заменяет официальную документацию от ST2, которую полезно иметь в качестве справочной информации при чтении

1Это не совсем так, как мы увидим дальше. Но здесь это допустимо, чтобы считать данное предложение верным.

2ST предоставляет посвященное DMA руководство по применению для каждого семейства STM32. Напри-

мер, AN4104 (http://www.st.com/web/en/resource/technical/document/application_note/DM00053400.pdf) гово-

рит о контроллере DMA микроконтроллеров STM32F0. Любопытно, что большинство из них слишком «загадочны» и не имеют примеров и изображений для более наглядного объяснения того, как работает DMA.

Напротив, AN4031 (http://www.st.com/web/en/resource/technical/document/application_note/DM00046011.pdf),

касающийся контроллера DMA микроконтроллеров STM32F2/F4, является наиболее полным, четким и хорошо организованным документом по DMA от ST, несмотря на то что DMA в этих семействах отличается от других семейств STM32 (кроме последнего STM32F7, который имеет тот же контроллер DMA, доступный в микроконтроллерах F2/F4), поэтому настоятельно рекомендуется взглянуть на данный документ, даже если вы не работаете с этими семействами STM32.