DMA详解

使用简介

1、F4中每个 DMA 控制器有 8 个数据流,每个数据流有多达 8 个通道(或称请求),一个数据流只能使用一个通道。比如,当数据流3的通道4给了SDIO时,这个数据流其他的通道就用不来了,体现在HAL库中,就是这个数据流的通道就无法配置了。多个数据流之间使用的先后顺序通过软件进行配置,一次只能使用一个数据流

缓冲区中的数组可以定义为8位的,也可以word(32位),他默认是word,可以给他改成byte
在这里插入图片描述
这个时候SPI就不能使用DMA2的通道3了
在这里插入图片描述
数据流优先级在这个里面配置
在这里插入图片描述
下面这个是USART1的DMA配置
在这里插入图片描述
2、使用
(1)DMA配置好,使能DMA数据流。要开始使用就直接使能要使用的外设的DMA使能位就行了。
(2)DMA的一次传输模式,在一次传输完成后,需要将DMA传输完成标志位删除(因为这些位只能由软件清零),而后如有必要就重新配置DMA,如不改变原有配置,重新启动DMA即可。
在HAL库中,配置好后,直接调用相应外设的DMA发送函数就行了,里面什么都已经帮忙做好了.
3、一次传输就是在一次传输完成后就停止,要想继续传输必须关断DMA使能后再重新配置才能继续传输(因为传输数量寄存器DMA_SxNDTR,因为只有在禁止数据流时,才能向此寄存器执行写操作)
4、创建的数组要大一些,避免出现存储到外面
5、HAL库代码中,对DMA的配置只是设置了其中断,具体的配置都是在外设中配置的,包括DMA的中断服务函数,其就是在外设使用DMA的API接口中配置的。

存储器到存储器

1、DMA失能后,重新打开又是从最初的地址开始传输(需要先关闭,然后再打开才行)
2、一次传输中,被存储的地址需要由足够的空间,因为他传输过去就会一直加上去(normal),不会到了数组最后一位又从头开始的(circular就会在数组中不断循环,但是存储器到存储器只有normal模式)
在这里插入图片描述

uint8_t src[5]="abcde";
uint8_t des[10]={
   0};

int main(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32 DMA(Direct Memory Access)是一种硬件机制,它可以在不使用 CPU 的情况下完成数据传输。这种机制可以提高数据传输的效率,从而提高系统的整体性能。在STM32 MCU中,DMA通常用于以下几个方面: 1. 外设数据传输到存储器:例如,将ADC转换结果存储到存储器中。 2. 存储器数据传输到外设:例如,将存储器中的数据传输到DAC输出。 3. 存储器数据传输到存储器:例如,将一个缓冲区的数据拷贝到另一个缓冲区。 STM32 DMA的主要特点有以下几个: 1. 高效性:DMA传输过程不需要CPU参与,可以在后台进行数据传输,从而节约了CPU资源。 2. 灵活性:DMA可以支持多种传输模式,例如内存到内存、内存到外设、外设到内存、外设到外设等。 3. 安全性:DMA传输过程可以通过设置传输长度和传输完成中断等方式来保证数据传输的安全性。 下面是STM32 DMA的基本工作原理: 1. 配置DMA通道:首先需要配置DMA通道的相关寄存器,例如源地址、目的地址、传输长度等等。 2. 启动DMA传输:一旦DMA通道被配置好,就可以启动DMA传输。启动DMA传输后,DMA自动从源地址读取数据,并将数据写入目的地址,在这个过程中不需要CPU的参与。 3. DMA传输完成:当DMA传输完成后,产生传输完成中断,CPU可以在中断处理函数中进行后续处理。 总之,STM32 DMA是一种非常有用的机制,可以显著提高系统的整体性能。在使用DMA时,需要仔细考虑传输模式、传输长度、目的地址等参数,确保DMA传输的正确性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成草

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值