STM32中的DMA:解锁高效数据传输的秘密武器(内附实例)

news2024/9/20 14:46:28

目录

引言

理解DMA:数据的高效搬运工

DMA的主要特性

多优先级请求

事件标志

数据对齐

多样化的数据传输路径

广泛的数据源与目标

最大数据长度

DMA寄存器详解

增量与循环模式

DMA中断机制

​编辑

小实验:DMA-ADC串口发送


引言

在现代嵌入式系统设计中,数据传输速度和效率是关键的性能指标。传统的数据传输方法往往需要CPU的频繁干预,这不仅消耗了CPU的宝贵资源,而且限制了系统的整体性能。为了解决这一问题,STM32微控制器集成了DMA控制器,它能够在无需CPU介入的情况下,实现数据在不同存储器区域或存储器与外设之间的高速传输。

理解DMA:数据的高效搬运工

DMA,全称为Direct Memory Access(直接存储器访问),是一种硬件机制,通过为RAM与I/O设备开辟一条直接传送数据的通道,避免了CPU的直接控制和中断处理的开销,显著提高了CPU的效率和系统性能。

DMA的主要特性
多优先级请求
  • 同一个DMA模块可以处理多个优先级请求:很高、高、中等、低。
事件标志
  • 每个通道配备三个事件标志:DMA半传输完成、DMA传输完成、DMA传输出错。
数据对齐
  • 数据源、目标源和数据传输宽度可以按字节(8位)、半字(16位)、全字(32位)对齐。
多样化的数据传输路径
  • 支持存储器<->存储器、外设<->存储器、外设<->外设的数据传输。
广泛的数据源与目标
  • 闪存(flash)、SRAM、APB、AHB、外设均可作为源或目标。
最大数据长度
  • 搬移数据的最大长度为65535字节。
DMA寄存器详解
  • DMA_CPARx:设置外设地址的寄存器。
  • DMA_CMARx:设置存储器地址的寄存器。
  • DMA_CCRx:配置数据传输方向和其他控制选项。
  • DMA_CNDTRx:设置传输的数据量。

 

增量与循环模式
  • 增量模式:在外设搬移到存储器时,自动增加存储器地址,防止数据覆盖。
  • 循环模式:在一组数据传输完成后,自动恢复初始配置,实现循环数据传输。
DMA中断机制
  • 每个DMA通道在DMA传输过半、传输完成和传输出错时,可产生中断,通过配置寄存器位来启用这些中断,增强了应用的灵活性。

小实验:DMA-ADC串口发送

实验要求:使用DMA发送通过串口打印ADC采集的光照值

从外设———》内存

以下以CubeMax为例:

什么时候搬移?ADC转换完成之后,再用DMA搬移

怎么用?

启动:HAL库手册(86页)

HAL_StatusTypeDef HAL_ADC_Start_DMA (ADC_HandleTypeDef * hadc, uint32_t * pData, uint32_t Length)

功能:启动ADC开始转换,并通过DMA搬移转换结果。

参数:ADC_HandleTypeDef * hadc 句柄

uint32_t * pData 数据存放地址

uint32_t Length 数据长度

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

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

相关文章

SpringCloudAlibaba基础五 Nacos配置中心

一 Nacos配置中心介绍 官方文档&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config Nacos 提供用于存储配置和其他元数据的 key/value 存储&#xff0c;为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos C…

集成sa-token前后端分离部署配置corsFliter解决跨域失效的真正原因

文章目录 1.前言2.问题复现3.解决方法3.1 方式一&#xff1a;后端修改CorsFilter源码3.2 方式二&#xff1a;前端禁用或移除浏览器referrer-policy引用者策略 4.总结 1.前言 缘由请参看下面这篇文章&#xff1a;sa-token前后端分离解决跨域的正确姿势 https://mp.weixin.qq.co…

气象观测站应该怎么选?

在气候变化日益严峻的今天&#xff0c;气象观测站的重要性不言而喻。它们不仅为气象部门提供宝贵的数据支持&#xff0c;还直接关系到农业生产、交通运输、城市规划等多个领域的决策。 在选择气象观测站时&#xff0c;首先要明确自己的功能需求。例如&#xff0c;是用于学术研究…

每日一练全新考试模式解锁|考试升级

&#x1f64b;频繁有小伙伴咨询&#xff1a;我想举办一场历时一个月的答题活动&#xff0c;学生可以每天打开答题&#xff0c;活动完结后可以导出每天的答题成绩 此前我们都会让小伙伴创建30场考试&#xff0c;然后使用批量分享功能组合起来&#xff0c;对外分享一个链接就可以…

类与对象2 3 十十一 杂烩

目录 组合类 作用域 static friend 常对象常成员函数 常引用 对象指针&#xff08;指向对象&#xff09; string 组合类 类的组合/聚合&#xff1a;将已有的类的对象作为新的类的成员。 组合类初始化&#xff1a;内嵌对象成员初始化 普通数据成员初始化。 类必须先…

24下软考《系统规划与管理师》,一个超好背的核心知识点几页纸!

距离下半年软考考试的时间越来越近了&#xff0c;想要备考《系统规划与管理师》的小伙伴们趁着这两周赶紧准备起来&#xff0c;虽说系规相对较好考&#xff0c;但作为高级科目&#xff0c;它要记得东西还是不少的。 今天给大家整理了——系统规划与管理师考前几页纸&#xff0c…

