使用DMA(Direct Memory Access)
使用DMA可以减少CPU对SRAM的直接访问,提高数据传输效率。配置DMA传输外部SRAM的数据,避免CPU直接连续读操作导致的时序问题。
c
DMA_HandleTypeDef hdma;
__HAL_RCC_DMA2_CLK_ENABLE();
hdma.Instance = DMA2_Stream0;
hdma.Init.Channel = DMA_CHANNEL_0;
hdma.Init.Direction = DMA_MEMORY_TO_MEMORY;
hdma.Init.PeriphInc = DMA_PINC_ENABLE;
hdma.Init.MemInc = DMA_MINC_ENABLE;
hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
hdma.Init.Mode = DMA_NORMAL;
hdma.Init.Priority = DMA_PRIORITY_HIGH;
hdma.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
HAL_DMA_Init(&hdma);
HAL_DMA_Start(&hdma, (uint32_t)source_address, (uint32_t)destination_address, length);
HAL_DMA_PollForTransfer(&hdma, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY);
|