STM32_DMA标准初始化设置解释_第1页
STM32_DMA标准初始化设置解释_第2页
STM32_DMA标准初始化设置解释_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STM32_DMA标准初始化设置解释DMA全称是:DirectMemoryAccess;根据ST公司提供的相关信息,DMA是STM32中一个独立与Cortex-M3内核的模块,有点类似与ADC、PWM、TIMER等模块;主要功能是通信“桥梁”的作用,可以将所有外设映射的寄存器“连接”起来,这样就可以高速问各寄存器,其传输不受CPU的支配,传输还是双向的;例如,从表面上看,它可以将flash中的数据与储存器中变量建立通讯,还可以将一外设的积存器或缓冲器与另外设的寄存器或缓冲器建立双向通讯,有点像把外设硬件之间用导线连接在一起了。其间的通讯不占CPU资源,访问速度高,对于实时性强的应用将是一个很好

2、的选择。1、下面代码是一个标准DMA设置,当然实际应用中可根据实际情况进行裁减:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);开启时钟,否则初始化无效。DMA_Delnit(DMA_Channel1);上面这句是给DMA配置通道,根据ST提供的资料,STM3210Fx中DMA包含7个通道(CH1CH7),也就是说可以为外设或memory提供7座“桥梁”DMA_lnitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;DMA_PeripheralBaseAddr是DMA_InitStructure

3、结构体中一个数据成员,给DMA一个起始地址,好比是一个buffer起始地址,ADC1_DR_Address是我定义的一个地址变量;DMA_lnitStructure.DMA_MemoryBaseAddr=(u32)ADC_ConvertedValue;上面这句很显然是DMA要连接在Memory中变量的地址,ADC_ConvertedValue是我自己在memory中定义的一个变量地址;DMA_lnitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;上面的这句是设置DMA的传输方向,就如前面我所说的,DMA可以双向传输,也可以单向传输,这里设置的是单向传输,如果需

4、要双向传输:把DMA_DIR_PeripheralSRC改成DMA_DIR_PeripheralDST即可。DMA_lnitStructure.DMA_BufferSize=2;上面的这句是设置DMA在传输时缓冲区的长度,前面有定义过了buffer的起始地址:ADC1_DR_Address,为了安全性和可靠性,一般需要给buffer定义一个储存片区,这个参数的单位有三种类型:Byte、HalfWord、word,我设置的2个half-word(见下面的设置);32位的MCU中1个half-word占16bits。DMA_lnitStructure.DMA_Peripherallnc=DMA_P

5、eripherallnc_Disable;上面的这句是设置DMA的外设递增模式,如果DMA选用的通道(CHx)有多个外设连接,需要使用外设递增模式:DMA_Peripherallnc_Enable;我的例子里DMA只与ADC1建立了联系,所以选用DMA_PeripheralInc_DisableDMA_lnitStructure.DMA_Memorylnc=DMA_Memorylnc_Enable;上面的这句是设置DMA的内存递增模式,DMA访问多个内存参数时,需要使用DMA_Memorylnc_Enable,当DMA只访问一个内存参数时,可设置成:DMA_Memorylnc_Disable。

6、DMA_lnitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;上面的这句是设置DMA在访问时每次操作的数据长度。有三种数据长度类型,前面已经讲过了,这里不在叙述。DMA_lnitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;与上面雷同。在此不再说明。DMA_lnitStructure.DMA_Mode=DMA_Mode_Circular;上面的这句是设置DMA的传输模式:连续不断的循环模式,若只想访问一次后就不要访问了(或按指令操作来反问,也就

7、是想要它访问的时候就访问,不要它访问的时候就停止),可以设置成通用模式:DMA_Mode_NormalDMA_lnitStructure.DMA_Priority=DMA_Priority_High;上面的这句是设置DMA的优先级别:可以分为4级:VeryHigh,High,Medium,Low.DMA_lnitStructure.DMA_M2M=DMA_M2M_Disable;上面的这句是设置DMA的2个memory中的变量互相访问的DMA_lnit(DMA_Channel1,&DMA_lnitStructure);前面那些都是对DMA结构体成员的设置,在次再统一对DMA整个模块做一次初始化,使得DMA各成员与上面的参数一致。DMA_Cmd(DMA_Channel1,ENABLE);使能启动。要使DMA与外设建立有效连接,这不是DMA自身的事情,是各个外设的事情,每个外

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论