STM32之外设DMA

news2024/11/24 14:54:32

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

(1-1)DMA框图

DMA相关概念:

i.DMA请求

外设要想通过 DMA 来传输数据,必须先给 DMA 控制器发送 DMA 请求,DMA 收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且 DMA 控制器收到应答信号之后,就会启动 DMA 的传输,直到传输完毕。 

DMA 有 DMA1 和 DMA2 两个控制器,DMA1 有 7 个通道,DMA2 有 5 个通道,不同的 DMA 控制器的通道对应着不同的外设请求,这决定了我们在软件编程上该怎么设置,具体见 DMA 请求映像表。

(1-2)DMA1请求一览表

(1-3)DMA2请求一览表

ii.通道

DMA 具有 12 个独立可编程的通道,其中 DMA1 有 7 个通道,DMA2 有 5 个通道,每个通道对应不同的外设的 DMA 请求。虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个,不能同时接收多个。

iii.DMA仲裁

当发生多个 DMA 通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁器也管理。仲裁器管理 DMA 通道请求分为两个阶段。第一阶段属于软件阶段,可以在DMA_CCRx 寄存器中设置,有 4 个等级:非常高、高、中和低四个优先级。第二阶段属于硬件阶段,如果两个或以上的 DMA 通道请求设置的优先级一样,则他们优先级取决于通道编号,编号越低优先权越高,比如通道 0 高于通道 1。在大容量产品和互联型产品中, DMA1 控制器拥有高于 DMA2 控制器的优先级。

DMA配置:

i.数据从哪来到哪去

我们知道 DMA 传输数据的方向有三个:从外设到存储器,从存储器到外设,从存储器到存储器。具体的方向 DMA_CCR 位 4 DIR 配置:0 表示从外设到存储器,1 表示从存储器到外设。这里面涉及到的外设地址由 DMA_CPAR 配置,存储器地址由 DMA_CMAR 配置。

ii.数据传输的量

当我们配置好数据要从哪里来到哪里去之后,我们还需要知道我们要传输的数据是多少,数据的单位是什么。

在DMA传输中,要想数据传输正确,源和目标地址存储的数据宽度还必须一致,外设的数据宽度由 DMA_CCR 的PSIZE[1:0]配置,可以是 8/16/32 位,存储器的数据宽度由 DMA_CCR 的 MSIZE[1:0]配置,可以是 8/16/32 位。

在 DMA 控制器的控制下,数据要想有条不紊的从一个地方搬到另外一个地方,还必须正确设置两边数据指针的增量模式。外设的地址指针由 DMA_CCRx 的 PINC 配置,存储器的地址指针由 MINC 配置。以串口向电脑发送数据为例,要发送的数据很多,每发送完一个,那么存储器的地址指针就应该加 1,而串口数据寄存器只有一个,那么外设的地址指针就固定不变。具体的数据指针的增量模式由实际情况决定。

iii.数据什么时候传输完成

数据什么时候传输完成,我们可以通过查询标志位或者通过中断的方式来鉴别。每个DMA 通道在 DMA 传输过半、传输完成和传输错误时都会有相应的标志位,如果使能了该类型的中断后,则会产生中断。有关各个标志位的详细描述请参考 DMA 中断状态寄存器DMA_ISR 的详细描述。 

传输完成还分两种模式,是一次传输还是循环传输,一次传输很好理解,即是传输一次之后就停止,要想再传输的话,必须关断 DMA 使能后再重新配置后才能继续传输。循环传输则是一次传输完成之后又恢复第一次传输时的配置循环传输,不断的重复。具体的由 DMA_CCR 寄存器的 CIRC 循环模式位控制。

ST标准外设库中的初始化结构体

该结构体的成员变量用于指定数据从哪来到哪去,传输多大的量,以什么格式进行传输以及传输的优先权。

对嵌入式物联网感兴趣的小伙伴,可以多了解一下相关信息。(看过来)

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

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

相关文章

Triton教程 -- 模型仓库

Triton教程 – 模型仓库 文章目录 Triton教程 -- 模型仓库存储库布局模型存储库位置本地文件系统 具有环境变量的云存储谷歌云存储S3Azure 存储带凭证文件的云存储(测试版) 模型版本模型文件TensorRT 模型ONNX 模型TorchScript 模型TensorFlow 模型OpenV…

滴滴实时数据链路建设组件选型实践篇

写在前面 随着滴滴内部技术栈的不断统一,实时相关技术组件资源的不断整合,各业务线实时数据相关开发经验的不断沉淀,基本形成了一套面向公司不同业务场景需求的最佳技术选型和具体落地方案。但同时我们也发现,大部分实时开发同学在…

React基础教程(一):React简介

React基础教程(一):React简介 1、React是什么? 发生请求获取数据处理数据(过滤,整理格式等)操作DOM呈现页面 2、谁开发的 由Facebook的软件工程师 Jordan Walke创建于2011年部署于Facebook的newsfeed随后在2012年部…

一本书让你彻底搞懂安卓系统性能优化

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Transformer详解,中文版架构图

2.2.1 “编码器-解码器”架构 Seq2Seq 思想就是将网络的输入输出分别看作不同的序列,然后实现序列到序列 的映射,其经典实现结构就是“编码器-解码器”框架。编码器-解码器框架如图 2.7 所 示。 图2.7 编码器-解码器的基本框架 在 Seq2Seq 思想应用于自然…

