一. 对于大容量的STM32芯片有2个DMA控制器,控制器1有7个通道,控制器2有5个通道
每个通道都可以配置一些外设的地址。
![v2-02ece89d98e790c7c4facd29ae8ae429_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f9a724a6-022f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-02ece89d98e790c7c4facd29ae8ae429_b.jpg)
![v2-9262545aa85826c0bf448e7fae282b67_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f9a724a6-022f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-9262545aa85826c0bf448e7fae282b67_b.jpg)
二. 通道的配置过程:
![v2-32d1a5fbbb3cfcad9705b3340f09e4a0_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f9a724a6-022f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-32d1a5fbbb3cfcad9705b3340f09e4a0_b.jpg)
1. 首先设置CPARx寄存器和CMARx寄存器。
通过DMA控制器把一个地址的值复制到另外一个地址,通过DMA控制器自动开启一条通道完成。
CPARx寄存器存放的是外设的地址
CMARx寄存器存储的是存储器的地址
2. 设置数据传输方向,是否循环模式,是不是开启外设和存储器的增量模式,还有数据宽度,是8位,16位还是32位。
比如设置成存储器的地址增量,那么传输一个数据过去后它的地址自动递增。
3. 设置要传输的数据量
4. 设置通道的优先级
5. 全部设置好后就可以启动DMA通道。
启动后数据就开始传输,传输的过程中可以读CNDTRx寄存器,可知道当前还剩多少个数据。数据传输到一半或全部传输完毕后有响应的标志位置1,如果开启了中断,可以进入相应的中断程序。
一。常用的DMA函