嵌入式实验---实验四 DMA传输实验

一、实验目的

1、掌握STM32F103DMA传输程序设计流程;

2、熟悉STM32固件库的基本使用。

二、实验原理

1、利用外部按键KEY1来控制DMA的传送,每按一次KEY1,DMA就传送一次数据到USART1(串口1);

2、该串口将数据输出到PC端显示出来。LED灯D1作为程序运行的指示灯。

三、实验设备和器材

电脑、Keil uVision5软件、Proteus 8 Professional软件

四、实验内容和步骤

4.1 代码开发

按照书本中实验流程在Keil中完成DMA传输实验的代码开发;

4.2 原理图设计

在Proteus中完成原理图的设计,如图5所示。

图5 DMA传输实验原理图

五、实验记录和实验结果

5.1 实验效果记录(附照片即可)

5.2 实验效果说明

按下按键KEY1,D1亮,DMA数据被传输到串口并通过计算机显示出来,DMA传输仿真效果如上图所示。

六、实验预习要求

  1. 实验前认真阅读本实验指导;
  2. 熟悉书本中相关操作及相关器件。
  3. 完成5.1和5.2内容。

七、思考题

1. DMA的功能

  1. 数据传输加速:DMA允许外部设备(如硬盘、网卡、显卡等)直接访问主内存,避免了数据通过CPU的中断处理,从而大大提高数据传输速度和系统效率。

  1. 减少CPU负担:通过DMA,数据传输的控制和管理由专门的DMA控制器来完成,减轻了CPU的负担,使CPU可以同时处理其他任务,提高系统的并发能力和响应速度。

  1. 高效处理数据:DMA能够在数据传输过程中执行连续的数据块传输,从而提高了数据处理的吞吐量,特别是在大数据传输和高速数据传输中表现更为突出。

  1. 支持多种设备:DMA技术不仅限于特定类型的设备,可以应用于各种I/O设备,如存储设备(硬盘、固态硬盘)、网络设备(网卡)、音频设备、视频设备等。

  1. 提高系统整体性能:通过降低数据传输的延迟和提高传输速度,DMA显著改善了系统的整体性能和响应能力,尤其是对于高性能计算和实时数据处理系统尤为重要。

2、使用DMA功能进行数据传输时的配置流程

  1. 选择合适的DMA通道:确定系统支持的DMA通道数量和类型。根据需要选择一个可用的DMA通道,通常在系统的硬件规格或者操作系统的文档中可以找到相关信息。

  1. 分配DMA缓冲区:DMA传输需要一个缓冲区来存储数据,这个缓冲区位于系统内存中。确保分配的DMA缓冲区足够大以容纳需要传输的数据,并且要注意内存对齐和权限等问题。

  1. 初始化DMA控制器:需要编程初始化DMA控制器,设置各种控制寄存器,以及DMA传输的方向(读或写)和传输模式(单次传输、循环传输等)。设置DMA控制器的源地址(数据来源)和目的地址(数据目的地),通常是内存地址或者I/O端口。

  1. 设置DMA传输大小:确定每次DMA传输的数据量,通常以字节为单位。配置DMA控制器的传输计数寄存器,以指定要传输的数据字节数。

  1. 启动DMA传输:当DMA控制器配置完成后,通过设置相应的启动位(如启动位或者触发位)来启动DMA传输。DMA控制器开始自动从源地址中读取数据,并将其传输到目的地址,直到传输完成或者遇到错误。

  1. 处理DMA传输结束:在DMA传输完成时,DMA控制器通常会生成一个中断或者触发一个DMA完成信号,通知CPU传输已完成。在处理中断或者检查DMA状态寄存器时,可以确认DMA传输是否成功完成或者出现了错误。

  1. 释放DMA资源:当DMA传输完成后,释放DMA控制器和相关资源,包括释放DMA通道以便其他设备或者进程使用。

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

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

相关文章

【深度学习驱动流体力学】采集OpenFOAM仿真的流体力学数据送入到LSTM模型训练

具体参考上一篇文章: 【深度学习驱动流体力学】采集OpenFOAM仿真数据作为AI模型训练数据集与卷积神经网络搭建到预测(一站式完整代码实现) 原理介绍 数据处理与预处理 该代码首先导入必要的库,包括用于读取和处理VTK文件的pyvista,用于数值计算的numpy,用于路径操作的os,…

win10 安装PowerShell

总结: 直接下一步,下一步… 下载链接 https://download.csdn.net/download/qq_43071699/89462517

Qt扩展-轻量数学公式计算

轻量数学公式计算 一、概述二、代码结构三、简单使用四、解析支持1. 操作数2. 运算符3. 括号 一、概述 这个是我写得简单的一个数学计算公式工具。easy-math-parser 是一个用C编写的简单工具包,支持四个操作字符串的计算工具,灵感来自Muparser。 在这个…

Linux守护进程简介、创建流程、关闭和实例演示

1、什么是守护进程? 守护进程是一个后台运行的进程,是随着系统的启动而启动,随着系统的终止而终止,类似于windows上的各种服务,比如ubuntu上的ssh服务,网络管理服务等都是守护进程。 2、守护进程的创建流…

