【STM32】DMA数据转运(存储器到存储器)

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发

目录

DMA简介

DMA时钟使能

DMA初始化

转运起始和终止的地址

转运方向

 数据宽度

传输次数

转运触发方式

 转运模式

通道优先级 

DMA初始化框架 

选择开启DMA通道 

更改转运次数

DMA应用实例-存储器到存储器转运

DMA.h

DMA.c 

main.c 


DMA简介

  • DMA(Direct Memory Access)直接存储器存取 ,可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预。这使CPU可以去做其他复杂的事情。
  • 12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道)
  • 每个通道都支持软件触发和特定的硬件触发

STM32F103C8T6 DMA资源:DMA1(7个通道),具体DMA资源可以查看参考手册

 DMA框图

DMA时钟使能

已知DMA在AHB总线(如图)

由RCC时钟树知,应使能外部时钟 

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

DMA初始化

外设和存储器只是个名字,我们要确定数据从哪里来到哪里去,配置数据来源和去向的地址即可

 实现外设存储器,存储器到存储器,存储器到外设的转运

转运起始和终止的地址

闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标

    //地址均为32位

	//外设存储器的基地址
	DMA_InitStructure.DMA_PeripheralBaseAddr = AddrA;
	//外设存储器的指针自增使能(转运后将地址指向下一个数据)  Enable-自增  Dissable-不自增 
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;

	//存储器的基地址
	DMA_InitStructure.DMA_MemoryBaseAddr = AddrB;
	//存储器的指针自增使能(转运后将地址指向下一个),与外设存储器一样来理解
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

一次转运次数结束后,自增的指针也会回到最初的位置,以便下一次转运。

转运并不会把原有数据拿走,是复制了一份

在传输过程中,当开启通道(DMA_CCRx的EN=1)时,不能写更改地址。需关闭通道后再更改地址。

转运方向

DMA_DIR_PeripheralDST

peripheral: source

存储器到外设

DMA_DIR_PeripheralSRC

 peripheral : destination

外设到存储器

外设和存储器只是个名字而已,重要的是你填的地址 

	//转运方向:外设到存储器还是存储器到外设
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值