【STM32】DMA

  介绍      

        DMA,全称为: Direct Memory Access,即直接存储器访问。 DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备
开辟一条直接传送数据的通路, 能使 CPU 的效率大为提高。

DMA1 有 7 个通道。 DMA2 有 5个通道。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁起来协调各个 DMA 请求的优先权。

 特性

STM32 的 DMA 有以下一些特性:
●每个通道都直接连接专用的硬件 DMA 请求,每个通道都同样支持软件触发。这些功能
通过软件来配置。
●在七个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),假如
在相等优先权时由硬件决定(请求 0 优先于请求 1,依此类推) 。
●独立的源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和
目标地址必须按数据传输宽度对齐。

●支持循环的缓冲器管理
●每个通道都有 3 个事件标志(DMA 半传输, DMA 传输完成和 DMA 传输出错),这 3 个
事件标志逻辑或成为一个单独的中断请求
●存储器和存储器间的传输
●外设和存储器,存储器和外设的传输
闪存、 SRAM、外设的 SRAM、 APB1 APB2 和 AHB 外设均可作为访问的源和目标。
●可编程的数据传输数目:最大为 65536

 

传输参数

1.数据的源地址

2.数据传输的目标地址

3.数据的传输量

4.传输次数的传输模式

当传输量不为0时,DMA启动数据传输,当剩余传输量为0时,便会结束DMA传输。

DMA传输模式

1.正常模式

当一次DMA数据传输完成只会便会停止DMA传输

2.循环传输模式

当一次传输完成之后,DMA自动重装载,进行下一次的数据传输

3.存储器到存储器模式(不能和循环模式同时使用)

传输优先级:仲裁器

仲裁器根据通道请求的优先级来优先启动外设/储存器的访问

● 软件:每个通道的优先权可以在DMA_CCRx寄存器中设置,有4个等级:
─ 最高优先级
─ 高优先级
─ 中等优先级
─ 低优先级
● 硬件:如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优
先权
。举个例子,通道2优先于通道4。
注意: 在大容量产品和互联型产品中, DMA1控制器拥有高于DMA2控制器的优先级

DMA传输通道

每个通道都可以在有固定地址的外设寄存器和存储器地址之间执行DMA传输。DMA传输的数据 量是可编程的,大达到65535。包含要传输的数据项数量的寄存器,在每次传输后递减。


指针递增模式

根据设置,外设和存储器指针在每次传输后可以自动向后递增或保持常量。

中断

由三种中断事件

cubeMX设置

 如果设置为递增,那么下一次传输的时候地址便会增加Data Width字节

串口发送数据时将数据不断存进固定外设地址,外设的地址是不递增的

内存里存的是要发送的数据,就要递增保证数据发出

DMA配置

1.使能DMA时钟

2.初始化DMA

3.使能外设DMA

4.使能DMA通道传输

5.查看传输状态

函数库

HAL_UART_Transmit();串口发送数据,使用超时管理机制
HAL_UART_Receive();串口接收数据,使用超时管理机制
HAL_UART_Transmit_IT();串口中断模式发送
HAL_UART_Receive_IT();串口中断模式接收
HAL_UART_Transmit_DMA();串口DMA模式发送
HAL_UART_Transmit_DMA();串口DMA模式接收
HAL_UART_DMAPause() 暂停串口DMA
HAL_UART_DMAResume(); 恢复串口DMA
HAL_UART_DMAStop(); 结束串口DMA

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值