STM32 DMA buffersize理解

发布者:自在堂最新更新时间:2019-01-04 来源: eefocus关键字:STM32  DMA  buffersize 手机看文章 扫描二维码
随时随地手机看文章

DMA

参考野火《STM32库开发实战》 P195-P215 “DMA—直接存储区访问 ”章节讲解。


DMA FIFO

每个数据流都独立拥有四级32位FIFO。DMA传输具有FIFO模式和直接传输模式。 

FIFO用于源数据传输到目标地址之间临时存储这些数据。


DMA传输模式

DMA2 支持全部三种传输模式,而 DMA1 只有外设到存储器和存储器到外设两种模式。 

DMA1 的存储区端口相比 DMA2 的要减少 AHB2 外设的访问权,同时 DMA1 外设端口是没有连接至总线矩阵的,只有连接到 APB1 外设,所以 DMA1 不能实现存储器到存储器传输。


DMA 流控制器

流控制器主要涉及到一个控制 DMA 传输停止问题。 DMA 传输在 DMA_SxCR 寄存器的 EN 位被置 1 后就进入准备传输状态,如果有外设请求 DMA 传输就可以进行数据传输。 


很多情况下,我们明确知道传输数据的数目,比如要传 1000 个或者 2000 个数据,这样我们就可以在传输之前设置 DMA_SxNDTR 寄存器为要传输数目值, DMA 控制器在传输完 这么多数目数据后就可以控制 DMA 停止传输。 


DMA 数据流 x 数据项数 DMA_SxNDTR(x 为 0~7)寄存器用来记录当前仍需要传输数目,它是一个 16 位数据有效寄存器,即最大值为 65535,这个值在程序设计是非常有用也是需要注意的地方。我们在编程时一般都会明确指定一个传输数量,在完成一次数目传输 

后 DMA_SxNDTR 计数值就会自减,当达到零时就说明传输完成。


如果某些情况下在传输之前我们无法确定数据的数目,那 DMA 就无法自动控制传输停止了,此时需要外设通过硬件通信向 DMA 控制器发送停止传输信号。这里有一个大前提就是外设必须是可以发出这个停止传输信号,只有 SDIO 才有这个功能,其他外设不具备此功能。


理解1 

看库函数中 

DMAy_Channelx->CNDTR = DMA_InitStruct->DMA_BufferSize; 

而CNDTR即数据传输数量 (Number of data to transfer) 


数据传输数量为0至65535。这个寄存器只能在通道不工作(DMA_CCRx的EN=0)时写入。通道开启后该寄存器变为只读,指示剩余的待传输字节数目。寄存器内容在每次DMA传输后递减。 


数据传输结束后,寄存器的内容或者变为0;或者当该通道配置为自动重加载模式时,寄存器的内容将被自动重新加载为之前配置时的数值。 


当寄存器的内容为0时,无论通道是否开启,都不会发生任何数据传输。


理解2 

这个DMA_BufferSize 就是要传输的次数。 

这个并不是指buf的字节大小,而是指DMA的传输次数,一次传输可以是:1字节,2字节,4字节。


理解3 

那为啥取名叫buffer 呢,我猜是为了和DMA_MemoryInc_Enable配合。虽然传输计数是减少的,但是内存地址是增长的。在声明DMA_MemoryBaseAddr时候,其实DMA的就指向(是指向,不是开辟!)一个大小为DMA_BufferSize的数组,数组的开始地址为DMA_MemoryBaseAddr。这个数组就是缓冲区。


每次ADC采样后,就通过DMA把数据放在内存中, 从DMA_MemoryBaseAddr+0地址开始放, 直到DMA_MemoryBaseAddr+DMA_BufferSize-1,此时CNDTR变成0,传输结束。


理解4 

如果你有32字节数据: 

datasize=1 ==> buffersize = 32 

datasize=2 ==> buffersize = 16 

datasize=4 ==> buffersize = 8 

这个理解,说明了buffer_size设置时需要注意的事项, 

1. 外设数据宽度、内存数据宽度 

2. 我们设置了外部存储区的大小


**外设:DCMI_DR_ADDRESS 

内存:FSMC_LCD_ADDRESS #液晶屏地址或数组首地址**


  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;   #外设数据宽度为32位

  

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;  #内存数据宽度为16位


