STM32中的DMA控制器的使用
想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。对于大容量的STM32芯片有2个DMA控制器,其中一个控制器有7个通道,另一个控制器2有5个通道
通道的配置过程:
1.首先设置CPARx寄存器和CMARx寄存器。
通过DMA控制器把一个地址的值复制到另外一个地址,通过DMA控制器自动开启一条通道完成。
CPARx寄存器存放的是外设的地址
CMARx寄存器存储的是存储器的地址
2.设置数据传输方向,是否循环模式,是不是开启外设和存储器的增量模式,还有数据宽度,是8位,16位还是32位。比如设置成存储器的地址增量,那么传输一个数据过去后它的地址自动递增。
3.设置要传输的数据量
4.设置通道的优先级
5.全部设置好后就可以启动DMA通道。
启动后数据就开始传输,传输的过程中可以读CNDTRx寄存器,这个寄存器是告诉我们还有多少个数据需要传输。数据传输到一半或全部传输完毕后有响应的标志位置1,如果开启了中断,可以进入相应的中断程序。
一。常用的DMA函数
1.DMA初始化函数
void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx); //设置要开启的通道,还有一些参数,包括外设基地址,存储器基地址,传输的数据量,增量模式,数据宽度等。
2.DMA使能函数
void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);
3.开启相应中断的函数
v