简述单片机的DMA转运数据原理和编程实现

S32K3XX单片机DMA原理深度解析 较为全面地讲解了S32K3XX系列单片机DMA运行的基本构成、运行原理等。 阅读详情

【本文发布于https://blog.youkuaiyun.com/Stack_/article/details/115948212,未经许可不得转载,转载须注明出处】


在GD32F30x中,ADC0对应DMA0的通道0.

在初始化了ADC0和DMA0_CH0后,ADC0每转换完规则组中的一个通道,将转换结果存至RDATA寄存器,并向DMA0发出请求。

DMA0响应,从ADC0_RDATA寄存器读走AD值并存入我们预先开辟的一段内存空间(例如定义的一个数组),并将地址指向下一个数据位以备下一次写入(如此次从RDATA读出存入数组array[0],下次存入array[1])。

然后ADC0继续转换规则组中的下一个通道,转换完成再次发起dma请求,直到该规则组所有ADC通道被转换完。如果ADC0使能了连续模式,DMA使能了循环模式,将不断自动扫描AD通道并更新数组中的数据。



ADC规则组举例说明作用:

向规则序列寄存器写入该序列的待转换通道数量,并写入各个通道编号。

如RL写入4(表明该序列有5个待转换通道),RSQ0-RSQ4依次写入编号ADC_CHANNEL_11,ADC_CHANNEL_1,ADC_CHANNEL_3,ADC_CHANNEL_12,ADC_CHANNEL_13共5个通道)

然后将ADC配置为扫描模式,ADC将依次转换该序列的通道CH_11,CH_1,CH_3,CH12,CH_13。


在这里插入图片描述





编程实现ADC0自动扫描5个通道,AD值由DMA0自动转运至数组中,CPU直接从数组中读取对应通道AD值。

一、ADC0配置

  1. 使能ADC0扫描模式;
  2. 使能ADC0的DMA请求;
  3. 允许连续模式(ADC0扫描至RSQ4并完成之后自动折返从RSQ0开始顺序转换);
  4. 如上面所述配置规则组;

二、DMA0通道0配置

  1. 选择数据搬运方向为外设到存储器;
  2. 将ADC0_RDATA寄存器(AD转换结果寄存器)的地址写入DMA0通道0的外设基地址寄存器;
  3. 定义一个全局数组如uint16_t array[5] = {0x00};并将该数组的首地址写入DMA0通道0的存储器基地址寄存器;
  4. 配置数据传输总量(和ADC0规则组通道数对应);
  5. 使能循环模式(写到array[4]后折返array[0]继续写);
  6. 外设地址算法选择固定模式,因为固定从RDATA读出数据;
  7. 存储器地址算法选择增量模式即自动增加,写入array[0]后自动指向array[1]以备下次写入;
  8. 外设和存储器位宽均选择16位,因为为12位AD值,所以定义的数组为uint16_t;

三、使能ADC0和DMA0通道0

四、如果只需要一直转换AD值,则使能ADC0外部触发并向ETSRC写入7触发转换(软件触发)。



配置完成后,ADC0将循环转换5个通道数据并请求DMA0,DMA0循环将5个通道转换结果依次存入array[0] ~ array[4].



STM32配置此功能的步骤与上述类似。

STM32中的DMA数据转运——下篇 在上篇文章中,我们讨论了STM32中的DMA(直接存储器访问)及其工作原理、存储器类型和总线设计。接下来,我们将更深入地探讨DMA的具体配置方法、常见应用场景以及一些实际设计中的注意事项。 阅读详情

相关推荐

DMA通信原理和编程方法

学习DMA时,实验STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数

qq_58804208的博客 2315

STM32(5)-DMA概念详细解析

DMA只是一种技术,还要把他和具体的外设结合起来,才能发挥其最大的作用,下一篇我将利用DMA和串口进行数据的收发。

qq_53092944的博客 5124

深入探究单片机中的DMA技术

而DMA技术则可以绕过CPU,直接将数据从外设(如外部存储器、网络接口等)传输到内存,或者从内存传输到外设,从而提高数据传输的效率。DMA技术是一项重要的嵌入式系统技术,可以提高数据传输的效率,减轻CPU的负担。需要注意的是,上述代码只是一个简单的示例,实际的DMA配置和传输过程可能会更加复杂,具体的实现方式会根据单片机的型号和所使用的开发环境而有所不同。高速数据传输:在需要高速数据传输的场景下,比如音频、视频流的传输,DMA技术可以有效地提高数据传输的效率,减轻CPU的负担。二、DMA技术的工作原理。

VfhBlockchain的博客 877

【STM32】DMA原理,配置步骤超详细,一文搞懂DMA

