【STM32】DMA直接存储器存取

1 DMA简介

DMA(Direct Memory Access)直接存储器存取

可以直接访问STM32的存储器的,包括运行SRAM、程序存储器Flash和寄存器等等

DMA可以提供外设寄存器和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源

12个独立可配置的通道: DMA17个通道), DMA25个通道)

每个通道都支持软件触发和特定的硬件触发

存储器到存储器转运,需要软件触发,一股脑的转运

外设到存储器的转运,需要硬件触发,触发一次转运一次。

STM32F103C8T6 DMA资源:DMA17个通道)

1.1 存储器映像

类型

起始地址

存储器

用途

ROM

0x0800 0000

程序存储器Flash(主闪存)

存储C语言编译后的程序代码

(下载程序的位置)

0x1FFF F000

系统存储器

存储BootLoader,用于串口下载

0x1FFF F800

选项字节

存储一些独立于程序代码的配置参数

RAM

0x2000 0000

运行内存SRAM

存储运行过程中的临时变量

0x4000 0000

外设寄存器

存储各个外设的配置参数

0xE000 0000

内核外设寄存器

存储内核各个外设的配置参数

ROM:只读存储器,非易失性、掉电不丢失的存储器;

RAM:随机存储器,易失性,掉电丢失的存储器。

1.2 DMA框图

可以看作是CPU+存储器两个东西

Flash是主闪存,SRAM是运行内存。各个外设也可以看出存储器。

寄存器是连接软件和硬件的桥梁,软件读写寄存器相当于控制硬件的执行。

使用DMA转运归类为一类问题:从某个地址取值,再放到另一个地址。

利用总线访问,分为主动和被动。

DMA要有访问的主动权。

产生冲突时,由仲裁器根据通道的优先级决定先后顺序。

DMA既是总线矩阵的主动单元,可以读写各种寄存器,也是AHB上的被动单元。

Flash一般不能写入,需要配置才可以写入。

1.3 DMA的基本结构

左边是外设寄存器站点,右边是存储器站点,包括Flash和SRAM(存储器一般特指Flash和SRAM)。DMA的转运可以是从外设到存储器,也可以是从存储器到外设,有一个方向的参数可以控制;还有一种转运方式存储器到存储器。Flash到SRAM/SRAM到SRAM。

数据宽度的作用是指定一次转运要按多大的数据宽度来进行。

传输寄存器用来指定总共转运几次的,自减计数器。

重装寄存器:当传输寄存器减到0后,是否要自动恢复到最初的值。(单次/循环)

触发源有软件触发和硬件触发,由M2M(Memory to Memory)决定,软件触发的逻辑是:以最快的速度,连续不断的触发DMA,争取早点把传输计数器清零,完成这一轮的转换。软件触发和循环模式不能同时使用。(存储器到存储器的转运)

硬件触发源可以选择ADC、串口、定时器等(一般与外设转运有关)

DMA转运的条件:

(1)开关控制,DMA_Cmd必须使能;

(2)传输计数器必须大于0;

(3)必须要有触发源。

(4)以此循环,开启下一次,但是必须先关闭DMA,再给传输计数器传值。

1.4 DMA请求

DMA触发部分

每个通道都有一个数据选择器,选择硬件触发或者软件触发,EN=0数据选择器不工作;EN=1数据选择器工作。当M2M位=1时选择软件触发,M2M=0时选择硬件触发。

每个通道的触发源都是不一样的,即硬件触发要看通道,软件触发则是随意的。

通道1的硬件触发是ADC1、TIM2的通道3和TIM4的通道1,选择哪个触发源呢?根据外设是否开启的DMA输出来决定的,比如ADC1有个库函数,ADC_DMACmd。三个都开始是或门,一般开启一个。

7个触发源进入到仲裁器,进行优先级判断,最终产生内部的DMA1请求。(默认通道号越小,通道优先级越高,也可以配置)

1.5 数据宽度与对齐

如果转运的时候,数据宽度都一样,那就是正常的一个个转运;如果数据宽度不一样,则按这个表处理。

目标的数据宽度>源端数据宽度,在目标数据前面多出的地方补0;

目标的数据宽度<源端数据宽度,读B1B0,只写入B0;读B3B2,只写入B2,把多出的高位舍弃