C++语言相关的常见面试题目(二)

1.vector底层实现原理 以下是 std::vector 的一般底层实现原理&#xff1a; 内存分配&#xff1a;当创建一个 std::vector 对象时&#xff0c;会分配一块初始大小的连续内存空间来存储元素。这个大小通常会随着 push_back() 操作而动态增加。 容量和大小&#xff1a;std::vec…

多卡(3090)部署通义千问Qwen2-72B大模型并加速至38tps:vLLM库的使用和错误排查

前一篇文章做了Qwen1的加速&#xff0c;其中关于Auto-GPTQ的安装问题在Qwen2中依然适用。但是Qwen2比Qwen1加载模型快了很多&#xff0c;笔者也不知道为什么。 下面是Hugging Face transformer版的千问2&#xff0c;token生成速度在15个每秒左右&#xff0c;但还不够快&#x…

Spring——IOC创建对象方式

可参考官网&#xff1a;https://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.htmlhttps://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.html 1. 使用无参构造创建对象&#xff0…

Unity--射线检测--RayCast

Unity–射线检测–RayCast 1.射线检测的含义 射线检测,根据名称而言,使用一条射线来检测是击中了某个物体/多个物体 射线检测的包含两个部分: 射线和检测 2.射线检测可以用在哪些地方 射击游戏&#xff1a; 玩家的瞄准和射击&#xff1a;检测玩家视线是否与敌人或其他目标…

初识c++(命名空间,缺省参数,函数重载)

一、命名空间 1、namespace的意义 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全 局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名 冲突…

ubuntu24.04按关键字卸载不需要的apt包

使用的时候发现一个imagemagic无法正常读取文件&#xff0c;试图卸载 man apt经过尝试后&#xff0c;发现list的一个神奇关键字&#xff0c;用来显示已安装的软件包 sudo apt list --installed | grep image按image关键字过滤&#xff1a; 之后按软件名卸载即可 sudo apt pu…

数学建模论文写作文档word

目录 1. 摘要写法1.1 确定题目与方法1.2 编写开头段落1.3 填写问题一1.4 重复步骤3填写其他问题1.5 编写结尾段落1.6 编写关键词 2. 问题重述2.1 问题背景2.2 问题提出 3. 问题分析4. 问题X模型的建立与求解5. 模型的分析5.1 灵敏度分析5.2 误差分析&#xff08;主要用于预测类…

DAY2:插件学习

文章目录 插件学习ClangGoogle TestCMakeDoxygen 收获 插件学习 Clang 是什么&#xff1a;Clang 是指 LLVM 项目的编译器的前端部分&#xff0c;支持对 C 家族语言(C、C、Objective-C)的编译。Clang 的功能包括&#xff1a;词法分析、语法分析、语义分析、生成中间中间代码 L…

浅析C++引用

浅析C引用"&" ​ C中引入了一个新的语言特性——引用(&)&#xff0c;它表示某一对象的别名&#xff0c;对象与该对象的引用都是指向统一地址。那么我们就来看看关于引用的一些知识点吧&#x1f9d0; 特性 引用在定义时必须初始化一个变量可以有多个引用引…

C-10 凸包

凸包 数学定义 平面的一个子集S被称为是凸的&#xff0c;当且仅当对于任意两点A&#xff0c;B属于S&#xff0c;线段PS都完全属于S过于基础就不详细介绍了 凸包的计算 github上找到了别人的代码&#xff0c;用4种方式实现了凸包的计算&#xff0c;把他放在这里链接地址htt…

六、数据可视化—Wordcloud词云(爬虫及数据可视化)

六、数据可视化—Wordcloud词云&#xff08;爬虫及数据可视化&#xff09; 也是一个应用程序 http://amueller.github.io/word_cloud/ Wordcloud词云&#xff0c;在一些知乎&#xff0c;论坛等有这样一些东西&#xff0c;要么做封面&#xff0c;要么做讲解&#xff0c;进行分析…

Echarts 实现数据可视化

Echarts 简介 Echarts 是一个开源的、免费的、成熟的、商业级图表可视化框架&#xff0c;是 Apache 开源社区的顶级项目之一&#xff0c;也是国内使用最多和最为广泛的可视化图表框架之一。 数据可视化图表框架并没有一个统一的行业标准&#xff0c;比较常见的有 D3、Highchart…

电子设备常用的胶水有哪些?

目录 1、502胶水 2、703胶水 3、704胶水 4、AB胶 5、红胶 6、Underfill 7、导电胶 8、UV胶 9、热熔胶 10、环氧树脂胶 11、硅酮胶 12、聚氨酯胶 13、丙烯酸胶 14、丁基胶 1、502胶水 502胶水&#xff0c;也被称为瞬间胶或快干胶&#xff0c;是一种非常常见的粘合…

如何下载Github上项目中的一个目录或几个文件

目录 问题的由来 GitZip for Github插件 Edge中插件的安装 Chome中插件的安装 插件的使用 Github授权 文件下载 问题的由来 经常使用Github的可能都会有这样的需求&#xff0c;有的时候一个仓库好几个GB&#xff0c;但是感兴趣的只是某个目录下的文件。Git没有单独下载…