DMA(Direct Memory Access)——直接存储器访问,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用CPU,即在传输数据的时候,CPU可以干其他的事情,好像是多线程一样。数据传输支持从外设到存储器或者存储器到存储器,这里的存储器可以是SRAM或者是FLASH。DMA控制器包含了DMA1和DMA2,其中DMA1有7个通道,DMA2有5个通道,这里的通道可以理解为传输数据的一种管道。

qq_43460068的博客 3万+

深入学习单片机DMA技术

在传统的单片机数据传输方式中,数据的读取和写入都需要CPU参与,当数据量较大时,会导致CPU资源占用过多,从而影响系统运行效率。而DMA技术的引入,可以将数据传输的过程完全交给DMA控制器完成,CPU只需要提供控制信号即可。通过本文的介绍,我们可以深入了解DMA技术的原理和应用,以及如何通过STM32F4系列来实现串口数据的收发。了解了DMA技术的原理后,我们可以看一下该技术在实际开发中的应用。3)DMA缓冲区:存储数据的一块内存区域,用于在数据传输过程中暂存数据,以保证数据传输的稳定性和可靠性。

uote_e的博客 372

R语言分类变量的统计描述

三篇介绍了连续变量的统计描述的R语言相关函数,计算数值的相关统计指标。本文介绍分类变量的统计描述及如何在R语言中实现。 不同于连续变量,分类变量的统计描述主要是汇总分类变量各类别例数及百分比。 1、table()函数 ...

zsc943290710的博客 1万+

STM32学习笔记(九)丨DMA直接存储器存取(DMA数据转运、DMA+AD多通道转换)

Bilibili课程 江科大自化协 STM32个人学习笔记(核心知识,学习心得,代码实现,知识拓展)

电子德彪西的博客 4439

FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

本文介绍了FIFO的写操作及Status Flags页的配置信息。

u011565038的博客 2284

STM32单片机入门学习——第24节: [8-2]DMA数据转运&DMA+AD多通道

本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!

qq_44764442的博客 1256

EtherCAT从站协议栈---- sampleappl.c 文件解析

