13-HAL库DMA系统总结

发布者:MysticalDreamer最新更新时间:2019-08-16 来源: eefocus关键字:HAL库  DMA系统  CPU 手机看文章 扫描二维码
随时随地手机看文章

1.间接


DMA:Direct Memory Access,直接存储访问,实现数据在外设与存储器或存储器之间高速访问,数据移动过程无需CPU操作控制,因此可以大大解放CPU负担。


外设(ADC、SPI、I2C、DCMI等外设的数据寄存器),存储器(片内SRAM、外部存储器、片内Flash等等)。外设到存储器,例如将AD转换的数据转移到所定义的存储区中。存储器到外设多用于外设的发送通信,例如串口不定长数据的输入输出。

STM32F7xx系列有2个DMA控制器,每个控制器具有8个数据流(stream),每个数据流有8个通道(channel),对应如下:


每个外设请求占用一个数据流通道,相同外设请求可以占用不同数据流通道。数据流的传输依靠仲裁器进行管理和判断,包括软件(例如初始化中mydma2.Init.Priority=DMA_PRIORITY_MEDIUM)和硬件(数据流编号越低,优先权越高)。DMA传输有FIFO模式和直接模式,直接模式在每个外设请求时立即启动对存储器传输,FIFO模式为源数据传输到目标地址前将数据临时存放在FIFO(先进先出存储器缓冲区)中。FIFO模式对于要求源地址和目标地址数据宽度不同时很有用,同时可用于突发传输。


存储器到存储器传输必须使用DMA2,但对数据流编号和通道没有硬性要求。


DMA2的存储器端口和外设端口都连接到AHB,但DMA的存储区端口没有AHB2外设的访问权,同时外设端口只连接到APB1外设,所以DMA1不能实现存储器到存储器传输。


2.DMA相关函数解析


关于DMA,ST官方提供了HAL库(封装函数)和LL库(直接操作寄存器)。和GPIO定义类似,需要先使能相关时钟,定义句柄结构体DMA_HandleTypeDef mydma2,随后进行DMA的各项配置,最后进行初始化。


typedef struct __DMA_HandleTypeDef

    DMA_Stream_TypeDef          *Instance;                                                    

    DMA_InitTypeDef              Init;                                                         

    HAL_LockTypeDef              Lock;                                                         

    __IO HAL_DMA_StateTypeDef    State; 

    void                        *Parent;

    void                   (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma); 

    void                   (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma);

    void                   (* XferM1CpltCallback)( struct __DMA_HandleTypeDef * hdma); 

    void                   (* XferM1HalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); 

    void                   (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma);  

    void                   (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma); 

    __IO uint32_t                ErrorCode; 

    uint32_t                     StreamBaseAddress; 

    uint32_t                     StreamIndex; 

}DMA_HandleTypeDef;

typedef struct

   uint32_t     Channel;               //通道

   uint32_t     Direction;             //方向

   uint32_t     PeriphInc;             //外设递增

   uint32_t     MemInc;                //内存递增

   uint32_t     PeriphDataAlignment;   //外设数据宽度

   uint32_t     MemDataAlignment;      //内存数据宽度

   uint32_t     Mode;                  //模式选择

   uint32_t     Priority;              //优先级

   uint32_t     FIFOMode;              //FIFO模式

   uint32_t     FIFOThreshold;         //FIFO阈值

   uint32_t     MemBurst;              //内存突发传输

   uint32_t     PeriphBurst;           //外设突发传输

}DMA_InitTypeDef;

3.DMA初始化及配置


HAL库中,基本上都是结合XXX_HandleTypeDef 结构体和XXX_InitTypeDef 结构体进行初始化配置。


#include "dma.h"

#include "stm32f7xx_hal.h"

 

uint32_t DMA_Result;

DMA_HandleTypeDef Mydma1;

 