机器鸟实现摆动尾巴功能

1. 功能说明 本文示例将实现R329样机机器鸟摆动尾巴的功能。 2. 电子硬件 在这个示例中,我们采用了以下硬件,请大家参考: 主控板 Basra主控板(兼容Arduino Uno)‍ 扩展板 Bigfish2.1扩展板‍ 电池7.4V锂电池 电路连接…

新的挑战:WebGL

这段时间一直在死磕 Chromium 的 8K 高清视频播放,虽然之前写过一些关键技术的实现,主要难点差不多攻破,但投入到产品中,依然还要解决很多实际中的问题,比如卡顿、格式支持、音视频不同步等等。前期的相关文章&#xf…

RocketMQ基础API使用以及基本原理探究

文章目录 同步发送异步发送单向发送拉模式随机获取一个queue的消息指定一个queue的消息 顺序消息广播消息延迟消息批量消息过滤消息Tag过滤sql过滤 事务消息RocketMQ常见问题RocketMQ如何保证消息不丢失?RocketMQ的消息持久化机制RocketMQ如何保证消息顺序RocketMQ事…

Day07 Python函数详解

文章目录 第四章 Python函数使用4.1. 函数介绍4.2. 函数的定义与使用4.2.1. 函数的定义4.2.2. 调用 4.3. 函数的参数4.4. 函数的返回值4.4.1. 返回值介绍4.4.2. None类型 4.5. 函数说明4.5.1. 函数注释4.5.2. 函数的4中定义方式4.5.3. 函数的调用 4.6. 函数的嵌套调用4.7. 函数…

哪款 IMG BXS GPU 适合您的汽车?

Imagination 是汽车行业领先的图形处理器供应商。Imagination 的 GPU IP 经过了九代更新迭代,为车辆提供了舒适性和安全性,在汽车行业的总出货量接近 5 亿。通过将响应迅速的 HMI(人机界面)与功能日益强大的高级驾驶员辅助系统相结…

Linux:主机状态监控

查看系统的资源占用 可以通过top命令,查看系统CPU、内存使用情况 top命令内容详解: 第一行:top:命令名称,10.49.16:当前系统时间,up 4:40:启动了4小时40分,4 users&#…

Aspose.Pdf使用教程:为PDF文件添加swf注释

Aspose.PDF 是一款高级PDF处理API,可以在跨平台应用程序中轻松生成,修改,转换,呈现,保护和打印文档。无需使用Adobe Acrobat。此外,API提供压缩选项,表创建和处理,图形和图像功能&am…

STL之priority_queue与仿函数

目录 一.仿函数1.介绍2.示例 二.priority_queue1.介绍2.成员函数3.模拟实现4.使用 三.其他1.typename Container::value_type 一.仿函数 1.介绍 函数对象,又称仿函数,是可以像函数一样使用的对象,其原理就是重载了函数调用符:()…

浅谈数据中台之标签管理平台

在现如今的大数据时代,相信大家一定了解或者听说过下列几个场景: 购物APP:千人千面,意思不同用户使用相关的产品感觉是不一样的,不同用户看到的购物APP首页推荐内容和其他相关推荐流信息可能是完全不同的。 社交APP&…

实例:使用网络分析仪进行电缆测试

本应用测试针对非标称50Ω的线缆,包括同轴、双绞线、差分高速数据线的测试,包括阻抗参数、S参数(插损、驻波、Smith图等等),也可以绘制眼图。 根据电缆的性能,如频率范围、长度、是否差分,设置…

Linux:root用户

root用户对Linux系统拥有最大的操作权限。 普通用户的权限一般都在home目录下,超过home目录后,普通用户在很多地方只有只读和执行的权限,但没有修改权限。 1、su命令:切换到root用户的命令语法: su -root “-”符号是可…

精密空调监控:不会这个技巧,千万不要尝试

随着科技的不断进步和信息化的发展,精密空调设备被广泛应用于数据中心、通信基站、医疗设施、实验室等对温度和湿度要求严格的环境中,以保证设备的正常运行和数据的安全性。 借助动环监控系统,精密空调可以实时了解设备的运行状态、温湿度的变…

数据库迁移 | Oracle数据迁移方案之技术两三点

今年Oracle似乎又火了,火得要下掉,目前中国大概有240数据库企业,在国产信创的大趋势下,一片欣欣向荣,国库之春已然来临。到今天为止,Oracle依旧是市场份额最大的数据库,天下苦秦久矣&#xff0c…

关于使用keil瑞萨RA4M2踩过的坑

一、之前在rasc添加的组件不能删除。 下面在rasc添加ThreadX,不只是RTOS,其他组件也出现这种情况。 当去掉组件不使用,重新配置。但是组件还是显示在软件包,导致编译出错。 解决方式,自己琢磨发现: 找到工…

腾讯视频技术团队偷懒了?!

👉腾小云导读 PC Web 端、手机 H5 端、小程序端、App 安卓端、App iOS 端......在多端时代,一个应用往往需要支持多端。若每个端都独立开发一套系统来支持,将消耗巨大的人力和经费!腾讯视频团队想到一个“偷懒”的方法——能不能只…