第21章 DMA—直接存储区访问

本章参考资料:《STM32F76xxx参考手册》DMA控制器章节。

学习本章时,配合《STM32F76xxx参考手册》DMA控制器章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。本章内容专业名称较多,内容丰富也较难理解,但非常有必要细读研究。

特别说明,本章内容是以STM32F76xxx系列资源讲解。

21.1 DMA简介

DMA(Direct Memory Access,直接存储区访问)为实现数据高速在外设寄存器与存储器之间或者存储器与存储器之间传输提供了高效的方法。之所以称之为高效,是因为DMA传输实现高速数据移动过程无需任何CPU操作控制。从硬件层次上来说,DMA控制器是独立于Cortex-M7内核的,有点类似GPIO、USART外设一般,只是DMA的功能是可以快速移动内存数据。

STM32F7xx系列的DMA功能齐全,工作模式众多,适合不同编程环境要求。STM32F7xx系列的DMA支持外设到存储器传输、存储器到外设传输和存储器到存储器传输三种传输模式。这里的外设一般指外设的数据寄存器,比如ADC、SPI、I2C、DCMI等等外设的数据寄存器,存储器一般是指片内SRAM、外部存储器、片内Flash等等。

外设到存储器传输就是把外设数据寄存器内容转移到指定的内存空间。比如进行ADC采集时我们可以利用DMA传输把AD转换数据转移到我们定义的存储区中,这样对于多通道采集、采样频率高、连续输出数据的AD采集是非常高效的处理方法。

存储区到外设传输就是把特定存储区内容转移至外设的数据寄存器中,这种多用于外设的发送通信。

存储器到存储器传输就是把一个指定的存储区内容拷贝到另一个存储区空间。功能类似于C语言内存拷贝函数memcpy,利用DMA传输可以达到更高的传输效率,特别是DMA传输是不占用CPU的,可以节省很多CPU资源。

21.2 DMA功能框图

STM32F7xx系列的DMA可以实现外设寄存器与存储器之间或者存储器与存储器之间传输三种模式,这要得益于DMA控制器是采样AHB主总线的,可以控制AHB总线矩阵来启动AHB事务。图 21-1为DMA控制器的框图。

 

图 21-1 DMA框图

1.①外设通道选择

STM32F7xx系列资源丰富,具有两个DMA控制器,同时外设繁多,为实现正常传输,DMA需要通道选择控制。DMA控制器具有8个数据流,每个数据流可以提供多达16个外设请求。实际上STM32F767xx中DMA1只用了10个,DMA2只用了12个。在实现DMA传输之前,DMA控制器会通过DMA数据流x配置寄存器DMA_SxCR(x为0~7,对应8个DMA数据流)的CHSEL[3:0]位选择对应的通道作为该数据流的目标外设。

外设通道选择要解决的主要问题是决定哪一个外设作为该数据流的源地址或者目标地址。

DMA请求映射情况参考表 21-1和表 21-2。

表 21-1 DMA1请求映射

外设请求

数据流0

数据流1

数据流2

数据流3

数据流4

数据流5

数据流6

数据流7

通道0

SPI3_RX

 SPDIFRX_DT

SPI3_RX

SPI2_RX

SPI2_TX

SPI3_TX

 SPDIFRX_CS

SPI3_TX

通道1

I2C1_RX

 I2C3_RX

TIM7_UP

 

TIM7_UP

I2C1_RX

I2C1_TX

I2C1_TX

通道2

TIM4_CH1

 

I2S3_EXT_RX

TIM4_CH2

 

 

TIM4_UP

TIM4_CH3

通道3

-

TIM2_UP
TIM2_CH3

I2C3_RX

 

I2C3_TX

TIM2_CH1

TIM2_CH2
TIM2_CH4

TIM2_UP
TIM2_CH4

通道4

UART5_RX

USART3_RX

UART4_RX

USART3_TX

UART4_TX

USART2_RX

USART2_TX

UART5_TX

通道5

UART8_TX

UART7_TX

TIM3_CH4
TIM3_UP

UART7_RX

TIM3_CH1
TIM3_TRIG

TIM3_CH2

UART8_RX

TIM3_CH3

通道6

TIM5_CH3
TIM5_UP

TIM5_CH4
TIM5_TRIG

TIM5_CH1

TIM5_CH4
TIM5_TRIG

TIM5_CH2

 

TIM5_UP

 

通道7

 

TIM6_UP

I2C2_RX

I2C2_RX

USART3_TX

DAC1

DAC2

I2C2_TX

通道8

I2C3_TX 

I2C4_RX

 

 

I2C2_TX

 

I2C4_TX

 

通道9

 

SPI2_RX

 

 

 

 

SPI2_TX

 

表 21-2 DMA2请求映射

外设请求

数据流0

数据流1

数据流2

数据流3

数据流4

数据流5

数据流6

数据流7

通道0

ADC1

 SAI1_A

TIM8_CH1
TIM8_CH2
TIM8_CH3

 SAI1_A

ADC1

SAI1_B 

TIM1_CH1
TIM1_CH2
TIM1_CH3

 SAI2_B

通道1

 

DCMI

ADC2

ADC2

 SAI1_B

SPI6_TX

SPI6_RX

DCMI

通道2

ADC3

ADC3

 

SPI5_TX

SPI5_TX

CRYP_OUT

CRYP_IN

HASH_IN

通道3

SPI1_RX

 

SPI1_RX

SPI1_TX

SAI2_A 

SPI1_TX

SAI2_B

 QUADSPI

通道4

SPI4_RX

SPI4_TX

USART1_RX

SDMMC1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值