void MyDMA_Config(void){

__HAL_RCC_DMA2_CLK_ENABLE();    //时钟使能

Mydma1.Instance=DMA2_Stream0;       //数据流

Mydma1.Init.Channel=DMA_CHANNEL_0;   //通道

Mydma1.Init.Direction=DMA_PERIPH_TO_MEMORY;    //传输方向

Mydma1.Init.PeriphInc=DMA_PINC_DISABLE;  //外设是否递增

Mydma1.Init.MemInc=DMA_MINC_DISABLE;    //内存是否递增

Mydma1.Init.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD;   //外设数据宽度半个字节

Mydma1.Init.MemDataAlignment=DMA_MDATAALIGN_HALFWORD;   //内存数据宽度半个字节

Mydma1.Init.Mode=DMA_CIRCULAR;    //循环模式

Mydma1.Init.Priority=DMA_PRIORITY_MEDIUM;   //优先级中等

Mydma1.Init.FIFOMode=DMA_FIFOMODE_DISABLE;  //是否使能FIFO模式

Mydma1.Init.PeriphBurst=DMA_PBURST_SINGLE;  //外设突发传输

Mydma1.Init.MemBurst=DMA_MBURST_SINGLE;     //内存突发传输

HAL_DMA_Init(&Mydma1);    //初始化

HAL_DMA_Start(&Mydma1,ADC1_BASE,DMA_Result,2400);   //启动DMA

}

随后还需进行相关外设的配置:如串口,AD采样等。


4.DMA中断


中断配置,中断函数调用,回调函数覆盖。

关键字:HAL库  DMA系统  CPU 引用地址:13-HAL库DMA系统总结

上一篇:12-HAL库串口通信总结
下一篇:14-HAL库之I2C通信

推荐阅读最新更新时间:2024-11-11 02:35

