一、DMA简介
DMA全程Direct Memory Access,即直接存储器访问;传输数据从一个地址空间复制到另一个地址空间,CPU只初始化这个传输动作,传输动作本身由DMA控制器完成,无需经过CPU控制,使CPU效率大大提高。STM32最多由2个DMA,DMA2仅存在于大容量芯片,DMA1有7个通道,DMA2有5个通道。DMA具有4个优先级:分别是最高、高、中等、低。仲裁器根据优先级来启动DAM。它可以实现外设到存储器、存储器到外设、存储器到存储器的传输。传输数据宽度分为字节(8bit),半字(16bit),字(32bit);传输源与传输目标的数据宽度应一致,不一致可能导致数据丢失,详情可查阅STM32中文参考手册表57:可编程的数据传输宽度和大小端操作。每个通道有三个事件标志(DMA半传输、传输完成、传输出错),并有相应的中断请求。可编程的数据传输数目最大为65535。
二、库函数配置
1)使能DMA时钟,DMAx恢复默认值;
2)初始化DMAx;DMA1_MEM_LEN是为了保存数据长度;
3)使能DMA;将模式设置成normal(一次传输);传输完成需再次传输时,需要向DMA的传输数量寄存器CNDTR重新写入要传的字节数;即上面保存的数据长度DMA1MEM_LEN;但在写入前要关闭DMA,写入后再打开;
4)主函数在使能DMA前,要使能串口1DAM的发送;
三、调试结果
通过按键0将数组SendBuff,传输至串口的发送寄存器;