stm32入门教程--DMA 超详细!!!

目录

简介

工作模式

1、数据转运+DMA

2、ADC扫描模式+DMA


简介

工作模式

1、数据转运+DMA

  这个例子的任务是将SRAM的数组DataA,转运到另一个数组DataB中,这个基本结构里的各个参数应该如何配置呢?

 首先是外设站点和存储器站点的起始地址、数据宽度、地址是否自增这三个参数,

在这个任务中,外设地址显然应该填DataA数组的首地址,存储器地址给DataB的地址,然后数据宽度,两个数组的类型都是uint8_t,,所以数据宽度都是按8位的字节传输

 我们想要的效果是DataA[0]转运到Data[0],DataA[1]转运到DataB[1],两个数组一一对应,所以转运完DataA[0]和DataB[0]之后,两个站点的地址都应该自增,都移动到下一个数据的位置,继续转运DataA[1]和DataB[1]这样来进行,如果左右都不自增,那就一直是DataA[0]转到DataB[0]其他数据不变。

 下一个数据是方向参数,显然就是外设站点转运到存储器站点了,如果想把DataB转运到DataA,可以把方向参数换过来,这样就是反向转运了

  然后就是传输计数器和是否要自动重装,这里显然幺转运7次,所以传输计数器给7,自动重装暂时不需要,之后触发选择部分 ,这里我们要选择软件触发 ,因为这里是存储器到存储器的数据转运 ,是不需要等待硬件时机的,尽快转运完成就行了 ,最后调用DMA_Cmd,给DMA使能,这样数据就会从DataA转运到DataB了 ,转运7次之后,传输计数器自减到0,DMA停止,转运完成 ,这里的数据转运是一种复制转运,转运完成后DataA的数据并不会消失,这个过程相当于把DataA的数据复制到了DataB的位置 这就是第一个存储器到存储器的数据转运 。

2、ADC扫描模式+DMA

  左边是ADC扫描的全部流程,这里有7个通道,触发一次之后,七个通道依次进行AD转换然后转换结果都放到ADC_DR数据寄存器里面 ,那我们要做的就是,在每个单独的通道转换完成之后,进行一次DMA数据转运,并且目的地址进行自增,这样数据就不会被覆盖,所以这里DMA的配置就是外设地址,写入ADC_DR这个寄存器的地址,寄存器的地址,可以在SRAM中定义的一个数组ADvalue然后把ADvalue的地址当作存储器的地址 ,之后数据宽度 ,因为ADC_DR和SRAM数组 ,我们要的都是uint16_t的数据,所以数据宽度都是16位的半字节传输 ;

地址是否自增,从这个图里,显然是外设地址不自增,存储地址自增,传输方向是外设站点到存储器站点 ,传输计数器,这里通道有七个,所以计数7次;

计数器是否自动重装这里可以看ADC的配置,ADC如果是单次扫描,那DMA的传输计数器可以不自动重装,转换一轮就停止,如果ADC是连续扫描,那DMA就可以使用自动重装 ,在ADC启动下一轮转换的时候,DMA也启动下一轮转运,ADC和DMA同步工作

最后是触发选择,这里ADC_DR的值是在ADC但各通道转换完成后才会有效,所以DMA转运的时机,需要和ADC单个通道转换完成同步,所以DMA的触发要选择ADC的硬件触发。

这里硬件触发要说明一下,ADC扫描模式,在每个单独的通道转换完成后,没有任何标志位,也不会触发中断,所以我们程序不太好判断,某一个通道转换完成的时机是什么时候,索然单个通道转换完成后,不产生任何标志位和中断,但是他应该会产生DMA请求去触发DMA转运。

一般来说,DMA最常见的用途就是配合ADC的扫描模式,因为ADC扫描模式有个数据覆盖的特征,或者说这个数据覆盖的问题是ADC固有的缺陷,这个缺陷使ADC和DMA成了最常见的伙伴,ADC对DMA的续修是非常强烈的 ,像其他一些外设,使用DMA是可以提高效率,是锦上添花的操作。

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

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

相关文章

宇音天下最新力作 | VTX356语音识别合成芯片问世

北京宇音天下科技有限公司,依托在语音技术领域的丰富经验和技术积累,成功推出了一款具有里程碑意义的语音识别合成芯片——VTX356。这款芯片的问世,不仅彰显了公司在智能语音处理领域的专业实力,也预示着智能家居、车载电子、智能…

STM32F1+HAL库+FreeTOTS学习21——内存管理

STM32F1HAL库FreeTOTS学习21——内存管理 1. 内存管理简介2. 内存管理相关的API函数3. 内存管理算法4. 内存管理实验4.1. 实验内容4.2 代码实现4.3 运行结果 5. 总结 上一期我们学习了FreeRTOS中的低功耗Tickless模式,这一期我们学习最后一个章节:内存管…

Linux高手进阶

查看系统资源占用: top:查看CPU、内存使用情况,类似 windows 的任务管理器 默认 5秒刷新一次语法: 直接输入 top按 q 或 ctrl c 退出内容详解: 第一行: top:命令名称 -系统时间up 23:57 min &…

vue3学习记录-单文件组件 CSS 功能