1.6 数据转运+DMA

任务是:将SRAM里面的数组DataA搬运到另一个数组DataB中。

外设地址是DataA数组的首地址;存储器地址是DataB数组的首地址;

数据宽度,两个都是uint8_t;

两个站点的地址都自增;

方向参数:外设站点转运到存储器站点了。

传输计数器:7

自动重装暂时不需要;

使用软件触发(存储器到存储器)

复制转运DataA的数据不会消失。

1.7 ADC扫描模式+DMA

左边是ADC扫描模式的执行流程,触发一次7个通道依次进行AD转换,转换结果都放在ADC_DR数据寄存器里,需要做的是在每个单独的通道转换完成后,进行一次DMA数据转运,并且目的地址自增,所以DMA的配置是:外设地址写入ADC_DR这个寄存器的地址,存储器的地址可以在SRAM中定义一个数组ADValue,然后把ADValue的地址当作寄存器的地址;之后数据宽度是uint16_t。外设地址不自增,存储器地址自增;传输方向是外设站点到存储器站点;传输计数器是7;计数器是否重装根据ADC的配置,ADC单次扫描则传输计数器不重装;ADC循环扫描,则传输计数器自动重装;最后是触发选择,这里ADC_DR的值是在ADC单个通道转换完成之后才有效的,所以DMA转运的时机需要和ADC单个通道转换完成同步,所以DMA的触发选择ADC硬件触发。

ADC单个通道完成过不产生中断,但是会产生DMA请求,去触发DMA转运。

手册

2 DMA数据转运

3 DMA+AD多通道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/217485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

I.MX RT1170双核学习(1):双核通信之MU消息单元详解

在I.MX RT1170中&#xff0c;它有CM7和CM4核&#xff0c;而消息单元(MU)模块使SoC内的两个处理器能够通过MU接口传递消息以进行通信和协调。 文章目录 1 MU特性2 功能描述3 MU通信实例3.1 轮训实现多核通信3.1.1 MU_SetFlags和MU_GetFlags3.1.2 MU_SendMsg和MU_ReceiveMsg3.1.…

路由基本原理

目录 一、路由器概述 二、路由器的工作原理 三、路由表的形成 四、路由配置 1.连接设备 2.进入系统模式 3.进入接口模式 4.配置网络 5.下一跳的设置 6.设置浮动路由 7.设置默认路由 一、路由器概述 路由器&#xff08;Router&#xff09;是一种用于连接不同网络或子…

django实现增删改查分页接口

django实现增删改查分页接口(小白必备) 在上篇文章中我使用nodejs实现了增删改查分页接口&#xff0c;这一篇我们则使用django实现。 1.创建一个django项目&#xff0c;命令如下 python manage.py startapp myapp 2.在你自己的myapp文件夹中的models.py中定义你们自己的模型 f…

看图识药,python开发实现基于VisionTransformer的119种中草药图像识别系统

中药药材图像识别相关的实践在前面的系列博文中已经有了相应的实践了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff0c;每篇文章的侧重点不同&#xff1a; 《python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统》 《基于轻量级MnasNet模型开发构建40种常…

Kafka系列之:统计kafka集群Topic的分区数和副本数,批量增加topic副本数

Kafka系列之:统计kafka集群Topic的分区数和副本数,批量增加topic副本数 一、创建KafkaAdminClient二、获取kafka集群topic元信息三、获取每个topic的名称、分区数、副本数四、生成增加topic副本的json文件五、执行增加topic副本的命令六、确认topic增加副本是否成功一、创建K…

Linux——基本指令(二)

