使用STM32F101xx和STM32F103xx DMA控制器

发布时间:2023-05-25  

这篇应用笔记描述了怎么使用STM32F101xx和STM32F103xx的直接内存访问(DMA)控制器。STM32F101xx和STM32F103xx DMA控制器、Cortex-M3内核、先进的微控制器总线架构和存储系统,是为了提供一个高的数据带宽,并开发响应时间非常快的软件。这篇文档也描述了怎样充分利用这些特性,以及对于不同的外设和子系统怎样保证正确的响应时间。


在下文中STM32F101xx 和STM32F103xx都记作STM32F10xxx,DMA控制器都记作DMA。


1、DMA控制器

DMA是一个AMBA先进的高性能总线(AHB),它的特点是它具有两个AHB端口:一个从端口,用于DMA编程;一个是主端口,主端口允许DMA在不同的从模块间发起数据传输。

DMA允许数据传输在后台传输,而不需要Cortex-M3处理器的干预。在这个操作中,主处理器能够执行其他的任务。CPU仅仅在要处理的数据块传输完毕后才被中断。大量的数据传输的同时不会对系统性能产生大的影响。


DMA主要用来为不同的外设模块实现数据缓冲存储(一般存储在系统的主存储器中)。这种解决方案和分布式解决方案(每个外设需要实现自己当地数据存储)相比,无论在硅的使用和功耗上都要更胜一筹。STM32F10XXXDMA控制器充分利用了Cortex-M3 Harvard架构和多层的总线系统来保障非常低的DMA数据传输延时和CPU执行/中断事件检测/服务。


1.1 DMA的主要特性

DMA具有以下的特性:

1、7个DMA通道(channel 1到7)支持单向的从源端到目的端的数据传输;

2、DMA通道优先级可通过硬件和软件编程;

3、支持存储器到存储器,存储器到外设,外设到存储器,外设到外设的数据传输;

4、能够对硬件/软件传输进行控制;

5、传输时内存和外设指针自动增加;

6、传输数据的大小可编程;

7、总线错误自动管理;

8、循环模式/非循环模式;

9、可传输高达65536个数据。

DMA目标是为所有外设提供相关的大的数据缓冲区,这些缓冲区一般位于系统的SRAM中。每一个通道在特定的时间里分配给唯一的外设,连接到同一个DMA通道的外设不能够同时使用(在DMA活跃时),所有的连接到给定的通道的外设中只有一个能够拥有DMA功能。


支持DMA的外设如下表, DMA服务的外设和总线系统结构也在下图中:

0f4114d2-81df-11ed-8abf-dac502259ad0.png

0f62102e-81df-11ed-8abf-dac502259ad0.png

0f852d48-81df-11ed-8abf-dac502259ad0.png

2、性能考虑

STM32F10xxx有两个主模块Cortex-M3处理器和DMA。他们通过总线矩阵连接到从总线,Flash Memory总线,SRAM总线和AHB系统总线。从总线轮流连接到两个APB总线以服务所有的嵌入的外设(参见上图)。总线矩阵有两个主要的特性,实现系统性能的最大化和减少延时:1、循环优先级调度;2、多层结构和总线挪用。


2.1 循环优先级调度

NVIC和Cortex-M3处理器实现了高性能低延时中断调度。所有的Cortex-M3指令既可以在单周期内执行,也可以在周期级上被中断。为了在系统水平上保证这个特性,DMA和总线矩阵必须确保DMA不能够长时间占用总线。循环优先级调度能够确保CPU能够在任何一个周期访问所有的从总线。因此,第一个数据最大总线系统延时在CPU看来,就是一个总线周期(两个APB时钟周期的最大值)。


2.2 多层结构和总线挪用

多层结构允许两个两个主设备并发执行数据传输,只要它们寻址到不同的设备。在Cortex-M3哈佛架构,这种结构提高了数据的并行性,因此减少了执行时间并且优化了DMA效率。从Flash存储器取指是通过完全独立的总线,所以DMA和CPU只是在需要通过一个给定的从总线进行数据访问时才会产生竞争。当其他DMA控制器工作在突发模式下,STM32F10xxx DMA的数据传输(总线挪用)只需要单个总线周期。当使用总线挪用存取机制时,CPU等待数据的最大时间是很短的(一个总线周期)。CPU访问SRAM和DMA存取就是自然地交叉存取。CPU访问和DMA通过APB总线存取外设就可以并行进行。即使更多的数据访问使用突发模式DMA可能会更快些,CPU停止的那段长时间很少被复原。下图列出了总线挪用和突发机制的区别。

0fcb84be-81df-11ed-8abf-dac502259ad0.png