上述此情况下,假设传输2个字节,则buffer_size = 16/32 = 0.5 假设传输32个字节,则buffer_size = 32/2*0.5=8


DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;   #外设数据宽度为16位


DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;  #内存数据宽度为32位


上述此情况下,假设传输4个字节,则buffer_size = 32/16= 2 

假设传输32个字节,则buffer_size = 32/4*2=16


  DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;   #外设数据宽度为16

 

 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;  #内存数据宽度为16位


上述此情况下,假设传输2个字节,则buffer_size = 16/16= 1 

假设传输32个字节,则buffer_size = 32/2*1=16


传输类型

DMA传输类型有单次(single)传输和突发(Burst)传输。


burst: 

dma实际上是一次一次的申请总线,把要传的数据总量分成一个一个小的数据块。比如要传64个字节,那么dma内部可能分为2次,一次传 64/2=32个字节,这个2(a)次呢,就叫做burst。这个burst是可以设置的。这32个字节又可以分为32位 * 8或者16位*16来传输。


突发传输与 FIFO 密切相关,突发传输需要结合 FIFO 使用,具体要求 FIFO 阈值一定要是内存突发传输数据量的整数倍。 FIFO 阈值选择和存储器突发大小必须配合使用, 


这里写图片描述


直接模式


默认情况下, DMA 工作在直接模式,不使能 FIFO 阈值级别。 


直接模式在每个外设请求都立即启动对存储器传输的单次传输。直接模式要求源地址和目标地址的数据宽度必须一致,所以只有 PSIZE 控制,而 MSIZE 值被忽略。突发传输是基于 FIFO 的所以直接模式不被支持。另外直接模式不能用于存储器到存储器传输。 


在直接模式下,如果 DMA 配置为存储器到外设传输那 DMA 会见一个数据存放在FIFO 内,如果外设启动 DMA 传输请求就可以马上将数据传输过去

关键字:STM32  DMA  buffersize 引用地址:STM32 DMA buffersize理解

上一篇:stm32 DMA初始化选项研究
下一篇:STM32F4 UART DMA初始化

推荐阅读最新更新时间:2024-03-16 16:21