​ 个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 写在前面&#xff1a; 紧接上一章&#xff0c;我们在理解接下来的命令之前&#xff0c…

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机的各种信息如SN/ID等等(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机的各种信息如SN/ID等等&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机通过SDK获取相关生产信息的技术背景通过SDK获取相机信息的代码分析获取Baumer工业相机相关信息Baumer工业相机相关参数信息获取的测试 Baume…

【EventBus】EventBus源码浅析

二、EventBus源码解析 目录 1、EventBus的构造方法2、订阅者注册 2.1 订阅者方法的查找过程2.2 订阅者的注册过程1. subscriptionsByEventType 映射&#xff1a;2. typesBySubscriber 映射&#xff1a;2.3 总结订阅者的注册过程 3、事件的发送 3.1 使用Post提交事件3.2 使用p…

Axure的使用

1.Axure是什么&#xff1f;&#xff1f;&#xff1f; Axure是一款功能强大的原型设计工具&#xff0c;它可以让用户快速地创建交互式原型&#xff0c;并针对原型进行测试和改进。Axure的主要特点包括可定制的界面元素库、交互动画效果、条件逻辑、团队协作等功能&#xff0c;适…

day02、数据库系统的结构抽象与演变

数据库系统的结构抽象与演变 1、数据库系统的标准结构1.1 分层抽象1.2 数据视图与模式1. 3 三级模式与两层映像是数据系统的标准结构1.4 逻辑独立性与物理独立性 2 数据模型、数据、模式三者区别3. 文件系统到数据库&#xff08;数据的不可再分特性&#xff0c;我们将他称为第一…

python:五种算法(SSA、WOA、GWO、PSO、GA)求解23个测试函数(python代码)

一、五种算法简介 1、麻雀搜索算法SSA 2、鲸鱼优化算法WOA 3、灰狼优化算法GWO 4、粒子群优化算法PSO 5、遗传算法GA 二、5种算法求解23个函数 &#xff08;1&#xff09;23个函数简介 参考文献&#xff1a; [1] Yao X, Liu Y, Lin G M. Evolutionary programming made…

在做题中学习(32):只出现一次的数字 III

260. 只出现一次的数字 III - 力扣&#xff08;LeetCode&#xff09; 根据题目可知&#xff1a;有两个元素只出现一次&#xff0c;其余出现两次。 而在只出现一次的数字 I 里&#xff0c;只有一个元素出现一次&#xff0c;可以用异或的方式直接得到最后的答案&#xff0c;而此…

(C++)长度最小的子数组--滑动窗口

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://le…

智能优化算法应用:基于鸟群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鸟群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鸟群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鸟群算法4.实验参数设定5.算法结果6.参考文献7.MA…

时间序列预测 — CNN-LSTM实现多变量多步光伏预测(Tensorflow)

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 1.3 缺失值分析 2 构造训练数据 ​3 模型训练 3.1 CNN-LSTM网络 3.2 模型训练 4 模型预测 专栏链接&#xff1a;https://blog.csdn.net/qq_41921826/category_12495091.html 1 数据处理 1.1 导入库文件 import scip…

【华为数据之道学习笔记】4-1信息架构的四个组件

企业在运作过程中&#xff0c;首先需要管理好人和物等“资源”&#xff0c;然后管理好各类资源之间的联系&#xff0c;即各类业务交易“事件”&#xff0c;再对各类事件的执行效果进行“整体描述和评估”&#xff0c;最终实现组织目标和价值。以一个通用的工业企业运营为例&…

[NAND Flash 3.2] 3D NAND 工艺与发展前沿

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解NAND Flash》 全文 6200 字&#xff0c;​2023.12.12 更新 1. 导论 1.1 何为 3D NAND? 3D NAND, 也叫做 Sumsung V-NAND, 是一种高密度闪存。 以前&#xff0c;把NAND闪存颗粒&#xff0c;直接…

Java键值对Pair的使用方式和操作流程

Java键值对Pair的使用方式和操作流程 什么是键值对 键值对是一种常见的数据结构&#xff0c;它由一个唯一的键&#xff08;key&#xff09;和与之关联的值&#xff08;value&#xff09;组成。键和值之间存在一种映射关系&#xff0c;通过键可以查找或访问对应的值。 在键值对…

nodejs微信小程序+python+PHP健身服务应用APP-计算机毕业设计推荐 android

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

『App自动化测试之Appium基础篇』| Desired Capabilities详解与使用

App自动化测试之Appium基础篇』| Desired Capabilities详解与使用 1 关于appium driver2 安装appium driver3 安装Appium Python Client4 安装测试对象5 获取测试对象信息5.1 使用dumpsys5.2 使用AndroidKiller5.3 使用aapt 6 Capabilities详解6.1 Capabilities介绍6.2 automat…