AMD:不是我们不努力,而是Intel实在是太强!
众所周知,在过去50年的历史中,AMD绝大多数时候都会在CPU工艺上落后Intel一两代,不是AMD不努力,而是Intel实在是太强了。即便如此,AMD也没有对Intel公司失去敬畏,高级副总裁、数据中心业务部门总经理Forrest Norrod日前在参加巴克莱技术大会的时候表示,“Intel是一家伟大的公司,他们遇到的(工艺落后)问题迟早会解决的。” 这二十多年来一直都拥有地球上最先进的制程工艺,官方之前还表态他们的制造工艺领先对手三年半,当然说这话的时候是22nm之前的节点了。 Forrest Norrod表示AMD不会把自己的成功希望建立在(期望)对手失败的基础上,这种想法是很愚蠢的——实际上这个表态也是AMD C
[嵌入式]
AMD:不是我们不努力,而是Intel实在是太强!
STM32 中 CAN进入错误回调函数后无法接收问题(HAL库
CPU进入错误回调函数后 ,无法接收新的数据包 void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) 经检查,如果CPU在进入错误回调函数之前,我们调用 HAL_CAN_Receive_IT(&Can1Handle, CAN_FIFO0); 一般来说,我们会认为CPU一直处于可以接收新的can包的状态,但是只要CPU进入错误回调函数之后,就无法接收新的数据包,进debug 单步运行后 得到问题的原因 void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) { ...................................
[单片机]
示波器快速维修与CPU及总线相关的故障
自然界运行着各种形式的正弦波,比如海浪。地震,声波,空气中传播的声音或者身体运转的自然节律,物理世界里,能量,振动粒子和不可见的力无处不见。即使是光也有自己的基频,并因为基频的不同呈现出不同的颜色。  通过传感器,这些力可以转变为电信号,以便通过示波器能够进行观察和研究。有了示波器,科学家,工程师等能够观察随时间变化的事件。  示波器是任何设计,制造或是维修电子设备的必备之物。当今世界瞬息万变,工程师们需要最好的工具,快速而精准的解决测量疑难,在工程师看来,面对当今各种测量挑战,示波器自然是满足要求的关键工具。 示波器快速维修与CPU及总线相关的故障 大家知道,CPU的基本工作条件主要是电源(CPU供电VCC)、时钟(
[测试测量]
示波器快速维修与<font color='red'>CPU</font>及总线相关的故障
美安全机构:只有更换CPU才能彻底解决芯片缺陷
  据VentureBeat北京时间1月4日报道,针对昨天披露的重大计算机处理器安全缺陷,相关公司纷纷发声安慰客户,解释它们正在采取措施,发布软件修正这一缺陷。下面就随手机便携小编一起来了解一下相关内容吧。   但美国知名计算机安全机构“计算机紧急响应团队”(CERT)发表声明称,修正这一缺陷只有一个方法:更换CPU。CERT位于卡耐基梅隆大学,获得美国国土安全部网络安全和通信办公室资助。   CERT研究人员在报告中写道,“这一底层缺陷主要是由CPU架构设计选择引起的,完全消除这一缺陷要求更换容易受到攻击的CPU硬件。”   他们也建议用户安装各种软件补丁,但同时指出,这只会“缓解底层硬件缺陷的影响”。   CERT的声明对C
[手机便携]
CPU散热器的电磁辐射仿真分析
随着集成电路技术的高速发展,现代集成芯片的晶体管集成度和工作频率获得了较大提高,例如Intel处理器在一个内核中集成了上亿个晶体管,且工作频率已经超过2 GHz。目前,在器件水平上,CPU散热器的辐射发射已经成为一个主要的电磁辐射源。散热器上的能量主要由处理器里的硅核强耦合而来,另外还有散热器附近电路线的耦合。在GHz范围内,硅核的尺寸远小于时钟信号频率及其谐波的波长,所以硅核自身辐射很小,可忽略。但当能量耦合到散热器上情况就不同了,在这些频率上,散热器的尺寸相比于波长不能忽略。当散热器的固有频率接近于CPU的时钟信号频率时,散热器就表现出强辐射,很容易对周围环境产生电磁干扰,为了减少由此带来的干扰,必须要研究散热器的谐振特性及辐
[单片机]
<font color='red'>CPU</font>散热器的电磁辐射仿真分析
高通TIM专访:64位八核CPU主打中端市场
        八核以及64位处理器无疑将是未来手机处理器的发展趋势,更多的手机处理器厂家都纷纷推出自己的八核以及64位处理器,而高通在刚刚发布64位四核处理器骁龙410之后,今天又在MWC2014上为我们带来了更高端些的骁龙610和615,其中610是64位的四核处理器,而615则是大家比较期待的八核64位处理器,这也是高通首次推出64位的八核手机处理器产品。 美国高通技术公司市场营销副总裁Tim McDonough 现场为我们展示了高通骁龙800芯片,尺寸十分小巧 为此在MWC2014上,我们有幸的采访到了美国高通技术公司市场营销副总裁Tim McDonough先生,让我来了解一下高通的八核64位策略。 高通首款64位
[手机便携]
Imagination发布高效的 MIPS I-class I6400 CPU 系列产品
Imagination Technologies 发布高效的 MIPS I-class I6400 CPU 系列产品,这是第一款结合 64 位架构与硬件虚拟化技术的 IP 内核,通过多线程、多核与多集群一致处理(multi-cluster coherent processing)技术,能提供可扩展的性能。I6400 杰出的特性组合以及性能/功耗/面积的领先优势,使其遥遥领先于竞争产品,并能协助客户打造出具备相同性能、但面积更小的内核,或是相同面积、但速度更快的内核。 MIPS Warrior I-class 处理器内核已为主流的 64 位应用设立新的标准,这些应用包括嵌入式、移动、数字消费、先进通信、网络和存储 —— 这是单一MIP
[单片机]
拼上最后一块“CPU拼图” 集齐“三芯”的英伟达想召唤什么
芯点评──以最快的速度了解产业时事新闻,以最独到的角度点评产业发展趋势。 集微网报道,以GPU见长的英伟达发布了首款基于Arm架构的数据中心CPU,或许令不少人惊讶。今年的GTC 21上,皮衣教主黄仁勋又一次在自家厨房进行他的重磅主题演讲,介绍了英伟达AI、汽车、机器人、5G、实时图形、协作和数据中心等领域的最新进展。 随着CPU拼图的凑齐,英伟达进入了CPU、GPU和DPU“三芯”组合拳时代。 而面向未来AI、自动驾驶、5G更智能的时代,巨头们似乎都做出了相似的选择——去年以CPU见长的英特尔发布了自研GPU;AMD也在拥有CPU和GPU的基础上要收购FPGA。 芯片融合时代不断深入,这也意味着芯片行业的竞争已经进入了新的阶段
[手机便携]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved