stm32 DMA介绍及使用

stm32 DMA介绍及使用

ID:38582602

大小:703.00 KB

页数:8页

时间:2019-06-15

stm32  DMA介绍及使用_第1页
stm32  DMA介绍及使用_第2页
stm32  DMA介绍及使用_第3页
stm32  DMA介绍及使用_第4页
stm32  DMA介绍及使用_第5页
资源描述:

《stm32 DMA介绍及使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、什么是STM32的DMA?其全称是:DirectMemoryAccess;根据ST公司提供的相关信息,DMA是STM32中一个独立与Cortex-M3内核的模块,有点类似与ADC、PWM、TIMER等模块;主要功能是通信“桥梁”的作用,可以将所有外设映射的寄存器“连接”起来,这样就可以高速问各寄存器,其传输不受CPU的支配,传输还是双向的。过程:怎样启用DMA?首先,众所周知的是初始化,任何设备启用前都要对其进行初始化,要对模块初始化,还要先了解该模块相应的结构及其函数,以便正确的设置;由于DMA较为

2、复杂,我就只谈谈DMA的基本结构和和常用函数,这些都是ST公司提供在库函数中的。1、下面代码是一个标准DMA设置,当然实际应用中可根据实际情况进行裁减:DMA_DeInit(DMA_Channel1);上面这句是给DMA配置通道,根据ST提供的资料,STM3210Fx中DMA包含7个通道(CH1~CH7),也就是说可以为外设或memory提供7座“桥梁”DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;上面语句中的DMA_InitStru

3、cture是一个DMA结构体,在库中有声明了,当然使用时就要先定义了;DMA_PeripheralBaseAddr是该结构体中一个数据成员,给DMA一个起始地址,好比是一个buffer起始地址,数据流程是:外设寄存器àDMA_PeripheralBaseAddàmemory中变量空间(或flash中数据空间等),ADC1_DR_Address是我定义的一个地址变量;DMA_InitStructure.DMA_MemoryBaseAddr=(u32)ADC_ConvertedValue;上面这句很显然是

4、DMA要连接在Memory中变量的地址,ADC_ConvertedValue是我自己在memory中定义的一个变量;DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;上面的这句是设置DMA的传输方向,就如前面我所说的,DMA可以双向传输,也可以单向传输,这里设置的是单向传输,如果需要双向传输:把DMA_DIR_PeripheralSRC改成DMA_DIR_PeripheralDST即可。DMA_InitStructure.DMA_BufferSize=2;

5、上面的这句是设置DMA在传输时缓冲区的长度,前面有定义过了buffer的起始地址:ADC1_DR_Address,为了安全性和可靠性,一般需要给buffer定义一个储存片区,这个参数的单位有三种类型:Byte、HalfWord、word,我设置的2个half-word(见下面的设置);32位的MCU中1个half-word占16bits。DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;上面的这句是设置DMA的外设递增模式,如果

6、DMA选用的通道(CHx)有多个外设连接,需要使用外设递增模式:DMA_PeripheralInc_Enable;我的例子里DMA只与ADC1建立了联系,所以选用DMA_PeripheralInc_DisableDMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;上面的这句是设置DMA的内存递增模式,DMA访问多个内存参数时,需要使用DMA_MemoryInc_Enable,当DMA只访问一个内存参数时,可设置成:DMA_MemoryInc_Dis

7、able。DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;上面的这句是设置DMA在访问时每次操作的数据长度。有三种数据长度类型,前面已经讲过了,这里不在叙述。DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;与上面雷同。在此不再说明。DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;上面

8、的这句是设置DMA的传输模式:连续不断的循环模式,若只想访问一次后就不要访问了(或按指令操作来反问,也就是想要它访问的时候就访问,不要它访问的时候就停止),可以设置成通用模式:DMA_Mode_NormalDMA_InitStructure.DMA_Priority=DMA_Priority_High;上面的这句是设置DMA的优先级别:可以分为4级:VeryHigh,High,Medium,Low.DMA_InitStructure.DMA_M2M=DM

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。