Перейти к содержимому

#40. STM32 DMA Архитектура

STM32 имеет два периферийных устройств DMA, каждая из которых имеет несколько независимо настраиваемых «каналов» (7 для DMA1 и 5 для DMA2). Канал — это примерно аппаратная реализация транзакции. Для инициализации DMA между периферийным устройством и памятью необходимо настроить соответствующий канал. Например, канал 2 (3) DMA1 может использоваться для приема (передачи) данных из (в) SPI1.

Прежде чем использовать периферийные устройства DMA, не забудьте включить их часы
! Например,

RCC_AHBPeriphClockCmd ( RCC_AHBPeriph_DMA1 , ENABLE);+

Настройка канала состоит из установки соответствующих параметров через структуру DMA_InitTypeDef:

typedef struct
{
uint32_t DMA_PeripheralBaseAddr
uint32_t DMA_MemoryBaseAddr;
uint32_t DMA_DIR;
uint32_t DMA_BufferSize;
uint32_t DMA_PeripheralInc;
uint32_t DMA_MemoryInc;
uint32_t DMA_PeripheralDataSize;
uint32_t DMA_MemoryDataSize;
uint32_t DMA_Mode;
uint32_t DMA_Priority;
uint32_t DMA_M2M;
} DMA_InitTypeDef;

Параметры включают в себя периферийный базовый адрес (например, SPI1-> DR), буфер адреса памяти, направление передачи, размер буфера и т.д. Как только канал DMA инициализирован, он должен быть включен. Микропрограмма STM32 предоставляет специальные периферийные команды для включения транзакции DMA. Следующий фрагмент кода иллюстрирует это для передачи данных через SPI с использованием DMA.

DMA_Init(txChan , & DMA_InitStructure );
DMA_Cmd(txChan , ENABLE);
SPI_I2S_DMACmd (SPIx , SPI_I2S_DMAReq_Tx , ENABLE);

Несколько каналов DMA могут быть инициализированы одновременно. Действительно, для SPI естественная конфигурация использует DMA для передачи и приема одновременно. Завершение запроса DMA обнаруживается с помощью соответствующего флага. Мы рассмотрим это далее.

Каждый из каналов DMA, предоставляемых STM32, связан с определенными периферийными устройствами. Например, канал 1 DMA1 поддерживает ADC1, TIM2_CH3 и TIM4_CH1. При разработке системы с использованием STM32 важно учитывать потенциальные конфликты ресурсов. Например, DAC_Channel1 (цифровой аналоговый преобразователь) требует доступа к каналу 3 DMA1, который также используется для SPI1_TX. Таким образом, невозможно одновременно передавать по SPI1 и выводить по DAC_Channel1 с использованием DMA.

Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x