STM8L 在USART中使用DMA来发送与接收数据
以USART为例子来使用DMA 分两部分,第一为,DMA这个外设自身的配置;第二为,USART的DMA部分配置, DMA与USART的DMA配置 void SYS_DMA_Init(void) { CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE); /span //打开时钟,很重要 /* Deinitialize DMA channels */ DMA_GlobalDeInit(); DMA_DeInit(DMA1_Channel1); DMA_DeInit(DMA1_Channel2); /* DMA channel Rx of USART Co
[单片机]
STM32之RTC原理
一、RTC时钟框图分析(重要) 先熟悉一下几个知识点: 1、STM32的实时时钟(RTC)是一个独立的定时器! 2、RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位火从待机模式唤醒后RTC的设置和时间维持不变。 RTC这章中,对RTC相关的寄存器的操作特别重要,我在这里不解释了,请查阅手册。。 先上图! RTC时钟框图 RTC时钟框图分为完全独立的两个部分:1、APB1接口部分(用来RTC相关的寄存器);2、RTC核心; 第一部分:APB1接口。注意:这里涉及到寄存器RTC_CRL中的RSF位,这位是寄存器的同步标志,具体内容去看STM32参考手册RTC
[单片机]
<font color='red'>STM32</font>之RTC原理
mbedtls | 10 - 数字证书及 X.509 证书标准
一、X.509证书标准 X.509是数字证书的一种标准格式,由国际电信联盟的标准化部分定义。 1. X.509证书的结构 X.509证书主要包括12个字段,如下表: 名称 字段 意义 Version 版本 证书版本 Serial number 序列号 证书的唯一序列号 Signature 签名算法 CA对证书进行签名所使用的签名算法 Issuer 发行商名称 标识对证书进行签名并颁发的实体 Validity 有效期 标识证书的生效日期和终止日期 Subject 证书主体名称 标识获得证书的主体 Subject public key infomation 公钥 用于指示使用者公钥信息 Issure unique
[单片机]
mbedtls | 10 - 数字证书及 X.509 证书标准
Keil MDK3.20 在ULINK下调试stm32方法
1. 程序在RAM中运行 要点:(1)程序的下载地址改到RAM空间中 (2)程序的debug之前要设定SP,PC指针到Ram空间 新建工程,选择STM32 的具体型号,我买的万利的开发板,选择stm32f103Vb。 设定程序下载地址,如下图所示,IROM1的地址指向了STM32的ram空间。 空间大小如何分配取决于自己的需求。本款处理器内部ram大小为20K,分配16K给只读区,4K给可读可写区。这样IROM设定的大小为0x4000,IRAM1的起始就变为0X20004000,大小只剩下0X1000。 Debug标签选择ULINK1 Cortex Debugger(软件采用yjgyiys
[单片机]
Keil MDK3.20 在ULINK下调试<font color='red'>stm32</font>方法
STM32嵌入式系统设计的智能控制网络终端技术
  本文重点介绍基于STM32的智能嵌入式终端的网络控制功能的设计和实现。 智能网络终端是实现智能化管理的嵌入式终端设备。通常具有安全门禁系统和自动化控制的基本功能。   1智能网络通信实现方案   将嵌入式系统与Internet连接起来实现远距离信息获取和控制功能的本质是嵌入式系统本身能够实现TCP/IP网络通信协议。该协议的解决方案总体上可分为两大类。第一类是直接在嵌入式设备上实现TCP/IP,使之直接连上Internet。这实质上是由MCU及内部固化TCP/IP协议的芯片组成应用系统的核心,MCU可以直接拨号上网,这种方法的硬件电路相对简单,也不需要中间环节的支持。但是由于使用了TCP/IP协议芯片,因此需要大容量的程序
[单片机]
<font color='red'>STM32</font>嵌入式系统设计的智能控制网络终端技术
NVIC中断优先级管理示例解析
NVIC中断优先级管理 STM32中断优先级简介 NVIC的缩写是“嵌套向量中断控制器(Nested Vectored Interrupt Controller)”。 如何管理中断? STM32中断优先级管理采用“响应优先级和抢占优先级”结合的方法,并且进行了中断分组。 以第1组为例:1bit抢占优先级说明抢占优先级共有两级,3bits响应优先级说明响应优先级共有8级。我们可以看到无论如何分组,中断优先级总有16种。 什么是“抢占优先级”和“响应优先级”呢? 抢占优先级和响应优先级都是区分那个中断优先进行的标志,但是两者的含义去不尽相同。 抢占优先级从名字上就比响应优先级霸气一些,因此抢占优先级起决定作用,当
[单片机]
NVIC中断优先级管理示例解析
STM32-GPIO 
为了快速了解STM32,并且使用STM32完成工程。我们首先来浏览一下STM32的GPIO,这也最容易学习的。在本节我们了解一下GPIO的框架。下一节了解一下STM32的晶振,就可以干什么了?当然是流水灯或者键盘实验。 在《STM32中文资料》在第8章做了详细的介绍。我们只是浏览一下。在105页列举了GPIO的几种模式。 GPIO管脚可以兼容5V的电平,这一点在手册上有明确的说明。也就是说STM32的GPIO可以不需要任何转换连接5V的设备。上半虚线框图是输入部分,下半虚线框图是输出部分。 k1、K2是两个开关,当k1、k2 都断开时是输入浮空,k1闭合、k2断开输入上拉。k1断开、k2闭合输出上拉。 当k1闭
[单片机]
STM32-GPIO 
一种基于单片机系统的DMA控制电路的模块化设计方案
    摘要: 介绍一种基于单片机系统的采用“RAN出让”方式实现的DMA控制电路。模块化设计,便于用可编逻辑门阵列或集成电路芯片实现。给出其软件接口子程序设计方案。     关键词: 单片机敏系统 直接存储器存取(DMA)方式 数据传输 采用中断查询方式时,单片机系统无法实现小于其指令周期的高速数据传输及数据采集。虽然近些年单片机速度不断提高,但指令周斯一般还在微秒量级,这就限制了单片机在高速数据传输领域内的应用,如网络通讯、高速数据采集等。DMA(即外设与内储存器之间数据直接传输)控制电路经其高效 、高速、CPU资源占用少等特点已在PC机成熟应用。在PG机中,它是通过安装在主板上的专用DMA控制
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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