没有合适的资源?快使用搜索试试~ 我知道了~
STM32F4 DMA双缓冲的正确打开方式
5星 · 超过95%的资源 需积分: 44 181 下载量 70 浏览量
2016-08-03
15:33:17
上传
评论 5
收藏 47KB DOC 举报
温馨提示
试读
3页
STM32F4 DMA双缓冲的正确打开方式,帮助大家更好了解STM32的双缓冲模式
资源推荐
资源详情
资源评论
一个关于 STM32 DMA 双缓冲的话题
目前 STM32 家族中有些系列支持 DMA 的双缓冲模式,比如 STM32F2/STM32F4/STM32F7 等系列。尤其随着
人们对 STM32F4/F7 系列应用不断拓宽和加深,在设计中运用到 DMA 双缓冲的场合也越来越多。STM32 芯片中的
DMA 又可分为两大类,一类是通用 DMA,一类是专用 DMA,比如用于 USB,TFT LCD,ETHERNET 等外设应用上的
DMA。这里要谈的是基于通用 DMA 的话题,不妨以 STM32F4 系列芯片为例。
关于 STM32F4 的 DMA 双缓冲传输在 STM32F4 系列的参考手册里做了简单描述。因为它是基于介绍了单缓冲模
式的 DMA 介绍之后接着介绍的,稍显言简意赅。
1. 相比单缓冲的数据流,双缓冲多了一个 DMA 存储区和相应的存储指针;
2. 如果使能 DMA 双缓冲,硬件会自动使能 DMA 的循环传输模式;
3. 每一批数据传输结束,或者说每次传输事务结束时通过交换存储指针实现更换存储区的目的。
4.DMA 双缓冲模式仅在外设与存储器间进行,不支持 memoryto Memory 间的传输。
基于 DMA 双缓冲模式的的特点,不难理解在应用中必须开辟两个存储区以及存放
两个存储区首地址的存储寄存器,DMA_SxM0AR 和 DMA_SxM1AR。
DMA_SxM0AR:指向存储区 0,单缓冲模式下默认使用该寄存器做存储区指针。
DMA_SxM1AR:指向存储区 1,仅在 DMA 双缓冲模式下才能使用。
DMA 正在访问的当前存储区由 CR@DMA_SxCR 表示
CT = 0:DMA 正在访问存储区 0,CPU 可以访问存储区 1
CT = 1:DMA 正在访问存储区 1,CPU 可以访问存储区 0
使用 DMA 双缓冲传输,既可以减少 CPU 的负荷,又能最大程度地实现 DMA 数据传输和 CPU 数据处理互不打扰又
互不耽搁,同时也给应用开发也带来方便。比如,假设你使用 DMA 单存储缓冲,有些情况下可能是等待 DMA 搬完了
数据,CPU 才过来处理;有些情况下可能是 DMA 一边传输,CPU 也一边来访问,这时往往会使用到环形存放和读取,
代码实现起来稍显繁琐也容易出纰漏。如果改为 DMA 双缓冲模式,应用上实现起来也就简洁很多。再加上 DMA 双缓
冲模式的循环特性,使用它对存储区的空间容量要求也会大大降低。尤其在大批量数据传送时,你只需开辟两个合适
大小的存储区,能满足 DMA 在切换存储区时的当前新存储区空出来就好,并不一定要开辟多大多深的存储空间。有过
这方面应用经验的工程师可能就有体会,单纯一味地加大双缓冲区的深度并不明显改善数据传输状况。关于这点不妨
打个比方,某茶馆有俩芳名分别为 CPU 和 DMA 的伺茶 MM,,每人手里有个同样茶壶。DMA 负责把她手里的茶壶装满
茶水就好,CPU 就负责用从 DMA 手里接过装满茶水的壶给客人倒茶,倒完了用空壶与 DMA 交换装满茶水的壶继续工
作。显然,只要保证 CPU 妹妹茶壶里总有茶水,至于那两个茶壶选多大容积并不是很重要。倒是那个茶壶进出口径对
整个事情的效率有影响。
关于 DMA 双缓冲话题,我们也不妨看看一个具体的案例加深下印象。案例来自网络,为了尽量压缩篇幅,我省却
了部分配置代码,留下需要交流的关键语句。
&&&&&&&&&&&&&&&&&
F407 DMA 的 double Bu*er mode 上卡了好久了!大家看看配置哪里出问题了?
uint8_tBu*er0[] = {0x11,0x22,0x33,0x44}; //无符号的 8 位整型数
uint8_tBu*er1[] = {0xaa,0xbb,0xcc,0xdd}; //无符号的 8 位整型数
资源评论
- qq_395753562018-02-01下了还不知道怎么样
- 大之若兮2018-10-18就是有点贵,还好
- liangying07202019-04-28不错,就是贵,
- dqq_92582018-12-09好用,有很大的参考价值
憧憬技术的大男孩
- 粉丝: 2
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 中国各省陆地生态系统服务价值2020年
- 中国各省陆地生态系统服务价值2017年
- 中国各省陆地生态系统服务价值2016年
- 基于matlab实现经典系统辨识的方法及其matlab程序实现.rar
- 基于matlab实现复杂网络中聚类系数与度度关联系数的matlab Clustering-Coefficient.rar
- 基于matlab实现功能是将matlab的mat文件转化成labview中的波形文件
- 中国各省陆地生态系统服务价值2014年
- 基于matlab实现给图片添加了正弦噪声,利用MATLAB源代码消除噪声.rar
- 中国各省陆地生态系统服务价值(2013-2022年)
- 基于matlab实现分数阶微积分的分数阶傅里叶变换源代码matlab程序.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功