你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32的DMA操作

[复制链接]
STMCU小助手 发布时间:2022-12-25 13:11
DMA概述
Direct Memory Access

直接存储器访问

DMA传输将数据从一个地址空间复制到另一个地址空间

由CPU初始化这个DMA传输动作,动作本身由DMA控制器完成

DMA传输通过硬件为RAM和IO设备之间开辟一条直接传输数据的通道,提高了CPU的运行效率


STM32中的DMA
STM32最多有2个DMA控制器,其中大容量产品有2个DMA控制器,小容量产品只有1个

DMA1有7个通道,DMA2有5个通道

每个通道专门用来管理来自于一个或多个外设对存储器访问的请求

还有一个仲裁协调各个DMA请求的优先权

06b7ef769b024b23bbf36dfb5131e090.png


STM32的DMA具有以下特征:
每个通道都直接连接专用的硬件DMA请求,支持软件触发,可以通过软件进行配置
优先级可以通过软件编程设置,共4级
独立的源和目标数据区的传输宽度,模拟打包和拆包过程,源和目标地址必须按数据传输宽度对齐
支持循环的缓冲器管理
每个通道都有3个事件标志(DMA半传输,DMA传输完成,DMA传输出错),这3个事件都可以成为单独的中断
外设和存储器,存储器和外设,存储器和存储器之间
存储包括:FLASH,SRAM,外设的SRAM
外设包括:APB1,APB2和AHB
可编程的数据传输数目:最大为65536


DMA的通道
DMA1有7个通道

282b190e65354b47a7bbee81d00c5d2f.png

8452a9c970024dbf8d2940b2fda730a7.png


DMA处理
在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求

当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给他一个应答信号

当从DMA控制器得到应答信号时,外设立即释放它的请求,一旦释放了这个请求,DMA控制器同时撤销应答信号

每次DMA传送由3个操作完成:

DMA_CPARx存储的是外设的基地址,DMA_CMARx存储额是存储器的基地址,这两个要先赋值好
DMA_CNDTRx包含未完成操作的数目,在DMA_CNDTRx寄存器中,每完成一次发送,这个DMA_CNDTRx寄存器的值会减



数据传输方向
DMA_CCRx寄存器
DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)

2c42b9f9b10e4bd2825df2dcb8abcd5f.png


仲裁器

DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)
同样是在这个寄存器,可以配置通道的优先级

2ba7972aff5541d99a285e9d5c1a14cf.png


可编程的数据量
DMA通道x配置寄存器(DMA_CCRx)(x = 1...7)
源和目标的数据宽度一致时是最方便的

c524b8c0879f4b8d820b5575739818b0.png

指针增量

7516413f461f4373b522e7f201ef0e0e.png


存储器到存储器
还需要设置DMA_CCRx的MEM2MEM位


通道传输数据量

在DMA_CNDTRx寄存器中配置,虽然这是一个32的寄存器,但是只用到了低16位,所以最大数据量为2的16次方-1

9d299b558dd64091a92717530123ffd6.png


中断


ae792b7b6a324a278daf92d59976a8d7.png


通道的配置过程

1. 设置DMA_CPARx(外设地址)和DMA_CMARx(存储器地址)的值

2. 设置传输方向,通过DMA_CCRx寄存器

3. 设置传输数据量,在DMA_CNDTRx寄存器

4. 设置传输优先级,在DMA_CCRx寄存器中

5. 设置是否循环模式,外设和存储器的增量模式

6. 数据宽度,中断配置,5和6都是在DMA_CCRx寄存器中进行配置

7. 在DMA_CCRx寄存器中进行ENABLE位的配置

当传输一半的数据后,半传输标志HTIF为1,当设置了允许半传输中断位HTIE时,将产生中断请求。在传输数据结束后,传输完成标志TCIF为1,当设置了允许传输完成中断位TCIE后,将产生一个中断请求


DMA相关函数配置
DMA_Init

103f928ef3d940f3be5756248b8f10c6.png

DMA_Cmd

a2091ee74aa148c8ab5e744fed414ca8.png

DMA_ITConfig

6f2e6b47d9244fbaa2d62dd9806269ab.png


DMA_SetCurrDataCounter

f9de8c17e3404dd5be3a4f15af69fdca.png

DMA_GetCurrDataCounter

680285a996534c3782b07e1801fb29fd.png

DMA_GetFlagStatus

cc57fdebe00f41118f6737f714f860f0.png

DMA_ClearFlag

fe76c4da59824f2286ccd3e802f775af.png

DMA_GetITStatus

3bc3a2d4cd29430fbc2121a735b9af11.png

DMA_ClearITPendingBit

88583e4b904249909b6c6c7b5c9ea492.png

常用的外设DMA使能库函数
ADC

933a0d26c9924d20bfa97d55ffebd8d7.png

DAC


5663e3b714bb43ce9e1efc39f0f68830.png

USART


2ceb814c0afb4d38aec1757ab46efbc8.png

I2C


90ec031a722e461b86448be675be88c8.png

TIM

715294f5e57c4e398286179843b58dba.png

4aa31ef16d06414498579c52420c441a.png


DMA的初始化配置

101b75b7fdd74830a8e621d0342862b9.png

3cefdb2416d746e6884d888f0701fe69.png

1. 使能DMA时钟
2. 初始化DMA通道参数
3. 使能DMA发送,使能外设DMA使能函数
4. 使能DMA通道,启动传输
5. 查询DMA传输状态
6. 获取或设置通道当前剩余数据量
————————————————
版权声明:CodeForCoffee


收藏 评论0 发布时间:2022-12-25 13:11

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版