STM32-DMA
1 DMA简介
DMA(Direct Memory Access),中文名为直接内存访问,它是一些计算机总线架构提供的功能,能使数据从附加设备(如磁盘驱动器)直接发送到计算机主板的内存上。对应嵌入式处理器来说,DMA可以提供外设和存储器之间,或存储器与存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源。

1.1 DMA传输的4种情况
DMA涉及的数据传输分为四种情况:
-
外设到内存
-
内存到外设
-
内存到内存
-
外设到外设

它们本质上是一样的,都是从内存的某一区域传输到内存的另一区域,外设的数据寄存器本质上就是内存的一个存储单元。
1.2 典型的DMA结构
典型的DMA控制器的结构示意图如下:

DMA控制器内部包含4中寄存器/计数器:
-
地址寄存器:包括源地址和目的地址寄存器
-
状态寄存器:用于寄存DMA传输前后的状态
-
控制寄存器:用于选择DMA控制器的操作类型、工作方式、传输方向和有关参数
-
字节计数器:用于控制传输数据块的长度
DMA控制器需要连接包括:
-
与外设连接:用于接受外设发出的DMA操作请求和在DMA期间对外设进行控制
-
与CPU连接:用于请求总线的控制权
-
与三大总线连接:用于进行总线控制
DMA控制器可以像CPU那样获得总线的控制权,因此可以完成外设与存储器之间的数据高速交换。
如下图,当外设需要与存储器之间进行DMA传输时由DMA控制器提出总线请求,从CPU获得总线授权后,由DMA控制器控制数据的传输。

2 STM32中的DMA
2.1 STM32的DMA资源概述
STM32F103内部有2 个DMA控制器:
-
DMA1有7个通道
-
DMA2有5个通道,仅存大容量产品中
每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。
此外,每个DMA还有一个仲裁器来协调各个请求的优先权。
STM32F103中的DMA有以下一些特性:
-
独立的源和目标数据区的传输宽度(字节、半字、全字)
-
每个通道都有3个事件标志(DMA 半传输,DMA 传输完成和 DMA 传输出错)
-
存储器和存储器间的传输
-
外设和存储器,存储器和外设的传输
-
闪存、SRAM、外设的 SRAM、APB1、APB2 和 AHB 外设均可作为访问的源和目标
2.2 STM32的DMA框图
STM32F103的DMA框图如下:

-
①代表DMA请求:当外设准备通过DMA传输数据时,需先给DMA控制器发送请求。
-
②代表DMA通道:DMA1有7 个,DMA2有 5个,虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个。
-
③代表总裁器:用于处理当发生多个 DMA 通道请求时的响应顺序。仲裁器管理 DMA 通道请求分为两个阶段:
-
第一阶段:软件阶段,可以在DMA_CCRx寄存器中设置,有4个等级:非常高,高,中,低
-
第二阶段:硬件阶段,若两个及以上的DMA通道请求设置的优先级一样,则取决于通道编号,越低优先权越高
-
3 总结
本篇介绍了DMA的一些基础知识,包括DMA传输的4种情况、典型的DMA结构以及STM32的DMA相关基础介绍。
相关文章:
STM32-DMA
1 DMA简介 DMA(Direct Memory Access),中文名为直接内存访问,它是一些计算机总线架构提供的功能,能使数据从附加设备(如磁盘驱动器)直接发送到计算机主板的内存上。对应嵌入式处理器来说,DMA可…...
1065 A+B and C (64bit)
题:点我 题目大意: 这题虽然看着像签到,然鹅签不过去。 因为我最初写的沙雕代码是: #include<iostream> #include<cstdio> using namespace std; int main(void) {int t;scanf("%d", &t);for (int i …...
阿里云效和阿里在线idea使用
阿里云效 https://flow.aliyun.com/all?page1 阿里在线idea:https://ide.aliyun.com/ 在云效中创建的项目可以在在线idea 打开 运行中的项目 设置ssh 设置以后可以使用云效率的代码构建来构建代码 设置 添加自有云或者体验5h...
[git] 删除分支中的内容 -> 空分支
git branch 分支名1 #创建一个新分支git checkout 分支名1 #切换到刚创建的分支上git rm -rf . #删除所有文件内容 -> 空分支(注意:命令后面有个.) 也可以 git checkout --orphan 分支名1 #创建一个分支,其包含父分支…...
git 配置
vi ~/.gitconfig 安装开源命令行对比工具 delta: https://github.com/dandavison/delta 详细设置delta:https://www.5axxw.com/wiki/content/xrx4vf [user]name xxemail xxxxxx.com[core]attributesfile ~/.gitattributespager deltaquotepath false[credentia…...
vue router进行路由跳转并携带参数(params/query)
在使用router.push进行路由跳转到另一个组件时,可以通过params或query来传递参数。 1. 使用params传参: // 在路由跳转时传递参数 router.push({ name: targetComponent, params: {paramName: paramValue // 参数名和值 } });// 在目标组件中通过$r…...
Mysql触发器
文章目录 1. 简介2. 触发器语法 1. 简介 触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的sql语句集合。触发器可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。使…...
认识doubbo和rpc
开个新坑,和大家一起学习Dubbo 3.X。我们按照一个由浅入深顺序来学习,先从使用Dubbo开始,再深入Dubbo的核心原理。 今天我们就从认识Dubbo开始,整体的内容可以分为3个部分: Dubbo是什么RPC是什么Dubbo的架构 正式开…...
get_views中list的arch格式
1 日历 -> 会议 <tree string"会议" sample"1" multi_edit"1"><header><button name"action_open_composer" type"object" context"{composition_mode:mass_mail}" string"发送邮件"…...
淘宝商品销量接口API更新(总销+精准月销API)
不少客户有获取淘宝商品销量的需求,淘宝商品销量接口主要用于以下业务场景。有不齐全的欢迎大家补充。 库存管理:商家可以通过接口获取到实时的销量信息,更好地进行库存管理。供应链计划:商家可以通过接口了解到商品的销售趋势&a…...
Android 11编译第三弹 ADB开启ROOT权限
一、为什么需要adb root权限 问题:Relese版本,默认adb访问会降级到shell权限,一些敏感操作不能进行,远程调试比较麻烦。且Release版本没有su模块,不能切换Root用户。 开启adb调试以后,默认进入adb是syste…...
《TCP/IP网络编程》--基于TCP实现字符串对话和文件传输
1--基于TCP实现字符串对话 主要需求: 服务器端和客户端各传递 1 次字符串,基于 TCP 协议,传递字符串前先以 4 字节整数型方式传递字符串长度,剩余部分为字符串数据; 注:下面的代码基于 Windows 系统实现&am…...
Feign负载均衡写法
Feign主要为了面向接口编程 feign是web service客户端,是接口实现的,而ribbon是通过微服务名字访问通过RestTemplate调用的,如下: 在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(类似…...
OpenCV(二十八):连通域分割
目录 1.介绍连通域分割 2.像素领域介绍 3.两遍法分割连通域 4.连通域分割函数 1.介绍连通域分割 连通域分割是一种图像处理技术,用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性,如相近的灰度值或颜色。连通域分割可以…...
达梦控制台还原报错“管道失败”
达梦数据库控制台还原报错“管道失败” 环境 主机操作系统:windows10 profession 达梦数据库版本:达梦7 问题背景 全新安装达梦7数据库后,创建数据库实例,需要恢复往期bat备份。在控制台配置指定搜索目录后,获取备份时…...
[杂谈]-快速了解直接内存访问 (DMA)
快速了解直接内存访问 (DMA) 文章目录 快速了解直接内存访问 (DMA)1、使用 DMA 需要什么?2、DMA介绍3、DMA 中的数据传输如何进行?4、DMA接口5、DMAC 控制器寄存器6、DMA 控制器编程模式6.1 突发模式(Burst Mode)6.2 循环窃取模式…...
java八股文面试[设计模式]——23种设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结 在GOF编写的设计模式(可复用面向对象软件的基础)一书中说道: 本书涉及的设计模式并不描述新的或未经证实的设计,我们只收录那些在不同系统中…...
mysql(十)mysql主从复制--主库切换
概述 可能为了更迭升级服务器,或者主库出现问题,又或者只是希望重新分配容量,此时需要切换主库。 如果这是计划内的切换,会相对容易点。只需要在从库上使用CHANGE MASTER TO命令,并设置合适的值。大多数的值都是可选…...
vue3项目的src下的各个文件夹介绍
在Vue 3项目中,通常的目录结构如下所示: src/|- assets/ # 存放静态资源文件,如图片、字体等|- components/ # 存放可复用的Vue组件|- views/ # 存放页面级别的Vue组件|- router/ # 存放路由相关的配置文件|- store…...
五、编译预处理
源程序编译预处理命令一律以‘#’开头 5.1宏定义 不带参数的宏定义 # define 宏名 字符串 宏命令之后,出现宏名的地方均用其对应的字符串来替换。 宏替换是一种”机械替换“,宏定义语句后一般不加分号,因为它仅具有替换功能,…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