vue3学习记录-单文件组件 CSS 功能 1.组件作用域 CSS1.1为什么要用到样式穿透(:deep())1.2 插槽选择器:slotted(div)1.3 全局选择器:global 2.CSS Modules2.1 基本用法2.2 自定义注入名称2.3 与组合式 API 一同使用 3.…

postman如何安装旧版本不升级(以9.31和11.10版本为例)

postman版本超过10.x(包含10.x),有个大的麻烦,就是需要登录账号,如果网络不佳(其实是外网受限),那就很难受了 功能页面都进不去了!而8.x /9.x等以下版本就不需要登录了。 比如9.31.30这个版本就…

Cesium基础-(Entity)-(Corridor 走廊)

里边包含Vue、React框架代码详细步骤、以及代码详细解释 4、Corridor 走廊 以下是 CorridorGeometry 类的属性、方法和静态方法,以表格形式展示: 属性 属性名类型默认值描述positionsArray.定义走廊中心的坐标点数组。widthnumber走廊

PHP程序开发基础

PHP简介及其开发环境与工具一、PHP简介 PHP是一种流行的服务器端脚本语言,最初由拉斯姆斯勒多父于1994年创建,旨在通过C语言编写小程序以统计网站的访问流量。自那时以来,PHP已经经历了多个版本的迭代,功能不断增强,应…

使用Canvas绘制地图

既然是通过canvas来绘制地图,那肯定是需要地图的数据信息的。接下来跟着我的脚步去实现这些细节。 地图数据 地图数据怎么来呢?当然是怎么简单怎么来 npm i surbowl/world-geo-json-zh 这个第三方包是简体中文 Geo JSON 世界地图,带有国家…

丁子晴作品《指尖的爱的温度》荣获“金犊奖”全球最佳新锐奖

第33届时报金犊奖颁奖盛典于10月18日在中国成都西部智谷数字体验中心隆重举行。丁子晴的作品《指尖的爱的温度》在激烈的竞争中脱颖而出,荣获了第33届“金犊奖”全球最佳新锐奖。享有盛誉的“金犊奖”是一个全球性的奖项,以其专业严谨、创意水平高的特点,被业界誉为“青年创意的…

Opensearch集群部署【docker、服务器、Helm多种部署方式】

操作系统兼容性 我们建议在 Red Hat Enterprise Linux (RHEL) 或使用systemd的基于 Debian 的 Linux 发行版上安装 OpenSearch ,例如 CentOS、Amazon Linux 2 和 Ubuntu Long-Term Support (LTS)。OpenSearch 应该适用于大多数 Linux 发行版,但我们只测…

高级java每日一道面试题-2024年10月22日-JVM篇-JVM堆栈概念,何时销毁对象?

如果有遗漏,评论区告诉我进行补充 面试官: JVM堆栈概念,何时销毁对象? 我回答: JVM堆栈概念 栈(Stack): 定义:栈是Java虚拟机为每个线程分配的内存区域,用于存储线程执行时的局部变量、操作数栈、动态链接和方法返…

串口调试工具

https://download.csdn.net/download/jinhuding/89933087?spm1001.2014.3001.5501

boost笔记:boost::Graph中找出所有环

1. 问题描述 本文描述了找出一个有向连通图中所有的环的解决方案 测试用到的有向连通图 2. 自写算法 通过深度优先遍历算法,发现回边时,即存在环的原理来找出环。对于用共享边的环,以下算法有些环找不出来,如上图中的2->8…

DriftingBlues: 1渗透测试

靶机:DriftingBlues: 1 DriftingBlues: 1 ~ VulnHubhttps://www.vulnhub.com/entry/driftingblues-1,625/ 攻击机:kail linux 2024 1,将两台虚拟机网络连接都改为NAT模式,并查看靶机的MAC地址 2,攻击机上做主机扫描发现靶机 靶机I…

【C++单调栈 记忆化搜索】1130. 叶值的最小代价生成树|1919

本文涉及的基础知识点 C单调栈 C记忆化搜索 C动态规划 LeetCode1130. 叶值的最小代价生成树 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点。 数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。 每…

【我的 PWN 学习手札】setcontext + ROP

堆上的setcontext利用系列还有: 【我的 PWN 学习手札】setcontext shellcode-CSDN博客 目录 前言 一、setcontext gadget 二、setcontext ROP (一)setcontext设置寄存器 (二)ROP链布置 三、图示 四、模板与…

【算法】Kruskal最小生成树算法

目录 一、最小生成树 二、Kruskal算法求最小生成树 三、代码 一、最小生成树 什么是最小生成树? 对于一个n个节点的带权图,从中选出n-1条边(保持每个节点的联通)构成一棵树(不能带环),使得…

信号完整性SI总结【小登培训】

信号完整性问题的根源通常在于阻抗不匹配、串扰、时序误差、电磁辐射和电源噪声。解决这些问题需要从PCB设计、布线、材料选择、匹配和屏蔽等多个方面综合考虑,并结合眼图分析等工具进行调试和优化。确保信号完整性对于高速电路设计尤为重要,影响系统的可…

【蓝桥杯选拔赛真题78】python电话号码 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python电话号码 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python电话号码 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…