stm32入门-----DMA直接存储器存取(上——理论篇)

news2024/11/13 14:46:08

目录

前言

DMA

 1.简介

2.存储器映像

3.DMA结构

4.数据宽度与对齐 

5.DMA工作示例


前言

        本期我们就开始学习DMA直接存储器存取,DMA是一个数据装运的小助手,执行数据的搬运处理,减少了CPU的负担,在stm32中担当重要的工作。在前面学习ADC的时候我们就提及过这个,那么本期就正式开始学习DMA,先从理论部分入手,下一期我们就进行关于DMA的相关项目实操。(视频:[8-1] DMA直接存储器存取_哔哩哔哩_bilibili)

DMA

 1.简介

  • DMADirect Memory Access)直接存储器存取
  • DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源
  • 12个独立可配置的通道: DMA17个通道), DMA25个通道)
  • 每个通道都支持软件触发和特定的硬件触发

STM32F103C8T6 DMA资源:DMA17个通道)

 

2.存储器映像

        存储器分为大类,分为ROM和RAM,其中ROM是一种掉电不丢失数据的存储器,而RAM是一种掉电就丢失数据的存储器,其实很类似我们的电脑ROM类似为硬盘里面的数据,RAM类似为电脑内存存储的临时数据。

类型

起始地址

存储器

用途

ROM

0x0800 0000

程序存储器Flash

存储C语言编译后的程序代码

0x1FFF F000

系统存储器

存储BootLoader,用于串口下载

0x1FFF F800

选项字节

存储一些独立于程序代码的配置参数

RAM

0x2000 0000

运行内存SRAM

存储运行过程中的临时变量

0x4000 0000

外设寄存器

存储各个外设的配置参数

0xE000 0000

内核外设寄存器

存储内核各个外设的配置参数

3.DMA结构

下面是DMA的整体框架,这里我们可以看出是有三个DMA的(但是我们使用的STM32F103C8T6只有一个DMA1),这里的DMA是通过一个总线来去访问各个存储器的内容,但是总线是只有一个的,所以当出现多个通道都需要去访问的时候,不可能都去挤这一个总线,这时候有一个仲裁器去判断哪个通道优先去执行,类似于中断的优先级。

 下图是DMA的基本结构,DMA的搬运方向是可以分为三个,分别是外设到存储器,存储器到外设,存储器到存储器。下面还有一个计数器,这个计数器是一个自减的计数器,是一个搬运次数计数意思是当开始设定一个数字这个数字减少到0的时候搬运就结束,后面还有一个自动重装,当我们开启自动重装的时候,计数器的值就会回归到我们开始设定的那个数字,然后就开始数据搬运的操作。下面还有一个触发方式的选择,M2M选择1的话是软件触发,选择0是硬件触发,软件触发一般用于存储器到存储器的数据搬运,比如程序里面的数组赋值到另外一个数组,二硬件触发一般用于外设到存储器之间的数据搬运,因为硬件触发要考虑到外设的触发条件,比如ADC转换结束或者中断等等。

         下面可以看出对于硬件触发的并不是每一个通道的都是一样的,是这个通道有特定的硬件信号才能触发。

4.数据宽度与对齐 

 这里就涉及到起始和目标二者之间数据宽度的问题,如果是二者的宽度都是一样的,比如8位,那么传输的话就会一一对应传输;如果起始的数据比目标的位宽要小,那么传输到目标后的数据是右对齐的方式,也就是高位的补零;如果起始的数据比目标的要大,那么传输到目标的数据是舍弃掉高位的数据。

5.DMA工作示例

(1)数据转运+DMA

下面是数据的转运,也就是把一个数据变量的值复制到另一个变量那里去,入下面所示,把第一个数组A复制到另外一个数组B,这里没有涉及到了相关外设条件,所以是用最快的方式来去进行也就是软件触发,另外就是需要执行7次,在转运的过程中还需要去对地址进行移位的操作,类似于指针地址移位,其实就是我们常见的数组++,要想实现下面一一对应的赋值,起始数组和目标数组都需要执行地址++操作。

(2)ADC扫描模式+DMA