在极端的情况下(CPU从内存的一个地方复制一块数据到内存中的另一个地方),软件的执行必须等到整个DMA传输完毕。当然,CPU大部分时间完成的是数据处理,CPU和DMA交叉存取数据的频率很低。STM32F10XXX总线结构固有的并行性,加上DMA总线挪用机制保证了CPU不会长时间地等待从SRAM中读取数据。总线挪用机制的DMA使总线使用效率更高,明显地减少了软件执行时间。


2.3 DMA延迟

DMA完成从外设到SRAM 存储器的数据传输有三个步骤:1、DMA请求仲裁;2、从外设中读取数据(DMA源);3、将读取的数据写入到SRAM中(DMA目的地)。


当DMA把数据从内存中传输到外设(例如SPI传送),操作必须按照以下顺序:1、DMA请求仲裁;2、从SRAM中读取数据;3、将读取到的数据通过APB总线写入到外设中。


每个通道总的服务时间是总裁时间(1个AHB时钟周期),外设访问时间(2个AHB时钟周期)和SRAM读/写访问时间(1个AHB时钟周期用于单独的读/写操作,2个周期用于写操作后SRAM读)的和。


当DMA通道空闲或者是第三个操作完成后,DMA比较所有挂起的DMA请求的优先级,高优先级的通道将会被服务,DMA开始执行第二个操作。当一个通道正在服务时(第二,三个操作正在进行),没有其他的通道能够被服务,而不管它的优先级如何。


当至少同时有两个DMA通道使能时,最高优先级通道的DMA延迟时间为正在传输的时间加上下个将被服务的DMA通道(挂起优先级最高)。


2.4 数据总线带宽限制

数据总线带宽限制主要是因为APB总线比系统SRAM和AHB总线速度慢。对于最高优先级通道,以下两种情况是需要考虑的:

1、当多余一个DMA通道使能时,最高优先级通道在APB总线上的请求数据带宽必须比APB传输率低25%

2、尽管高速/高优先级DMA传输通常发生在APB2上(更快的APB总线),但是CPU和其他DMA通道可以在APB1上访问外设。大约3/4的APB传输是在APB1上完成的,最小的APB2频率依赖于最快的DMA通道数据带宽,最大的APB时钟分频因子由下列的等式给出:

fAHB〉(2*N2+6*N1)*BMAX

如果N2< N1 则N1其中fAHB是AHB时钟频率;

N2和 N1是APB1和APB2的时钟分频因子;

Bmax是APB2上的最大并行数据带宽。

0feaee62-81df-11ed-8abf-dac502259ad0.png

2.5 通道优先级选择

为了实现外设数据的连续传输,相关的DMA通道必须能够维持外设数据传输率和确保服务的延迟时间比两个连续的数据之间的时间短。


高速/高带宽外设必须拥有最高的DMA优先级,这确保了最大的数据延迟对于这些外设都是可以忍受的,而且可以避免over/under-run的情况。


在相等的带宽需求的情况下,推荐给工作在从模式下(没有数据传输速度控制)的外设分配的优先级比工作在主模式(能够控制数据流)下的外设分配的优先级高。


缺省情况下,通道分配和硬件优先级(从1到7)是按照最快的外设分配最高优先级的顺序来分配。


当然,在某些运用场合下也许不是按照这样来分配的,在这种情况下,用户能够为每一个通道配置软件优先级(分4种,从非常高到低),软件优先级优先于硬件优先级。


当几个外设(不管有没有使用DMA)并行使用时,用户必须确保内部系统能够维持运用所要求的总的数据带宽,必须从下列因素中选择一个折中方案:1、每个外设的运用需求;2、内部数据带宽。


2.5.1 运用需求

以SPI接口为例,SPI接口数据带宽是通过波特率除以SPI的数据字长度而得到的(由于一个满数据需要在每次发送之前/之后传输到/传输自SPI),假设SPI的波特率是18M,数据是以8位传输的,操作配置在单一模式下,内部数据带宽需求是2.25M/s,如果SPI在16位模式下,则数据带宽将是1.125M/s。


2.5.2 内部数据带宽

内部数据带宽依赖于以下两个条件:1、总线频率 可获得的数据带宽与总线时钟频率是成正比的;2、总线类型 AHB数据传输需要一个时钟周期(除了SRAM写后读访问需要2个周期),数据通过APB总线传输给外设需要花费2个APB时钟周期。


推荐DMA总线使用保持在2/3以下,这样系统和CPU的性能就可在合理的水平。


3、DMA编程示例

所有的示例都使用STM32F10xxx固件库,可以参考AN2564 STM32F10XXX DMA运用的例子。相关的固件库可以在ST网站上下载,网址为www.st.com


