STM32-DMA

1 DMA简介

DMA(Direct Memory Access),中文名为直接内存访问,它是一些计算机总线架构提供的功能,能使数据从附加设备(如磁盘驱动器)直接发送到计算机主板的内存上。对应嵌入式处理器来说,DMA可以提供外设和存储器之间,或存储器与存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源。

图片

1.1 DMA传输的4种情况

DMA涉及的数据传输分为四种情况:

  • 外设到内存

  • 内存到外设

  • 内存到内存

  • 外设到外设

图片

它们本质上是一样的,都是从内存的某一区域传输到内存的另一区域,外设的数据寄存器本质上就是内存的一个存储单元。

1.2 典型的DMA结构

典型的DMA控制器的结构示意图如下:

图片

DMA控制器内部包含4中寄存器/计数器:

  • 地址寄存器:包括源地址和目的地址寄存器

  • 状态寄存器:用于寄存DMA传输前后的状态

  • 控制寄存器:用于选择DMA控制器的操作类型、工作方式、传输方向和有关参数

  • 字节计数器:用于控制传输数据块的长度

DMA控制器需要连接包括:

  • 与外设连接:用于接受外设发出的DMA操作请求和在DMA期间对外设进行控制

  • 与CPU连接:用于请求总线的控制权

  • 与三大总线连接:用于进行总线控制

DMA控制器可以像CPU那样获得总线的控制权,因此可以完成外设与存储器之间的数据高速交换。

如下图,当外设需要与存储器之间进行DMA传输时由DMA控制器提出总线请求,从CPU获得总线授权后,由DMA控制器控制数据的传输。

图片

2 STM32中的DMA

2.1 STM32的DMA资源概述

STM32F103内部有2 个DMA控制器:

  • DMA1有7个通道

  • DMA2有5个通道,仅存大容量产品中

每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。

此外,每个DMA还有一个仲裁器来协调各个请求的优先权。

STM32F103中的DMA有以下一些特性:

  • 独立的源和目标数据区的传输宽度(字节、半字、全字)

  • 每个通道都有3个事件标志(DMA 半传输,DMA 传输完成和 DMA 传输出错)

  • 存储器和存储器间的传输

  • 外设和存储器,存储器和外设的传输

  • 闪存、SRAM、外设的 SRAM、APB1、APB2 和 AHB 外设均可作为访问的源和目标

2.2 STM32的DMA框图

STM32F103的DMA框图如下:

图片

  • ①代表DMA请求:当外设准备通过DMA传输数据时,需先给DMA控制器发送请求。

  • ②代表DMA通道:DMA1有7 个,DMA2有 5个,虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个。

  • ③代表总裁器:用于处理当发生多个 DMA 通道请求时的响应顺序。仲裁器管理 DMA 通道请求分为两个阶段:

    • 第一阶段:软件阶段,可以在DMA_CCRx寄存器中设置,有4个等级:非常高,高,中,低

    • 第二阶段:硬件阶段,若两个及以上的DMA通道请求设置的优先级一样,则取决于通道编号,越低优先权越高

3 总结

本篇介绍了DMA的一些基础知识,包括DMA传输的4种情况、典型的DMA结构以及STM32的DMA相关基础介绍。

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

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

相关文章

LINE自动回复:快速回复提升客服效率

2023年,LINE在其4个主要市场:对话、日本、台湾和泰国拥有约1.78亿月活跃用户。 LINE不仅是一个通讯软件,更提供广泛的服务,包括语音和视讯通话、群组、发布社交帖子及商务功能。近年来,越来越多的企业在客户服务中使用…

雷士明轩好用吗?测评师对比横评书客、雷士、米家哪款好

如今,大多数人的日常工作和学习都离不开电子设备,长时间盯着屏幕容易造成眼睛疲劳和视力下降。全国近视率占多数的还是青少年,护眼台灯作为一种照明设备,具有调节光线亮度和色温的功能,可以有效减少眼睛的疲劳&#xf…

Day_81-87 CNN卷积神经网络

目录 一. CNN卷积神经网络与传统神经网络的不同 1. 模型图 2. 参数分布情况 3. 卷积神经网络和传统神经网络的层次结构 4. 传统神经网络的缺点: 二. CNN的基本操作 1. 卷积 2. 池化 三. CNN实现过程 1. 算法流程图 2. 输入层 3. 卷积层 4. 激活层 5. 池化层 6. 全连…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Maven目录结构和idea的整合