下面是ADC扫描模式通过DMA来去搬运转换好的数据。在上一期我们就说过ADC的规则组的数据寄存器是只能存储一个转换结果的,但是列表中是有多个通道要进行转换,那么如果不及时拿走上一个通道转换的结果,那么下一个通道转换的结果就会覆盖掉上一个的值,所以这里就需要DMA来去搬运这些转换好的结果,每一个通道转换后切换到另外一个通道的时候,中间是可以继续DMA搬运操作的,所以ADC扫描模式和DMA就可以实现完美的配合操作,每完成一个转换,DMA就可以把这个结果拿走存起来,然后数据寄存器就可以继续放下一个通道转换的结果。 

以上就是本期的全部内容了,我们下次见!

今日壁纸:

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

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

相关文章

《Milvus Cloud向量数据库指南》——不同开源向量数据库的适用数据规模及其技术特点深度剖析

在探讨向量数据库领域时,我们不得不提及多个备受瞩目的开源项目,它们各自以其独特的技术优势和适用场景赢得了广泛的关注。本文将深入剖析Milvus Cloud、Chroma、Weaviate、以及Qdrant这几个开源向量数据库在不同数据规模下的应用表现,以及它们各自的技术特点和优势。 引言…

SS9283403 开发环境搭建(二)

1.序 在前一篇“SS928&3403K开发环境搭建(一)”中已经借助Ebaina搭建好的ubuntu对开发板做了测试,这篇记录从零开始搭建SS928&3403K的开发环境; 2.开发前准备 下载VMware Workstation 16 Pro 16.1.0版本 下载ubuntu18.04…

封装导出功能(export)

业务描述: 通过一个button按钮, 实现导出功能, 导出后文件保存到电脑上 目录 一. file-saver 介绍 二. 项目中应用 1. 安装 file-saver库 2.创建 util / exportExcel.js 3. 页面内引入, 使用 4. 页面反馈 展示 一. file-saver 介绍 file-saver是一个用于在前端导出文件…

基于VueCli自定义创建Vue项目架子