3.1 使用SPI传输实现ADC连续数据的获取

ADC配置为连续转换模式,该模式下,它能够将一个输入通道以最大速度进行连续转换。为了获得最大的连续转换速度,AHB总线频率设置为56MHz,ADC预分频为4,采样速度为13.5周期。这些设置通过DMA通道1传输到位于系统RAM中的缓冲区,通道1的数据带宽设置为0.54M/s。


当ADC转换后的数据填充了缓冲区的一半后,软件计算出最大值并且是这些数字化的数据规格化(最大值设置为0xFF),ADC转换的结果通过SPI接口传输到外部。ADC转换结果是通过SPI1接口来传输的,使用DMA通道3把数据从SRAM缓冲区中传输到SPI1的数据寄存器。要达到最大的DMA传输的速度0.875M/s,SPI1接口必须配置为16位主传输模式、14M波特率的传输速度。


可是,当SPI1工作在主模式,SPI1有效的数据传输速度受数据的可用速率1M/S的限制时,优先级的配置如下:通道1(ADC):VeryHigh,通道3(SPI1_TX):High。


3.2 SPI直接传输实现ADC连续数据的获取

这个示例完成的功能和前面一个几乎相同,没有数据的标准化。CPU内部并没有使用这些数据,直接把ADC转换结果传输到SRAM缓冲区可以较少一半的总线占用。所以,仅有DMA通道1被使用,该通道的目的存储器地址设置为SPI数据寄存器,而不需要SRAM缓冲。


3.3 使用DMA实现GPIO快速数据传输

这个示例展示了如何将不同的外设用于DMA请求和数据传输。这个机制允许在没有使用CPU的情况下实现简单的快速并行同步接口。Timer1和DMA通道4连接到TIM1_TRIG,用来实现获取数据的接口,在GPIO的端口上可以获取8位并行数据,一个外部时钟信号作用在Timer1的外部触发器输入端。在外部触发器上升沿,定时器产生一个DMA请求,只要GPIO数据寄存器地址已设置到DMA通道4的外设地址,DMA控制器在每一次DMA请求时从GPIO端口读取数据,并把它存储到SRAM的缓冲器中。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    电磁调速电机控制器怎么接线 有哪些注意事项;  电磁调速电机控制器怎么接线   电磁调速电机控制器的接线方式会因具体的控制器类型、电机类型和电路设计而略有不同,一般应按照控制器使用说明书或电路设计图来进行接线......
    变频调速器怎么接线_变频调速器怎么设置调速;  变频调速器怎么接线   1、电源应接到变频调速器输入端R、S、T接线端子上,一定不能接到变频调速器输出端(U、V、W)上,否则将损坏变频调速器。接线......
    bldc驱动器怎么接线 bldc驱动器和伺服电机驱动器的区别;bldc驱动器怎么接线 BLDC(无刷直流电机)驱动器的接线方式可以根据具体的驱动器型号和使用场景有所差异,但一般而言,BLDC驱动器的接线......
    汽车喇叭分频器怎么接,分频器可以不要吗;汽车喇叭分频器怎么接 分频器:INPUT:音频输入口 WOOFER:中音 TWEETER:高音 一般情况下,分频器有如上三个接口,“INPUT”为输......
    两相电机都是多大的_两相电机电容器怎么接;  两相电机都是多大的   两相电机的功率大小是不固定的,可以根据具体的设计要求和应用需求进行选择和设计。通常情况下,两相电机的功率范围比较小,一般......
    伺服驱动器外部接线图_伺服驱动器故障及维修;  伺服驱动器怎么接线   有两处连接都可以接通。   一是动力线,即驱动器给电机供三相交流电源,一般有三根或四根线;   二是编码器信号线,位置......
    调速电机三根线怎么接 调速电机的六根调速线如何接;  调速电机三根线怎么接   调速电机一般有三根线:一个相线、一个中线和一个接地线。三根线的连接方法根据具体的电机型号和控制器型号有所不同,一般需要参考电机和控制器的接线图进行接线......
    变频器电源线怎么接?变频器电源线接线注意事项有哪些?;变频器电源线的接线方式比较复杂,是主回路电路,如电源应接到变频器输入端R、S、T接线端子上、使用适当型号的导线接线、运行后,改变接线的操作,必须......
    plc控制器怎么用 plc控制器怎么修复;  plc控制器怎么用   PLC(Programmable Logic Controller)控制器的使用通常需要以下步骤:   了解控制器......
    电动机保护器怎么接线;电机保护器是一种保护电机运行安全的保护装置,一般可分为、缺相保护器、过压过载保护器、综合保护器,其接线方法是非常简单的。 电动机保护器的接线应按照以下步骤进行: 1. 将保......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>