这个源文件实际上包含该项目的入口函数main函数。 那么如何找到入口函数呢? 可以进入debug的simulator模式,选中run to main(), 当执行完启动文件startup_cm3.s后就进入了main函数(注意在main函数之前还进入了SystemInit函数), 如下图所示: 这个main函数主要架构如下: int main(void) { HW_Init(); /*PDI(过程数据接口)初始化,这里用的是MCI接.

Jiawei_Z的博客 3068

【外挂编程】外挂编程技术揭秘(二)

引言: 经过上一篇文章大家可能对外挂有了一个初步的认识,之前的内容比较简单,应该大家很容易掌握。我写作过程中我发现三个篇幅可能写不完,后续还可能要多加几个篇幅,这篇我们就先以内存挂为主吧。话不多说了,让我们开始吧。 文章中代码github地址: https://github.com/Diamonds-ZhaoYu/hz_example 环境要求: 系统:Windows 语言...

c-rain 4033

stm32入门教程-- DMA数据转运

第二行我们引用变量的地址看看,&号放在aa前面,表示取这个变量的地址,然后,这个变量取地址之后,应该要存在一个指针变量里,这个如果想用数字显示,一定要在前面加一个强制类型转换 (uint32_t),如果不加强制类型转换,就是指针跨级赋值了,编译时会出现警告,最后显示长度为8,8个十六进制的数,表示32位,32位的系统都是32位的。如果在变量前面,加一个const关键字,const是C语言的关键字,表示的是常量的意思,被const修饰的变量,在程序中只能读,不能写。现在第一行显示的是aa变量的内容,66,

weixin_61733189的博客 1094

紫光同创PGL50H开发板实战:盘古50KH视频板的多媒体处理与高速通信方案

本文详细介绍了基于紫光同创PGL50H FPGA芯片的盘古50KH视频开发板在多媒体处理与高速通信方面的实战应用。文章从开发板硬件架构解析入手,逐步指导开发环境搭建、DDR3内存控制器配置、HDMI视频输入输出实战,并重点探讨了利用板载HSST高速收发器实现光纤通信与万兆以太网的方案。最后,通过构建一个集多路视频采集、处理与光纤传输于一体的系统案例,展示了该开发板在高性能实时数据处理领域的强大潜力。

b9c0d的博客 485

FreeRTOS实战(七)·移植STM32实现多通道ADC采集DMA转运数据

内含源码可直接移植,内容基于STM32F1系列移植FreeRTOS实现多通道ADC采集数据,并通过DMA转运数据。

时光の尘的博客 2475

保研考研机试攻略:python笔记(4)

保研考研机试攻略:python笔记(4)二分法+最大公约数+最小公倍数+素数判断+幂次方mod方法+匹配问题+哈希算法+哈夫曼编码+二叉树

qq_63349644的博客 1097

《一》:LBE,VR 大空间系列——场景环境需求解析

当前,大量 VR 体验活动在室内场地开展。因此,对于场地照明有特定要求:除天花板外,场地的所有表面均需有照明覆盖。这是为了保证玩家无论处于场地的哪个位置,地面与墙面都不会出现明显的影子。场地内不建议安装射灯或高强度的点光源,若已安装此类灯具,需使用柔光板进行遮盖。此外,要避免在阳光下使用 VR 设备台。参考图(请忽略其中Maker标签)

unitygroup的博客 944

单片机DMA原理及应用详解(下篇)(附工程源码)

​ 这篇文章详细介绍单片机的DMA原理和应用范例。希望我的分享能给你带来不一样的收获! 关于DMA的原理,可以看上一篇文章: 单片机DMA原理及应用详解(上篇)(附工程源码)-优快云博客 ​

m0_73931287的博客 1963

科技与伦理的平衡点:人类计算的伦理

科技与伦理的平衡点:人类计算的伦理 关键词 科技与伦理 人类计算 隐私问题 道德决策自动化 公平性与偏见 法律与社会责任 摘要 本

AI天才研究院 1162

单片机DMA原理及应用详解(上篇)(附工程源码)

一、DMA简介 二、DMA原理 三、DMA中断 1.DMA中断的工作原理 2.DMA中断的优点 3.DMA中断的配置和处理 4.应用场景

m0_73931287的博客 3661

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

二十五、STM32的DMA(数据转运)

在嵌入式系统中,DMA(Direct Memory Access)可以把数据在外设与内存之间(或内存与内存之间)搬运,而无需 CPU 每次拷贝,极大降低 CPU 负担、提高实时性。下一章节将结合ADC。

weixin_64632926的博客 1741

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

FreeRTOS实战(八)·移植STM32实现双ADC采集DMA转运数据

基于STM32移植FreeRTOS实现双ADC采集进行DMA数据转运,内含源码可直接移植

时光の尘的博客 1669

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

FreeRTOS实战(六)·移植STM32实现单通道ADC采集DMA转运数据

内含源码可直接移植,主要实现功能,单通道ADC采集数据,通过DMA进行数据转运,并通过挂起和恢复函数,将数据处理任务挂起和恢复。

时光の尘的博客 1604

单片机DMA原理

DMA,全称Direct Memory Access,即直接存储器访问。DMA是一种外设,它将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。—>只要配置好就主动利用总线将 源数据存储器 中的数据搬运到 目标数据存储器。

AKIRA1000的博客 1482

单片机中DMA的配置

寄存器外设?对于DMA而言,寄存器的概念是:片上flash、外设eeprom、外设flash等。外设的概念是:UART、IIC、SPI等。//源地址//目标地址//传输方向,寄存器->外设//传输模式,正常模式是单次传输//源突发传输长度,每次从源设备连续读取多少个数据,宽度与传输宽度一致//目标突发传输长度,每次对目标设备连续发送多少个数据//传输方向,递增//传输方向,不变//传输宽度//传输块大小,最大4095//软件等待//硬件等待//传输优先级。

gukos的博客 2044

STM32 HAL库中串口空闲中断+DMA 实现串口数据的不定长接收

本文开发环境: MCU型号:STM32F051R8T6 IDE环境: MDK 5.25 代码生成工具:STM32CubeMx 5.2.0 HAL库版本:v1.9.0(STM32Cube MCU Package for STM32F0 Series) 本文内容: 不定长数据接收的原理 串口接收中断的配置 串口接收DMA线的配置 示例程序及起运行流程 附件:代码工程(MDK) 文章...

白杨木屋 2万+

STM32单片机DMA串口数据收发

前言 本实验是在原子哥的DMA实验的基础上进行修改,添加了DMA串口数据接收功能。接收到指定数据时LED1的状态翻转。 注意:在编写DMA串口数据收发时,DMA发送和接收传输的数据量需要单独进行初始化,在每次传输数据时都需要进行初始化。 如下图所示: 一、STM32 DMA介绍 **DMA详尽介绍可网上查找,这里就不在细说。** 如果对DMA不是很了解可参考另一位博主的文章,很形象:(https://blog.youkuaiyun.com/zn2016/article/details/79030112) DMA直接

qq_36966968的博客 6000
上一篇: GD32用ADC扫描模式+DMA传输 查询方式等不到EOC标志置位
下一篇: AC7811系列 程序上禁用了SWD之后,复位引脚拉低再拉高下载不成功
Tyrion.Mon
博客等级 码龄8年 251粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值