STM32那点事(4)_DMA(上)
前言
DMA(直接存储器访问)主要用于外设与存储器之间以及存储器与存储器之间提高数据传输。
主要作用:
1:无需借助CPU操作,就可以通过DMA在两个外设或者存储器之间传递数据,速度较快。
2:解放CPU资源,使CPU可以 有时间做其他事情。
上图分别为有无DAM外设与存储器读写过程,无DMA数据流过程:外设->CPU->存储器,需要占用CPU资源软件读写。有DMA数据流过程:外设->DMA->存储器,不需要占用CPU资源,硬件自动读写。
STM32 DMA为芯片内部结构,无GPIO对外交互。
DMA介绍
STM32F4种 DMA挂接在AHB种, AHB总线为高速数据总线频率为168MHz,DMA需要以最快速率进行读写,性能才能达到最优,故DMA挂接在AHB中,示意图如下:
STM32F4 有两个DMA,每个DMA分别支持8个数据流,工可以控制16个数据流,DMA总体框图如下:
DMA框图可以将其划分为六个部分:
1:每个DMA共分为8个数据流,每个数据流又可以对应8个外设请求。在启动DMA传输之前,首先要为相应的数据流配置相应的通道,可以通过DMA_SxCR来配置,每个数据流的通道芯片硬件已经规定好,不可以随意配置:
DMA1 和DMA2的通道如上图所示。要根据相应的外设,查上述表设置相应通道。 每个外设占用一个数据流,有些外设分布在多个数据流中,使用时只能使用其中一个。
2:仲裁器:一个仲裁器对应8个数据流,按照优先级对8个DMA数据流请求进行管理。优先级管理分为两个阶段:
软件管理:每个数据流优先级都可以通过DMA_SxSR寄存器进行管理,划分为四个级别:非常高优先级,高优先级,中优先级以及低优先级。
硬件管理:如果两个请求设置成相同的优先级,则编号低的数据流优先于编号高的数据流。
3:FIFO:STM32F4 DMA每个数据流都独立拥有四级FIFO,用于缓存读取到的数据,拼装成所需要的字节。
DMA 传输具有FIFO模式和直接模式。
直接模式:每个DMA请求会立即启动对存储器的传输。当在直接模式(禁止FIFO)下将DMA请求配置为以存储器到外设模式传输数据时,DMA仅会将一个数据从存储器预加载到内部FIFO,从而确保一旦外设触发DMA请求时则立即传输数据。
FIFO模式在传输到目标之前进行临时存放,可以通过DMA_SxFCR 的 FTH[1:0]来控制其阈值。FIFO阈值必须与整个存储器突出传输完全匹配。如果不匹配,当使能数据流时将产生一个FIFO错误。
FIFO的主要作用就是当要求的源地址和目标地址数据宽度不一致时,比如源时间时字节数,而目标输出时4个字节,此时FIFO的功能就是把数据缓存起来,组装成目标输出所需要的字节数
4和5分别为存储器和外设端口,DMA1和DMA2两者外设总线如下图所示:
由上图中图1部分可知DMA1的存储器端口都直接链接到外设上,而DMA2时可以通过AHB2总线挂接到存储器中,所以 DMA2数据流能够执行存储器到存储器的传输,而DMA1不行。
6为编程接口,AHB从器件编程接口是连接到AHB2外设.AHB2外设在使用DMA传输时需要相关控制信息。
DMA中断
每个DMA数据流,可发生以下中断:
--->达到半传输
---->传输完成
---->传输错误
----->FIFO错误
----->直接模式错误
参考文档
《 零死角玩转STM32》
《STM32F4XX中文参考手册》
STM32那点事(4)_DMA(上)相关推荐
- STM32那点事(5)_ADC(上)
ADC介绍 ADC顾名思义为模数转换,与之相对的是DAC为数模转换,AD/DA为电子元器件中的重要模块,主要负责模拟信号和数字信号之间的转换,因为我们计算机中使用到的主要是数字信息010101等,而我 ...
- STM32那点事(4)_DMA(下)
DMA按照其数据流传输可以分为存储器到外设.外设到存储器或者存储器到存储器的传输. 外设到存储器模式 这种模式可以通过DMA_SxCR寄存器中的EN置1,每次产生外设请求,数据流都会启动数据源到FIF ...
- STM32那点事(3)_中断(上)
中断是STM32核心模块之一,几乎所有的模块都需要和中断打交道.了解STM32运作机制非常重要.在<STM32那点事(1)_STM32F40_41xx启动文件详解>中讲解启动流程中提到,中 ...
- Python爬虫入门教程 98-100 帮粉丝写 Python 爬虫之【2020秋季最难的事--约不上的疫苗】
帮粉丝写爬虫系列的最后一篇博客了,剩下的两篇是爬虫百例课程的一个总结,本系列课程的加更篇后续会逐步编写,同时滚雪球学 Python 系列课程已经在构思中,希望得到大家的继续支持.这篇博客取名叫做202 ...
- STM32 Proteus仿真PT100温度测量串口上传LCD1602显示-0002
Proteus仿真小实验: STM32 Proteus仿真PT100温度测量串口上传LCD1602显示-0002 功能: 硬件组成:STM32F103R6单片机 +LCD1602显示器+PT100温度 ...
- 【Rust日报】 2019-06-10:「嵌入式Rust」使用STM32 Blue Pill在Apache Mynewt上托管嵌入式Rust应用程序...
「示例」使用静态链接的Rust可执行程序 #Linux #StaticallyLinked 运行于Linux内核之上 Read More Contrie: 无锁并发映射和集合库 #concurrent ...
- STM32那点事(6)_定时器(上)
STM32定时器是CPU中的基本功能模块之一,最基本的功能是提供定时,STM32定时器共用16个定时器,主要分为两个基本定时器,10个通用定时器,2个高级定时器,以及两个看门狗定时器.看门狗定时器后面 ...
- STM32那点事(2)_时钟树(上)
时钟树属于STM32内部资源,是整个芯片内部模块种最难看懂的一部分,相对于其他高性能CPU芯片,STM32时钟树相对没有那么复杂,了解STM32时钟树对熟悉整个芯片内部架构非常有帮助,进一步学习其他高 ...
- STM32 USB虚拟串口原理(上)
USB虚拟串口是使用USB的CDC(CDC为communication device class(virtual port com))类实现的一种通讯接口.使用STM32自带的USB slave功能可 ...
最新文章
- 半世纪全球顶级学者迁移图(附视频、亿级学术信息)| 数据院科技大数据研究中心发布
- Different Layouts for Different Widths
- linux grub2 等待时间修改
- SpringBoot 集成 thumbnailator (图片缩放,区域裁剪,水印,旋转,保持比例)保姆级教程(含代码)
- OpenCV Laplace point/edge detection拉普拉斯点/边缘检测的实例(附完整代码)
- 清华大学梁宸计算机系,2015年广东高考高等学校自主招生录取考生名单公示(2)...
- Linux Apache php MySQL 安装配置(Centos 6.4 yum安装)
- java调用lingo_使用Lingo增强JMS
- php算法求出一个数可以被分解成多少个_最全的小学干货:34个数学重难点公式(三)...
- iOS 两张图片合并成一张。
- 浅谈soul网关架构图
- python人脸识别表情检测器(2):基本框架的制作
- 广州外贸童装批发市场
- QGC地面站中视频流配置及gstreamer安装
- python课件百度文库_python教-教学课件.doc
- Minecraft开服ipv6配置
- 【Python学习】Word文档重复字检测程序
- 016-第50周(12.13-12.19)
- 资讯丨Linux基金会一行到访腾讯参观交流
- CSS Float 浮动布局
热门文章
- easyui form 提交
- 架构设计 | 高并发流量削峰,共享资源加锁机制
- Django(四)数据库
- 利用samba服务为windows用户架设网盘的简单实践
- MySQL 在高并发下的 订单撮合 系统使用 共享锁 与 排他锁 保证数据一致性
- 网络应用框架Netty快速入门
- mysql 5.6 read-committed隔离级别下并发插入唯一索引导致死锁一例
- node.js用get方式获取网页中的链接
- hdu1251(统计难题)
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转......