- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
STM32DMA标准初始化设置解释
STM32_DMA 标准初始化设置解释
DMA 全称是:Direct Memory Access;根据ST 公司提供的相关信息,DMA 是STM32 中
一个独立与Cortex-M3 内核的模块,有点类似与ADC 、PWM、TIMER 等模块;主要功能是通
信“桥梁”的作用,可以将所有外设映射的寄存器“连接”起来,这样就可以高速问各寄存器,
其传输不受CPU 的支配,传输还是双向的;例如,从“表面”上看,它可以将flash 中的数据
与储存器中变量建立通讯,还可以将一外设的积存器或缓冲器与另外设的寄存器或缓冲器建
立双向通讯,有点像把外设硬件之间用“导线”连接在一起了。其间的通讯不占CPU 资源,访
问速度高,对于实时性强的应用将是一个很好的选择。
1、 下面代码是一个标准DMA 设置,当然实际应用中可根据实际情况进行裁减:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
开启时钟,否则初始化无效。
DMA_DeInit(DMA_Channel1);
上面这句是给 DMA 配置通道,根据 ST 提供的资料,STM3210Fx 中 DMA 包含 7 个通道
(CH1~CH7 ),也就是说可以为外设或memory 提供7 座“桥梁”;
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_PeripheralBaseAddr 是DMA_InitStructure 结构体中一个数据成员,给DMA 一个起始地
址,好比是一个buffer 起始地址,ADC1_DR_Address 是我定义的一个地址变量;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_ConvertedValue;
上面这句很显然是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;
上面的这句是设置 DMA 在传输时缓冲区的长度,前面有定义过了 buffer 的起始地址:
ADC1_DR_Address ,为了安全性和可靠性,一般需要给 buffer 定义一个储存片区,这个参
数的单位有三种类型:Byte、HalfWord、word ,我设置的2 个half-word(见下面的设置);32
位的MCU 中1 个half-word 占16 bits。
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
上面的这句是设置 DMA 的外设递增模式,如果DMA 选用的通道(CHx )有多个外设连接,
需要使用外设递增模式:DMA_PeripheralInc_Enable;我的例子里DMA 只与ADC1 建立了联系,
所以选用DMA_PeripheralInc_Disable
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
上面的这句是设置 DMA 的内存递增模式,DMA 访问多个内存参数时,需要使用
DMA_MemoryInc_Enable ,当 DMA 只访问一 个内存参数时,可设置成:
DMA_MemoryInc_Disable。
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
上面的这句是设置DMA 在访问时每次操作的数据长度。有三种数据长度类型,前面已经讲
过了,这里不在叙述。
DMA_InitStructure.DMA_MemoryDataSize = DMA_M
文档评论(0)