理论 
  
 
12个通道:DMA1(7)DMA2(5)

方向:存储器和存储器间(DMA_MEMORY_TO_MEMORY)、外设到存储器(DMA_PERIPH_TO_MEMORY)、存储器到外设(DMA_MEMORY_TO_PERIPH)
闪存、 SRAM、外设的SRAM、 APB1、 APB2和AHB外设均可作为访问的源和目标
数据宽度:字节(Byte 8)、半字(Half Word 16)、全字(Word 32)
可编程的数据传输数目: 0 ~ 65535
若可编程的数据传输数目为10,数据宽度为字节,半字,全字
 传输总数据大小:10字节,20字节,40字节
若传输总数据大小与实际传输不符,会让传输标志(__HAL_DMA_GET_FLAG) ≠ 0
 
 
   代码编写 
  
 
存储器和存储器间实验
 
 
   DMA配置 
  
 

串口初始化参考:链接
 
 
   Cube IDE代码 
  
 
main.c
/* USER CODE BEGIN PD */
#define BUFF_SIZE 100	//37行
/* USER CODE END PD */
/* USER CODE BEGIN PV */
uint8_t SRC_Buff[BUFF_SIZE];	//48行
uint8_t DEST_Buff[BUFF_SIZE];
/* USER CODE END PV */
for(int i = 0; i < BUFF_SIZE; i++)	//95行
  SRC_Buff[i] = i+2;
/*
* 参数1:指向 DMA_HandleTypeDef 结构的指针,该结构包含指向 DMA 通道的配置信息
* 参数2:源内存缓冲区地址
* 参数3:目标内存缓冲区地址,参数4:从源传输到目标的数据长度
*/
HAL_DMA_Start(&hdma_memtomem_dma1_channel1, (uint32_t)SRC_Buff, (uint32_t)DEST_Buff, BUFF_SIZE);
//while里,111行
hdma_memtomem_dma1_channel1.Instance->CNDTR = BUFF_SIZE;	//可编程的数据传输数目:CNDTR
__HAL_DMA_ENABLE(&hdma_memtomem_dma1_channel1);	//启用指定的 DMA 通道
while(__HAL_DMA_GET_FLAG(&hdma_memtomem_dma1_channel1, DMA_FLAG_TC1) == 0);	//判断是否传输完成
HAL_UART_Transmit(&huart1, DEST_Buff, BUFF_SIZE, 100);	//串口发送据
__HAL_DMA_CLEAR_FLAG(&hdma_memtomem_dma1_channel1, DMA_FLAG_TC1);	//清楚标志
__HAL_DMA_DISABLE(&hdma_memtomem_dma1_channel1);	//禁用指定的 DMA 通道
HAL_Delay(1000);



















