慧聪芯城 | 慧聪智能硬件网 | 慧聪新能源网 | 慧聪LED网 | 慧聪电气网 | 慧聪电源网 | 慧聪IT网 | 慧聪变频器网
特惠新品微信
投稿
热门推荐:传感器专栏 | 半导体专栏 | 晶振专栏 | 热门展会 | CES 2018 | 2017中国行业资讯大全 | 买芯片 采购 | 2017年活动回顾 | 中国电子展 | 2017品牌盛会TOP10榜单

慧聪电子网首页 > 技术文章 > 设计与技术 > 集成电路(IC)设计 > 正文

分享到

一文了解STM32使用DMA模块的相关操作

http://www.ec.hc360.com2018年02月27日14:45 来源:MCU开发加油站 T|T

    DMA(DirectMemoryAccess)常译为“存储器直接存取”。早在Intel的8086平台上就有了DMA应用了。

    一个完整的微控制器通常由CPU,存储器和外设等组件构成。这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由CPU完成。如此一来,CPU作为整个芯片的核心,其处理的工作量是很大的。如果CPU先从甲外设拿到一个数据送给乙外设使用,同时ç外设又需要d外设提供一个数据。这样的数据搬运工作将使CPU的负荷显得相当繁重。

    

    严格的说,搬运数据只是CPU的比较不重要的一种工作.CPU最重要的工作室进行数据运算,从加减乘除到一些高级的运算,包括浮点,积分,微分,FFT等.CPU还需要负责复杂的中断申请和响应,以保证芯片的实时性能。

    理论上常见的控制外设,比如USART,I2C,SPI甚至是USB等通信接口,单纯的利用CPU进行协议模拟也是可以实现的,比如51单片机经常使用I/O口模拟I2C协议通信。但这样既浪费了CPU的资源,同时实现后的性能表现往往和使用专门的硬件模块实现的效果相差甚远。从这个角度来看,各个外设控制器的存在,无疑降低了CPU的负担,解放了CPU的资源。

    数据搬运这一工作占用了大部分的CPU资源,成为了降低CPU的工作效率的主要原因之一。于是需要一种硬件结构分担CPU这一职能-DMA。

    从数据搬运的角度看,如果要把存储地址甲的数值赋给另外一个地址上乙的变量,CPU实现过程为首先读出甲地址上的数据存储在一个中间变量,然后再转送到乙地址的变量上。使用DMA则不需要中间变量,直接将甲地址的数值传送到乙地址的变量里。无疑减轻了CPU的负担,也提高了数据搬运的效率。

    stm32中DMA1有7个通道,DMA2有5个通道.DMA挂载的时钟为AHB总线,其时钟为72Mhz,所以可以实现高速数据搬运。

一文了解STM32使用DMA模块的相关操作

一文了解STM32使用DMA模块的相关操作

    STM32使用DMA的相关操作:

    如图1所示,DMA的配置

    voidDMA_Configuration(void){DMA_InitTypeDefDMA_InitStructure;//DMA设置://设置DMA源:内存地址和串口数据寄存器地址//方向:内存->外设//每次传输位:8bit//传输大小DMA_BufferSize=SENDBUFF_SIZE//地址自增模式:外设地址不增,内存地址自增1//DMA模式:一次传输,非循环//优先级:中DMA_DeInit(DMA1_Channel4);//串口1的DMA传输通道是通道4DMA_InitStructure.DMA_PeripheralBaseAddr=USART1_DR_Base;DMA_InitStructure.DMA_MemoryBaseAddr=(u32)SendBuff;DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;//外设作为DMA的目的端DMA_InitStructure.DMA_BufferSize=SENDBUFF_SIZE;//传输大小DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设地址不增加DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//内存地址自增1DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;

    //DMA_Mode_Normal(只传送一次),DMA_Mode_Circular(不停地传送)DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;//(DMA传送优先级为中等)DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;DMA_Init(DMA1_Channel4,&DMA_InitStructure);}

    注:

    如图1所示,传输通道:

    通过查表,串口1的发送对应的是DMA的通道4,所以此处选择通道4。

    2,DMA传输方式:

    (1)DMA_Mode_Normal,正常模式,当一次DMA数据传输完后,停止DMA传送,对于上例而言,就是DMA_PeripheralDataSize_Byte个字节的传送完成后,就停止传送。

    (2)DMA_Mode_Circular

    循环模式,当传输完一次后,重新接着传送,永不停息。

    2,外设的DMA方式设置

    将串口1设置成DMA模式:

    USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);

    3,待传输数据的定义和初始化#defineSENDBUFF_SIZE10240vu8SendBuff[SENDBUFF_SIZE];

    对于(I=0;我

    4,开始DMA传输(使能对应的DMA通道)DMA_Cmd(DMA1_Channel4,ENABLE);

    5,DMA传输的完成while(DMA_GetFlagStatus(DMA1_FLAG_TC4)==RESET){LED_1_REV;//LED翻转延迟();//浪费时间}

    当传输完成后,就会跳出上面的死循环。

责任编辑:李嘉

声明:本网站中,来源标明为“ 慧聪电子网”的文章,转载请标明出处。

欢迎投稿,邮箱:lijia03@hc360.com

活动推荐

更多

2017年电子产业品牌盛会暨采购经理人年会

2017年12月22日

深圳会展中心5F簕杜鹃厅

精彩现场

友情链接

申请友情链接

赛迪网 RFID世界网电子信息产业网畅享网与非网电子产品世界慧聪智能硬件网慧聪电气网慧聪电源网慧聪IT网慧聪变频器网慧聪LED网慧聪芯城慧聪新能源网

慧聪电子网总部

北京市海淀区海淀大街3号鼎好大厦B座7层

慧聪电子网分部

上海市普陀区中山北路3000号长城大厦5层

深圳市福田区深南中路2018号兴华大厦A座七楼

关于我们 | 加入我们 | 我要投稿
| 寻求报道 | 申请合作

Copyright?2000-2014 hc360.com. All Rights Reserved
京ICP证010051号 海淀公安局网络备案编号:11010802015485