:::: MENU ::::

Примеры использования StdPeriph — DMA

В данной серии статей будут приведены примеры работы с периферией STM32L с помощью библиотеки, предоставляемой ST — StdPeriph. Перед использованием примеров не забывайте включать, соответствующие файлы библиотеки в проект.

DMA

void send_data_usart_1(const uint8_t *command, uint16_t len) 
{
        DMA_InitTypeDef DMA_InitStructure;

        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &(USART2->DR); 
        DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) command;
        
        // направление - периферия получатель
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
        
        DMA_InitStructure.DMA_BufferSize = len;
        
        // не инкрементируем память периферии и инкрементируем память МК 
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
        
        // размер данных в периферии и памяти МК
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;

        // режим - одинарный (не круговой)
        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
        
        DMA_InitStructure.DMA_Priority = DMA_Priority_Low;
        
        // это передача из памяти в периферию 
        // а не из памяти в память MTM - disable
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

        DMA_Init(DMA1_Channel7, &DMA_InitStructure);

        USART_DMACmd(USART2, USART_DMAReq_Tx, ENABLE);
        DMA_Cmd(DMA1_Channel7, ENABLE);
}  

DMA1

DMA2