单片机_day9_ADC+LCD+DMA

时间:2024-11-18 12:48:15

3. DMA(数据的搬运工)

3.1 DMA简介

DMA(直接存储器访问),DMA传输是将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

CPU无时不刻的在处理着大量的事务,但有些事情却没有那么复杂,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,能够更好的利用CPU的资源.

因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理

3.1 ​​​​​​​DMA作用

DMA的传输方式无需CPU参与,可以直接控制传输。

DMA给外部设备和内存开辟了一条直接数据传输的通道。

目的:给CPU节省资源,使CPU的工作效率提高

​​​​​​​3.1 DMA主要特性

1)同一个DMA模块可以有多个优先级请求:很高、高、中等、低

2)每个通道有3个事件标志: DMA半传输、DMA传输完成、 DMA传输出错

3)数据源 目标源 数据传输宽度对齐

4)传输数据 字节(8位) 半字(16位) 全字(32位 )

5)双向的AHB主端口,GPDMA:2个端口

6)内存映射数据从源到目标的传输:

外设到内存

内存到外设

内存到内存

外设到外设

7)在睡眠和停止模式下自主数据传输

8)并发DMA通道

9)GPDMA 有 16 个通道。

​​​​​​​3.4 DMA寄存器

DMA_CPARx : 设置外设地址的寄存器

DMA_CMARx : 设置存储器地址的寄存器

DMA_CCRx : 设置数据传输方向

DMA_CNDTRx:设置传输的数据量

​​​​​​​3.5 DMA的增量或者循环模式

1)增量:外设搬移到存储器的时候 ,不希望覆盖上一个数据,会将内存设置为增量模式

2)循环:DMA不停循环的搬移数据,一组的数据传输完成时,计数寄存器将会自动地被恢复成配置该通道时设置的初值。

DMA的增量或循环模式是指在进行连续数据传输时,DMA可以选择以递增的方式访问源和目标地址,或者以循环的方式重复访问相同的地址。

在增量模式下,DMA控制器在每次传输完成后,会自动增加内存地址的值,使得下一次传输的数据存储在内存中的下一个位置。这样,外部设备可以连续地读写数据,而不需要额外的指令干预。

在循环模式下,DMA控制器在传输完成后,会重新回到起始内存地址,再次开始传输数据。这样,外部设备可以循环地读写同一块内存区域,方便处理需要重复操作的数据。

DMA配置要点:

  1. 数据源 2. 目标 3. 数据宽度 4.DMA模式 增量/循环

​​​​​​​3.6 DMA搬运ADC实验

搬运PB1(电位器分得的电压)

ADC的DMA转运结束后会进入此中断

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)