Maven工程目录结构约束(约束>配置>代码) 项目名 src【书写源代码】 main【书写主程序代码】 java【书写java源代码】resources【书写配置文件代码】 test【书写测试代码】 java【书写测试代码】 pom.xml【书写Maven配置】 测试步骤(进入项目名根目录【在根…

发布自定义node包,实现自定义脚本命令

比方说yarn,cnpm,vite等命令,无需执行node xxxx,可以自定义执行并完成一些操作 创建一个文件夹如下 在index.js中输入 #!/usr/bin/env node console.log(hello world);在package.json中添加 {...,"bin": {"pack…

vue知识点————插槽 slot

slot 插槽 在父组件中引用的子组件 在父组件中写入百度 可在子组件slot插槽中展示出 父组件 <template><div id"app"><child url"https://www.baidu.com">百度</child></div> </template><script> import chil…

如何评估以及优化谷歌ads

在广告投放一段时间后&#xff0c;应该对广告的效果有所了解。如果您的目标是增加销量和网站流量&#xff0c;米贸搜谷歌推广建议请考虑以下问题&#xff1a; 1.哪些关键字为广告带来的点击最多&#xff1f; 2.客户进行搜索时使用的是何种设备&#xff1f;他们来自何处&#xf…

C语言是否快被时代所淘汰?

今日话题&#xff0c;C语言是否快被时代所淘汰&#xff1f;在移动互联网的冲击下&#xff0c;windows做的人越来越少&#xff0c;WP阵营没人做&#xff0c;后台简单的php&#xff0c;复杂的大数据处理的java&#xff0c;要求性能的c。主流一二线公司基本上没多少用C#的了。其实…

Feign负载均衡写法

Feign主要为了面向接口编程 feign是web service客户端&#xff0c;是接口实现的&#xff0c;而ribbon是通过微服务名字访问通过RestTemplate调用的&#xff0c;如下&#xff1a; 在Feign的实现下&#xff0c;我们只需要创建一个接口并使用注解的方式来配置它&#xff08;类似…

AcWing 4405. 统计子矩阵(每日一题)

如果你觉得这篇题解对你有用&#xff0c;可以点点关注再走呗~ 题目描述 给定一个 NM 的矩阵 A&#xff0c;请你统计有多少个子矩阵 (最小 11&#xff0c;最大 NM) 满足子矩阵中所有数的和不超过给定的整数 K ? 输入格式 第一行包含三个整数 N,M 和 K。 之后 N 行每行包含 …

OTFS-ISAC雷达部分最新进展(含matlab仿真+USRP验证)

OTFS基带参数设置 我将使用带宽为80MHz的OTFS波形进行设计&#xff0c;对应参数如下&#xff1a; matlab Tx仿真 Tx导频Tx功率密度谱 帧结构我使用的是经典嵌入导频帧结构&#xff0c;Tx信号波形的带宽从右图可以看出约为80Mhz USRP验证 测试环境 无人机位于1m处 Rx导频Rx…

kubernetes 之 minikube折腾记

参考官网教程&#xff0c;链接&#xff1a; https://minikube.sigs.k8s.io/docs/start/ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube安装完启动minikube&#xff1a;…

监控系统典型架构

监控系统典型架构如下&#xff1a; 从左往右看&#xff1a; 采集器是负责采集监控数据的&#xff0c;采集到数据之后传输给服务端&#xff0c;通常是直接写入时序库。 对时序库的数据进行分析和可视化。 告警引擎产生告警事件之后交给告警发送模块做不同媒介的通知。 可视化比…

【CUDA OUT OF MEMORY】【Pytorch】计算图与CUDA OOM

计算图与CUDA OOM 在实践过程中多次碰到了CUDA OOM的问题&#xff0c;有时候这个问题是很好解决的&#xff0c;有时候DEBUG一整天还是头皮发麻。 最近实践对由于计算图积累导致CUDA OOM有一点新的看法&#xff0c;写下来记录一下。包括对计算图的一些看法和一个由于计算图引发…

Redis基本了解

Redis 基于内存进⾏存储&#xff0c;⽀持 key-value 的存储形式&#xff0c;底层是⽤ C 语⾔编写的。 基于 key-value 形式的数据字典&#xff0c;结构⾮常简单&#xff0c;没有数据表的概念&#xff0c;直接⽤键值对的形式完成数据的管理&#xff0c;Redis ⽀持 5 种数据类型…

[machine Learning]推荐系统

其实严格来说推荐系统也是一种监督学习,我们需要根据已有数据进行预测,但是这种训练数据不是单纯的输入和输出问题,所以被归类为"超越监督学习"的一种? 今天去旁听了隔壁专业的机器学习课程,感觉自己的知识确实不是很系统,所以后面会找个机会把前面的代码给补充上.…

Qt打开及创建项目,运行程序(1)

安装之后&#xff0c; 1.文件->新建文件或项目 2.Application->Qt Widgets Application 3.自己设置名称和路径 4.这一步非常非常重要&#xff0c;要选择编译器&#xff0c;&#xff08;MinGW是可以在Qt里用&#xff0c;如果想与VS交互&#xff0c;要选择MSVC&#xff09…

uniapp 路由不要显示#

在Uniapp中&#xff0c;路由默认使用的是hash模式&#xff0c;即在URL中添加#符号。如果你不想在URL中显示#&#xff0c;可以切换为使用history模式。 要在Uniapp中使用history模式&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开manifest.json文件。在"app&qu…

解决charles只能使用30分钟

问题描述 Charles 30分钟会自动关闭&#xff0c;弹出一个弹窗。 解决步骤 1.网上查找后发现是需要注册一下。 2.打开Charles&#xff0c;如图的操作顺序 3.框内输入 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 4.重启即可

在css中设计好看的阴影

在css中设计好看的阴影 在本文中&#xff0c;我们将学习如何将典型的盒子阴影转换为更好看的的阴影。 统一角度 当我们想要一个元素有阴影时&#xff0c;会添加box-shadow属性并修改其中的数字&#xff0c;直到满意为止。 问题是&#xff0c;通过像这样单独创建每个阴影&…