[STM32]DMA的知识

使用DMA辅助STM32用于USART收发数据(DMA章节)

一、认识DMA!

1、什么是DAM捏?

直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。


  1. 无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。

  2. 两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道)具体的DMA数据需要参考芯片手册

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


二、DMA的特性

  • 独立可配置通道:DMA1有7个通道,DMA2有5个通道
  • 软件+硬件触发
  • 四级优先级:++很高、高、中等和低++
  • 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐
  • 支持循环的缓冲器管理
  • 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。
  • 存储器和存储器间的传输(内存间数据交换)
  • 外设 -> 存储器 存储器 -> 外设
  • 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标。
  • 可编程的数据传输数目:最大为65535

三、DMA的功能框图

image

四、DMA处理

事件发生时: 
1.      外设向DMA控制器发送一个请求
2.      DMA仲裁器优先级处理
3.      发送应答信号释放外设的请求
4.      外设释放请求DMA撤销应答信号

数据传输步骤:
1.      取存储器/外设的基地址

        (首次传输的地址为
        DMA_CPARx/DMA_CMARx
        寄存器配置的内存地址/外设地址)

2.      存储数据到外设寄存器/内存

        (首次传输数据为
        DMA_CPARx/DMA_CMARx
        寄存器配置的数据单元)

3.      执行一次DMA_CNDTRx寄存器递减

DMA外设的寄存器含义

在上面的DMA处理中,出现了

DMA_CPARx、DMA_CMARx、DMA_CNDTRx三个寄存器的概念


寄存器功能说明
DMA_ISR中断状态寄存器一些标志/事件信息
DMA_IFCR中断标志清除寄存器
DMA_CCRx通道x配置寄存器dma的一些配置信息

DMA_CCRx 寄存器配置编号
M2M 内存间传输0内存到内存/1内存到外设14
PL 通道优先级00低/01 中/10 高/11 最高13*12
MSIZE 内存数据宽度00 8/01 16/10 32/11 keep11*10
PSIZE 外数据宽度00 8/01 16/10 32/11 keep9*8
MINC 内存地址增0 不执行/1 执行7
PINC 外设地址增0 不执行/1 执行6
CIRC 循环模式0 不执行/1 执行5
DIR 数据传输方向0 外设->内存/ 1内存->外设4
TITE 中断错误事件0 不允许 1 允许3
HTIE 半传输中断事件0 不允许 1 允许2
TCIE 传输完成中断事件0 不允许 1 允许1
EN 软件使能0 工作 1 不工作0

DMA_CNDTRx通道传输数量寄存器
(0~65535)也就是2^16的数量级
  • 数据传输数量为0至65535。

  • 这个寄存器只能在通道不工作(DMA_CCRx的EN=0)时写入。

  • 通道开启后该寄存器变为只读,指示剩余的待传输字节数目。

  • 寄存器内容在每次DMA传输后递减。

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

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


外设地址寄存器 DMA_CPARx
内存地址寄存器 DMA_CMARx

五、中断与错误管理

错误管理

读写一个保留的地址区域,将会产生DMA传输错误。

当在DMA读写操作时发生DMA传输错误时,硬件会自动地清除发生错误的通道所对应的通道配置寄存器(DMA_CCRx)的EN位,该通道操作被停止

此时,在DMA_IFR寄存器中对应该通道的传输错误中断标志位(TEIF)将被置位,如果在DMA_CCRx寄存器中设置了传输错误中断允许位,则将产生中断。

中断

每个DMA通道都可以在DMA传输过半、传输完成和传输错误时产生中断。

为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断。


中断事件事件标志位使能控制位
传输过半HTIFHTIE
传输完成TCIFTCIE
传输错误TEIFTEIE

六、DMA的请求映像

image

DMA1的各个外设的DMA通道信息
image

DMA2的各个外设的DMA通道信息
image

文章为对于STM32中文手册的学习笔记,如有错误多多包涵-
文章部分内容来自于网络!如有侵权,联系删除.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值