关于创建String的那点事...

String 首先说明一下,本人是前端小学生级别的菜鸡,吐槽的话请口下留情,在评论区指出错误或者补充不足,我会很喜欢,互喷不会进步,相互指点才会。。。。谢谢大家啦 目录 字面量方式构造函数方式区别 等号判…

如何为自己的项目生成changelog

背景 在github上看到人家的更新日志感觉很cool,怎么能给自己项目来一套呢 环境信息 tdstdsdeMacBook-Pro demo-doc % node -v v14.18.1 tdstdsdeMacBook-Pro demo-doc % npm -v 6.14.15硬件信息 型号名称:MacBook Pro版本: 12.6.9芯片&…

活出属于自己的人生

背景 24年高考帷幕落下,一场新的思考与选择悄然来临。对于每一位高考考生,学校和专业都是开启大学新生活的两个前置必选项。但有时候“鱼与熊掌不可兼得”,在分数受限的条件下,是选择一个心仪的专业还是选择一个知名度更高的学校…

QT自定义标题栏窗口其二:实现拖动及可拉伸效果 + 顶部全屏/侧边半屏

1、效果 2、核心代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent<

yolov10训练自己的数据集(没有显卡的替代方案)

1.没有显卡的替代方案 robflow https://github.com/tensorflow/models/tree/master/official 模型训练替代方案&#xff1a;嘉楠开发者社区

基于鲸鱼优化的DSN弱栅栏覆盖算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 for t1:Itersfor i1:Num%目标函数更新[pa(i),fgai] fitness(xwoa(…

全网最全!25届最近5年上海大学自动化考研院校分析

上海大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目…

Linux计划任务与日志

计划任务 主要用于完成一些周期性任务及定时任务&#xff0c;Windows中也有该功能&#xff1a; 单次调度执行 yum install -y at安装at工具&#xff0c;systemctl start atd启动服务&#xff0c;使用方法为at 选项 时间 执行内容时间可以自由设置&#xff0c;开启的栏目中输…

【SpringBoot + Vue 尚庭公寓实战】地区信息管理接口实现(九)

【SpringBoot Vue 尚庭公寓实战】地区信息管理接口实现&#xff08;九&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】地区信息管理接口实现&#xff08;九&#xff09;1、业务说明2、数据逻辑模型3、接口实现3.1、查询省份信息列表3.2、根据省份ID查询城市信息列表3…

AGI|以ChatGPT为例,浅析AI究竟能干什么?

目录 一、前言 二、ChatGPT 三、Prompt Engineering 四、神经网络 五、后记 一、前言 当一个新事物的出现&#xff0c;最好的办法就是了解它出现的背景&#xff0c;发展的历史。 当ChatGPT出现在我们面前&#xff0c;多轮对话能力让人震惊&#xff0c;仿佛机器真的可以&qu…

前端科举八股文-REACT篇

前端科举八股文-REACT篇 vue和react有和异同&#xff1f;useEffect中为什么不能使用异步函数&#xff1f;useEffect和useLayoutEffect的区别react的生命周期&#xff1f;state和props的区别&#xff1f; 讲讲你的理解&#xff1f;受控组件和非受控组件的区别讲一下你理解的reac…

vue动态绑定class的几种方式

第一种 基础用法 / <template><div :class"active"></div> </template><script setup> import { ref } from "vue"; const active ref(true); </script><style></style>第二种&#xff1a;三元运算法 …

GPT 大模型应用开发概览

随着大模型的风靡&#xff0c;越来越多的企业希望使用大模型来提高自己的服务能力&#xff0c;即在自己的软件中集成大模型的能力&#xff0c;希望让大模型解决一些特定的问题。 大模型的应用开发&#xff0c;其本质上是提示词工程&#xff0c;如何组好提示词&#xff0c;直接…

【Python的随机数汇总】

​我们写python代码的时候&#xff0c;很少能用得上随机数&#xff0c;但是随机数有很多妙用。例如&#xff0c;在我们做测试数据集的时候&#xff0c;可以构建一个随机的dataframe&#xff1b; 或者在保存数据的时候&#xff0c;可以在每条数据前插入一列作为&#xff0c;不重…

ASP .Net Core创建一个httppost请求并添加证书

ASP .Net Core创建一个httppost请求并添加证书 创建.net Core程序&#xff0c;使用自签名证书&#xff0c;可以处理https的get和post请求。 创建证书 创建自签名证书的流程可以在这里查看&#xff1a; https://blog.csdn.net/GoodCooking/article/details/139815278创建完毕…

充电学习— 9、Typec Pd

GND&#xff1a;线缆接地 TX RX&#xff1a;数据流data传输&#xff0c;支持2.0 3.0 speed兼容 VBUS&#xff1a;线缆cable电源&#xff0c;bus power CC&#xff1a;电缆cable的连接、方向、角色检测和当前模式的配置通道&#xff1b; 有emark时&#xff0c; 一个成为VCONN&am…