STM32-DMA数据转运(8)
目录
一、简介
二、存储器映像
三、DMA框图编辑
四、DMA基本结构
五、两个数据转运的实例
一、简介
直接存储器存取简称DMA(Direct Memory Access),它是一个数据转运小助手,主要用来协助CPU,完成数据转运的工作。
它能直接访问STM32内部的存储器,包括运行内存SRAM、程序存储器Flash和寄存器等。
DMA可以提供外设(数据寄存器DR)和存储器(SRAM和Flash),或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源。
它有12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道),每个通道都支持软件触发和特定的硬件触发,外设和存储器直接的数据转运,一般使用硬件触发;存储器和存储器之间的数据转运,一般使用软件触发。
STM32F103C8T6 DMA资源:DMA1(7个通道)。
二、存储器映像
STM32中的存储器类型及其对应地址。
ROM:只读存储器,是一种非易失性、掉电不丢失的存储器。
RAM:随机存储器,是一种易失性、掉电丢失的存储器。
三、DMA框图
上图中,除了CPU外,其他都可以看成是一种寄存器。寄存器是一种特殊的存储器,一方面CPU可以对寄存器进行读写,就像写运行内存一样;另一方面,寄存器的背后,都连接了一根导线,这些导线可以用于控制外设电路的状态,比如置引脚的高低电平、导通和断开开关、切换数据选择器,或者还可以多位结合起来,当作计数器、数据寄存器等等,寄存器是连接软件和硬件的桥梁,软件读写寄存器,就相当于再控制硬件执行。
上图中的总线矩阵的左端,是主动单元,拥有存储器的访问权,右边是被动单元,只能被左边的主动单元读写。
CPU中,Dcode是专门访问Flash的,系统总线是访问除Flash外的其他资源。
DMA1和DMA2各自有一条DMA总线,且它们分别有7个通道和5个通道,各个通道又可以分别设置它们转运数据的源地址和目的地址,都可以独立地工作,但是DMA总线只有一条,所有的通道只能分时复用这条总线,如果产生冲突,就会由冲裁器根据通道的优先级决定先后使用顺序。
AHB从设备是DMA自身的寄存器,它也连接在总线右侧的AHB总线上,因此DMA既是总线矩阵的主动单元,可以读写各类存储器,也是AHB总线上的被动单元,CPU通过AHB总线就可以对DMA进行配置。
各类外设需要触发DMA数据转运时,会通过中间的DMA请求,来向DMA发出硬件触发信号,之后DMA才会执行数据转运的工作。
Flash存储器是只读存储器,如果通过DMA数据转运,就会出错,需要专门用Flash接口控制器对Flash进行写入操作。
四、DMA基本结构
DMA的数据转运可以是从外设寄存器到存储器,也是可以从存储器到外设寄存器,具体由一个方向参数来控制。还有从Flash到SRAM,SRAM到SRAM的数据转运。
两个转运站点各有三个参数,其中:
(1)起始地址决定了数据从哪里来,到哪里去。
(2)数据宽度决定一次转运多大的数据,包括字节Byte(uint8_t,8位)、半字HalfWord(uint16_t,6位)和字Word(uint32_t,32位)。如果站点之间的数据宽度不一样,把小的数据转到大的数据中,高位会补0;如果把大的数据转到小的数据中,那么大的数据高位就会被舍弃掉,只存了大数据的低位。
(3)地址是否自增这个参数是指一次转运完成后,下一次转运是否把地址移到下一个位置去,相当于指针中的p++作用。
传输计数器,这个是用来指定转运次数的,每次转运完成后,这个计数器都会自减1,减到0以后,DMA就不再进行数据转运了,并且站点的自增地址也会恢复到起始的位置。比如这个传输计数器写入5,那么DMA就只能进行5次数据转运。
自动重装器的作用是在传输计数器减到0以后,是否要自动恢复到最初的值,这个可以理解成是循环模式。
最下面就是DMA的触发控制,包括硬件触发(外设到存储器)和软件触发(存储器到存储器),具体触发方式由M2M参数决定,如果写入0,就是硬件触发,写入1,就是软件触发。这个参数的执行逻辑不是调用一次,触发一次,而是以最快的速度,连续不断地触发DMA,迅速把传输计数器清零,完成这一轮的转运。这里的触发可以理解成是连续触发的。
注:软件触发和循环模式不能同时使用,软件触发是把传输计数器清零,而循环模式是清零后自动重装,如果同时使用,DMA就停不下来了。
DMA初始化步骤:
(1)RCC开启DMA时钟;
(2)配置DMA结构体参数,包括起始地址、数据宽度、地址是否自增、方向、传输计数器、是否自动重装、选择触发源和通道优先级。
(3)通过函数DMA_Cmd,打开DMA;
五、两个数据转运的实例
用DMA来进行数据转运,这里的数据转运是一种复制转运,转运完成后,数据仍然会存在。
用DMA来配合ADC的扫描模式。
ADC的扫描模式触发一次后,7个通道依次进行AD转换,转换结果都放在ADC_DR数据寄存器中。
在每次转换完成后,都需要进行一次DMA数据转运,并且目的地址进行自增,防止数据被覆盖
相关文章:

STM32-DMA数据转运(8)
目录 一、简介 二、存储器映像 三、DMA框图编辑 四、DMA基本结构 五、两个数据转运的实例 一、简介 直接存储器存取简称DMA(Direct Memory Access),它是一个数据转运小助手,主要用来协助CPU,完成数据转运的工作…...

电机控制储备知识学习(一) 电机驱动的本质分析以及与磁相关的使用场景
目录 电机控制储备知识学习(一)一、电机驱动的本质分析以及与磁相关的使用场景1)电机为什么能够旋转2)电磁原理的学习重要性 二、电磁学理论知识1)磁场基础知识2)反电动势的公式推导 附学习参考网址欢迎大家…...

使用 React 实现语音识别并转换功能
在现代 Web 开发中,语音识别技术的应用越来越广泛。它为用户提供了更加便捷、自然的交互方式,例如语音输入、语音指令等。本文将介绍如何使用 React 实现一个简单的语音识别并转换的功能。 功能概述 我们要实现的功能是一个语音识别测试页面࿰…...

[Git]ssh下用Tortoisegit每次提交都要输密码
问题描述 ssh模式下,用小乌龟提交代码,即使在git服务端存储了公钥,仍然要每次输入密码。 原因分析 小乌龟需要额外配置自己的密钥,才能免除每次输密码。 解决方案 1.配置好ssh密钥 具体方法参考我前一篇文章: […...

如何查看项目是否支持最新 Android 16K Page Size 一文汇总
前几天刚聊过 《Google 开始正式强制 Android 适配 16 K Page Size》 之后,被问到最多的问题是「怎么查看项目是否支持 16K Page Size」 ?其实有很多直接的方式,但是最难的是当你的项目有很多依赖时,怎么知道这个「不支持的动态库…...

ESP32C3连接wifi
文章目录 🔧 一、ESP32-C3 连接 Wi-Fi 的基本原理(STA 模式)✅ 二、完整代码 注释讲解(适配 ESP32-C3)📌 三、几个关键点解释🔚 四、小结 🔧 一、ESP32-C3 连接 Wi-Fi 的基本原理&a…...
HTTP方法和状态码(Status Code)
HTTP方法 HTTP方法(也称HTTP动词)主要用于定义对资源的操作类型。根据HTTP/1.1规范(RFC 7231)以及后续扩展,常用的HTTP方法有以下几种: GET:请求获取指定资源的表示形式。POST:向指…...

机器学习中分类模型的常用评价指标
评价指标是针对模型性能优劣的一个定量指标。 一种评价指标只能反映模型一部分性能,如果选择的评价指标不合理,那么可能会得出错误的结论,故而应该针对具体的数据、模型选取不同的的评价指标。 本文将详细介绍机器学习分类任务的常用评价指…...
# YOLOv3:基于 PyTorch 的目标检测模型实现
YOLOv3:基于 PyTorch 的目标检测模型实现 引言 YOLOv3(You Only Look Once)是一种流行的单阶段目标检测算法,它能够直接在输入图像上预测边界框和类别概率。YOLOv3 的优势在于其高效性和准确性,使其在实时目标检测任…...

MySQL的Docker版本,部署在ubantu系统
前言 MySQL的Docker版本,部署在ubantu系统,出现问题: 1.执行一个SQL,只有错误编码,没有错误提示信息,主要影响排查SQL运行问题; 2.这个问题,并不影响实际的MySQL运行,如…...

Mac QT水平布局和垂直布局
首先上代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QPushButton> #include<QVBoxLayout>//垂直布局 #include<QHBoxLayout>//水平布局头文件 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), …...
服务器制造业中,L2、L6、L10等表示什么意思
在服务器制造业中,L2、L6、L10等是用于描述服务器生产流程集成度的分级体系,从基础零件到完整机架系统共分为L1-L12共12个等级。不同等级对应不同的生产环节和交付形态,以下是核心级别的具体含义: L2(Level 2…...

回答 | 图形数据库neo4j社区版可以应用小型企业嘛?
刚在知乎上看到了一个提问,挺有意思,于是乎,贴到这里再简聊一二。 转自知乎提问 当然可以,不过成本问题不容小觑。另外还有性能上的考量。 就在最近,米国国家航空航天局——NASA因为人力成本问题,摒弃了使…...

Linux操作系统从入门到实战(二)手把手教你安装VMware17pro与CentOS 9 stream,实现Vim配置,并配置C++环境
Linux操作系统从入门到实战(二)手把手教你安装VMware17pro与CentOS 9.0 stream,实现Vim配置,并编译C文件 前言一、安装VMware17pro二、安装CentOS9.02.1 为什么选择CentOS9,与CentOS7对比2.1 官网下载CentOS9.02.2 国内…...

软考架构师考试-UML图总结
考点 选择题 2-4分 案例分析0~1题和面向对象结合考察,前几年固定一题。近3次考试没有出现。但还是有可能考。 UML图概述 1.用例图:描述系统功能需求和用户(参与者)与系统之间的交互关系,聚焦于“做什么”。 2.类图&…...
后端系统做国际化改造,生成多语言包
要将你当前系统中的 中文文案提取并翻译为英文语言包,建议采用 自动扫描 翻译辅助 语言包生成 的方式,流程如下: ✅ 一、目标总结 提取:扫描后端 C# 和 Java 代码中的 中文字符串 翻译:将中文自动翻译为英文&#x…...

论文学习_Trex: Learning Execution Semantics from Micro-Traces for Binary Similarity
摘要:检测语义相似的函数在漏洞发现、恶意软件分析及取证等安全领域至关重要,但该任务面临实现差异大、跨架构、多编译优化及混淆等挑战。现有方法多依赖语法特征,难以捕捉函数的执行语义。对此,TREX 提出了一种基于迁移学习的框架…...

在VirtualBox中安装虚拟机后不能全屏显示的问题及解决办法
在VirtualBox中安装Windows或Linux虚拟机后,将遇到启动虚拟机后,只能在屏幕中的一块区域里显示虚拟机桌面,却不能全屏显示的问题。要解决此问题,需要在虚拟机中安装与VirtualBox版本相对应的VBox GuestAdditons软件。 这里…...
《大规模电动汽车充换电设施可调能力聚合评估与预测》MATLAB实现计划
模型概述 根据论文,我将复刻实现结合长短期记忆网络(LSTM)和条件变分自编码器(CVAE)的预测方法,用于电动汽车充换电设施可调能力的聚合评估与预测。 实现步骤 1. 数据预处理 导入充电数据 (Charging_Data.csv)导入天气数据 (Weather_Data.csv)导入电…...
CSS flex:1
在 CSS 中,flex: 1 是一个用于弹性布局(Flexbox)的简写属性,主要用于控制 flex 项目(子元素)如何分配父容器的剩余空间。以下是其核心作用和用法: 核心作用 等分剩余空间:让 flex …...
Python 字典键 “三变一” 之谜
开头:读者的“玄学”字典谜题 上周,朋友发来了一段让他抓耳挠腮的代码: >>> {True: foo, 1: bar, 1.0: baz} {True: baz} “我明明定义了布尔True、整数1、浮点数1.0三个键,结果字典里只剩True一个键,值…...
Spring Boot中HTTP连接池的配置与优化实践
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、HTTP连接池的核心价值 在微服务架构和分布式系统场景中,HTTP客户端频繁创建/断开连接会产生显著的性能损耗。通过连接池技术可以实现&#x…...
初识XML
初识XML <?xml version"1.0" encoding"utf-8" ?> <!--根标签只能有一个--> <!--第一行永远都是 <?xml version"1.0" encoding"utf-8" ?> 前面不允许出现任何其他东西,空格换行等均不行 --> &…...

element-ui分页的使用及修改样式
1.安装 npm install element-ui -S 2.在main.js中引入,这里是全部引入,也可以按需引入 import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI) 3.使用 layout"prev, pager, next, jumper" :jumpe…...
2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题
文章目录 题目A题目C:抽奖题目D:红黑树题目E:黑客题目F:好串的数目 https://www.dotcpp.com/oj/train/1166/ 题目A 找到第2025个素数 #include <iostream> #include <vector> using namespace std; vector<i…...
物理:人的记忆是由基本粒子构成的吗?
问题: 基因属于人体的一部分,记忆也是人体的一部分,那么为什么基因可以代际遗传,但是记忆却被清空重置。如果基因是由粒子构成,那么记忆是不是也应该由粒子构成?如果记忆是粒子构成的,那么能否说明记忆永恒,即使死亡了身体被分解了,那么只要保证其身体有关的所有粒子被…...
Memcached 的特性和使用场景介绍,以及集群搭建
以下是 Memcached 的特性和使用场景介绍,以及集群搭建的详细示例: 特性 高性能 内存存储:数据存储在内存中,读写速度极快。简单协议:使用基于文本的简单协议,通信高效。分布式架构 一致性哈希:采用一致性哈希算法,将数据均匀分布到多个节点,支持动态增减节点,减少数…...
uni-app,小程序中的addPhoneContact,保存联系人到手机通讯录
文章目录 方法详解简介 基本语法参数说明基础用法使用示例平台差异说明注意事项最佳实践 方法详解 简介 addPhoneContact是uni-app框架提供的一个实用API,用于向系统通讯录添加联系人信息。这个方法在需要将应用内的联系人信息快速保存到用户设备通讯录的场景下非…...

从数据中台到数据飞轮:数字化转型的演进之路
从数据中台到数据飞轮:数字化转型的演进之路 数据中台 数据中台是企业为整合内部和外部数据资源而构建的中介层,实现数据的统一管理、共享和高效利用,目标是打破信息孤岛,提高数据使用效率,支持业务决策和创新 实施成本…...
Spring Boot 注解详细解析:解锁高效开发的密钥
一、引言 Spring Boot 以其快速开发、自动配置等特性,成为构建 Java 应用程序的热门框架。而注解在 Spring Boot 中扮演着至关重要的角色,它们如同魔法指令,简化了配置流程,增强了代码的可读性与可维护性。本文将深入剖析 Spring…...