Применение функции DMA2D с платой STM32H563 Nucleo

Содержание

DMA 2D transfer result

Эта статья направлена на представление применения режима DMA2D с помощью платы разработчика STM32H563. Так называемый режим DMA 2D означает, что DMA может динамически настраивать режим адресации и возможности DMA, заранее устанавливая смещение адресации внутри блока и смещение адресации блока. Другими словами, когда DMA выполняет передачу данных, внутриблочная адресация больше не всегда фиксирована для соседнего хранения, а интервал адресов для доступа к данным во время двух соседних передач может быть определен программированием. Для повторяющихся блочных передач больше не требуется каждый раз начинать с той же позиции, а начальный адрес новой передачи может быть скорректирован в соответствии со смещением адреса блока.

Принцип передачи DMA 2D

Предположим, что для одного и того же запроса DMA инициированы три передачи, соответствующие трем блокам передачи DMA.

DMA transfer block
DMA transfer block

Как показано на рисунке выше, 5 фрагментов данных, отмеченных красным цветом [то есть первый блок], передаются в первый раз, и доступ к данным осуществляется в соответствии с рисунком. Второй и третий раз также аналогичны первому, и передаются соответственно 5 зеленых фрагментов данных [то есть второй блок] и 5 синих фрагментов данных [то есть третий блок]. Очевидно, что правила доступа к данным в каждом блоке передачи одинаковы, с двумя пространствами хранения, разделенными двумя. В то же время, когда вторая передача запускается после завершения первой передачи, или третья передача запускается после завершения второй передачи, начальный адрес сбрасывается на 14 адресных пространств от текущей позиции перед запуском.

Как использовать функцию DMA 2D?

В этом примере мы используем плату STM32H563ZI Nucleo. USART3 чипа необходимо подключить к VCP встроенного STLINK. Используйте помощник отладки последовательного порта на ПК, чтобы распределить три набора данных по частям в MCU, содержание которых составляет 5 символов R, 5 символов G и 5 символов B. Включите функцию DMA 2D, полученную USART3. 

Кстати, напоминаем, что не все каналы GPDMA серии STM32H5 поддерживают функцию адресации DMA 2D. Поддерживает ли канал DMA функцию 2D, четко указано в интерфейсе конфигурации CubeMx. Если вы используете конфигурацию CubeMx, вы можете выбрать соответствующие слова. Здесь я выбираю DMA CH6 GPDMA1, который поддерживает функцию DMA 2D.

Базовая конфигурация для использования STM32CubeMX выглядит следующим образом:

Basic configuration of STM32CubeMx
Basic configuration of STM32CubeMx

Основное внимание в нашей конфигурации уделяется 2D-адресации, подробности приведены ниже:

Сейчас USART3DMA принимает данные, очевидно, что адрес источника фиксирован, то есть регистр приема данных USART3, поэтому смещение, связанное с адресом источника, здесь равно 0. Адрес назначения доступа DMA — это память, которая является переменной. Каждый раз, когда один фрагмент данных сохраняется в блоке, он сдвигается вперед на две позиции, что соответствует значению смещения адреса назначения ниже. Когда после завершения передачи каждого блока начинается следующий раунд передачи, начальный адрес находится ровно на 14 позиций назад, что соответствует следующему значению смещения адреса назначения блока, где назад — отрицательное значение, а вперед — положительное. Здесь повторяется в общей сложности 3 передачи блоков, что соответствует значению счетчика повторений ниже.

2D addressing configuration
2D addressing configuration

Фактически, после 3 циклов повторной передачи блока DMA полученные данные выглядят как схема, обозначенная стрелкой на рисунке ниже.

DMA 2D transfer result
DMA 2D transfer result

Используйте STM32CubeMx для завершения настройки, добавьте пользовательский код для отладки и проверки. Пользовательский код, который необходимо добавить вручную, состоит в основном из следующих двух строк:

				
					__HAL_LINKDMA(&huart3, hdmarx, handle_GPDMA1_Channel6);

HAL_UART_Receive_DMA(&huart3,(uint8_t *)aRxBuffer, 5); //Receive 5 data per block
				
			

На следующем рисунке представлены результаты отладки. Посредством трех независимых DMA-приёмов данные регулярно сохраняются в порядке RGB.

Result of DMA data transfer
Result of DMA data transfer

Подписаться

Присоединяйтесь к нашему списку подписчиков, чтобы получать ежемесячные обновления блога, новости о технологиях, практические примеры. Мы никогда не будем рассылать спам, и вы можете отказаться от подписки в любое время.

Об авторе

Picture of Aidan Taylor
Aidan Taylor

I am Aidan Taylor and I have over 10 years of experience in the field of PCB Reverse Engineering, PCB design and IC Unlock.

Поделиться

Рекомендуемый пост

Нужна помощь?

Прокрутить вверх

Instant Quote