基于VueCli自定义创建Vue项目架子 一、VueCli 自定义创建项目1.1安装脚手架 (已安装)1.2.创建项目1.2.1选项1.2.2手动选择功能(按空格可选中)1.2.3选择vue的版本1.2.4是否使用history模式1.2.5选择css预处理1.2.6选择eslint的风格 (eslint 代…

正点原子imx6ull-mini-Linux驱动LED(新字符设备驱动)(3)

经过前几节实验的实战操作,我们已经掌握了 Linux 字符设备驱动开发的基本步骤,字符 设备驱动开发重点是使用 register_chrdev 函数注册字符设备,当不再使用设备的时候就使用 unregister_chrdev 函数注销字符设备,驱动模块加载成功…

Springboot原理相关

目录 配置优先级 bean的管理 获取bean bean的作用域 第三方bean SpringBoot原理 自动配置 配置优先级 在springboot中优先级application.properties>application.yml>application.yaml 虽然支持多种格式配置文件,但是在项目开发中,推荐统…

[MIT6.5840]MapReduce

MapReduce Lab 地址 https://pdos.csail.mit.edu/6.824/labs/lab-mr.html 论文地址 https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/mapreduce-osdi04.pdf 工作原理 简单来讲,MapReduce是一种分布式框架,可以用来处理…

英伟达最强劲敌Groq一招绝杀GPU,反超GPT-4o mini2倍,AI大佬Karpathy:直接飞升AGI!

Llama 3.1 405B被吐槽太笨重? 英伟达对手AI新星Groq一招绝杀:上LPU直接速度翻倍,直接让Llama 3.1飞升AGI! Meta 最新发布的 Llama 3.1 405B 的开源让AI圈不平静了! 追捧者感慨"GPT-4o的能力已握在手中”,而批评者反驳说,大体量消耗这么多算力,有些结果跑得还不如GP…

【内网】安装wget

先是去RPM Search 下载了wget-1.24.5-2.1.x86_64.rpm这个包,结果安装的时候报一堆错 [rootlocalhost ~]# rpm -ivh wget-1.24.5-2.1.x86_64.rpm warning: wget-1.24.5-2.1.x86_64.rpm: Header V3 RSA/SHA512 Signature, key ID 29b700a4: NOKEY error: Failed dep…

不同WEB下的的ApplicationContext的选择

依赖 ApplicationContext类型选择 默认情况下,spring通过选择的web端的框架来选择使用哪个ApplicationContext子类,默认情况下我们一般使用spring mvc框架,这个时候AC的实现类为 org.springframework.boot.web.servlet.context.AnnotationC…

docker安装mysql8自动备份脚本

引用:https://blog.csdn.net/leovnay/article/details/140585094 # 创建两个卷 docker volume ls docker volume create mysqlData docker volume create mysqlSQL# 运行容器 docker run -d --namemysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORDxxx -e TZAsia/Shangh…

Java小抄|Java中的List与Map转换

文章目录 1 List<User> 转Map<User.id,User>2 基础类型的转换&#xff1a;List < Long> 转 Map<Long,Long> 1 List 转Map<User.id,User> Map<Long, User> userMap userList.stream().collect(Collectors.toMap(User::getId, v -> v, …

自闭症儿童上小学教育方法:个性化关怀,引领全面发展

在教育的征程中&#xff0c;为自闭症儿童提供适合他们的小学教育方法至关重要。这些孩子如同独特的星星&#xff0c;需要我们用个性化的关怀去照亮他们的成长之路&#xff0c;引领他们实现全面发展。 个性化关怀是自闭症儿童小学教育的核心。每个孩子都是独一无二的&#xff0c…

钡铼技术PLC网关:实现PLC数据无缝对接MQTT协议

MQTT 协议概述 MQTT 是用于物联网的标准消息传递协议。它被设计为一种非常轻量级的发布/订阅消息传送&#xff0c;非常适合以较小的代码占用量和网络带宽连接远程设备。 PLC网关是一种专门设计用于连接可编程逻辑控制器&#xff08;PLC&#xff09;与其它网络设备或系统的中间…

元器件基础学习笔记——二极管基础

一、二极管基础 二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件&#xff0c;具有单向导电性&#xff0c;是现代电子技术的基石。它在电子电路中扮演着至关重要的角色&#xff0c;通过与电阻、电容、电感等元器件的合理连接&#xff0c;能够实现整流、检波、限幅、稳压等…

python实现GUI版图片锐化小工具

目录 效果展示代码脚本代码 效果展示 锐化前&#xff1a; 锐化后代码 sharpen_img.py import tkinter as tk from tkinter import filedialog from PIL import Image, ImageTk,ImageFilter import os class ImageViewerApp:def __init__(self, root):self.root rootself.r…

空气净化器CE认证简介

空气净化器中有多种不同的技术和介质&#xff0c;使它能够向用户提供清洁和安全的空气。由于空气净化器本身就和我们的生活息息相关。因此对于产品本身的安全性是消费者首先需要考虑的&#xff0c;另一方面就是其在净化空气上的效率和效果。如今国内的空气净化器随着工艺上的不…

ts 下使用 interactjs 的时候,事件类型该如何定义 InteractEvent

ts 下使用 interactjs 的时候&#xff0c;事件类型该如何定义 InteractEvent 一、问题 interactjs 是一个很好用的给元素添加拖动事件的插件&#xff0c;它可以实现如下的效果。 其官网是 https://interactjs.io/ vitetsvue3 项目中用到了 interactjs 这个库&#xff0c;但在…

42度酒和52度酒哪个好?

我们平时在聚会的时候都会喝酒&#xff0c;而在买酒时通常会看到超市或者白酒专卖店里的白酒大多都是52度或者是42度的&#xff0c;而喝酒的人当中大多对白酒没有一定的了解&#xff0c;所以在接到买酒任务的时候&#xff0c;当看到一款酒有两种度数的时候&#xff0c;就有些拿…

元宇宙营销,能够持续下去吗?

Photo by Oberon Copeland veryinformed.com on Unsplash 一场完美风暴让一些行业观察人士怀疑&#xff0c;元宇宙这个曾经营销界最喜欢的闪亮对象&#xff0c;是否正在维持生命。像ChatGPT这样的生成式人工智能(AI)已经接管了技术炒作周期&#xff1b;关键平台的参与度微乎其…