使用DMA辅助STM32用于USART收发数据(DMA章节)
一、认识DMA!
1、什么是DAM捏?
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
-
无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
-
两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道)具体的DMA数据需要参考芯片手册
-
++每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。++
二、DMA的特性
- 独立可配置通道:DMA1有7个通道,DMA2有5个通道
- 软件+硬件触发
- 四级优先级:++很高、高、中等和低++
- 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐
- 支持循环的缓冲器管理
- 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。
- 存储器和存储器间的传输(内存间数据交换)
- 外设 -> 存储器 存储器 -> 外设
- 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标。
- 可编程的数据传输数目:最大为65535
三、DMA的功能框图
四、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 keep | 11*10 |
PSIZE 外数据宽度 | 00 8/01 16/10 32/11 keep | 9*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传输过半、传输完成和传输错误时产生中断。
为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断。
中断事件 | 事件标志位 | 使能控制位 |
---|---|---|
传输过半 | HTIF | HTIE |
传输完成 | TCIF | TCIE |
传输错误 | TEIF | TEIE |
六、DMA的请求映像
DMA1的各个外设的DMA通道信息
![image](https://img-blog.csdnimg.cn/img_convert/0ca7130bcf20e6e6277f5e5ff26f0ae9.png)
DMA2的各个外设的DMA通道信息
文章为对于STM32中文手册的学习笔记,如有错误多多包涵-
文章部分内容来自于网络!如有侵权,联系删除.