【嵌入式12】DMA通信原理及编程实验,DMA方式向上位机连续发送数据
本文介绍DMS通信原理,STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据。
- 一、DMA介绍
- 什么是DMA?
- DMA介绍
- DMA传输方式
- DMA传输参数
- DMA数据传输的四个要素
- DMA控制器特点
- DMA工作框图
- DMA方式的接口函数
- 二、串口DMA方式向上位机发送数据
- 1、题目分析
- 2、工程设置
- 3、代码撰写
- 4、串口发送数据
- 三、总结
一、DMA介绍
什么是DMA?
我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,
CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?
因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理。
DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作–计算、控制等。
直接存储器访问 (DMA)
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
DMA传输过程的初始化和启动由CPU完成,传输过程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。
DMA介绍
DMA传输方式
DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)。四种情况的数据传输如下:
- 外设到内存
- 内存到外设
- 内存到内存
- 外设到外设
普通模式
传输结束后(即要传输数据的数量达到零),将不再产生DMA操作。若
开始新的DMA传输,需在关闭DMA通道情况下,重新启动DMA传输。
循环模式
可用于处理环形缓冲区和连续数据流(例如ADC扫描模式)。当激活循
环模式后,每轮传输结束时,要传输的数据数量将自动用设置的初始值
进行加载, 并继续响应DMA请求。
DMA传输参数
数据传输需要:
1 数据的源地址
2 数据传输位置的目标地址
3 传递数据多少的数据传输量
4 进行多少次传输的传输模式
当用户将参数设置好,主要涉及源地址、目标地址、传输数据量这三个,DMA控制器就会启动数据传输,当剩余传输数据量为0时 达到传输终点,结束DMA传输 ,当然,DMA 还有循环传输模式 当到达传输终点时会重新启动DMA传输。
也就是说只要剩余传输数据量不是0,而且DMA是启动状态,那么就会发生数据传输。
DMA数据传输的四个要素
① 传输源 :DMA数据传输的来源
② 传输目标:DMA数据传输的目的
③ 传输数量:DMA传输数据的数量
④ 触发信号:启动一次DMA数据传输的动作
DMA控制器特点
- STM32F411微控制器具备两个DMA控制器:DMA1和DMA2,每个
控制器有8个数据流,每个数据流可以映射到8个通道(或请求); - 每一个DMA控制器用于管理一个或多个外设的存储器访问请求,并通
过总线仲裁器来协调各个DMA请求的优先级; - 数据流(stream)是用于连接传输源和传输目标的数据通路,每个数
据流可以配置为不同的传输源和传输目标,这些传输源和传输目标称为
通道(Channel); - 具备16字节的FIFO。使能FIFO功能后,源数据先送入FIFO,达到FIFO
的触发阈值后,再传送到目标地址。
DMA工作框图
上方的框图,我们可以看到STM32内核,存储器,外设及DMA的连接,这些硬件最终通过各种各样的线连接到总线矩阵中,硬件结构之间的数据转移都经过总线矩阵的协调,使各个外设和谐的使用总线来传输数据。
有DMA的情况下,ADC采集的数据是怎样存放到SRAM中的?
在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求。当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给它一个应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA控制器同时撤销应答信号。DMA传输结束,如果有更多的请求时,外设可以启动下一个周期。
总之,每次DMA传送由3个操作组成:
- 从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元;
- 存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元;
- 执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。
DMA方式的接口函数
二、串口DMA方式向上位机发送数据
1、题目分析
STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据。
2、工程设置
新建过程不再赘述,直接来到外设设置
设置RCC
设置串口
使能中断
DMA设置
点击DMA Settings
的Add添加通道,传输速率设置为中速Medium
模式设置为Normal
,右侧选择Memory
在System view
下选择DMA
时钟设置
之后导出Keil工程文件即可
3、代码撰写
在main.c
文件添加代码
uint8_t Senbuff[] = "Hello world!"; //定义数据发送数组
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff));HAL_Delay(1000);
编译无误后烧录即可
4、串口发送数据
C8T6核心板boot0接0,打开XCOM串口助手,打开串口即可接收信号
三、总结
DMA传输过程不占用CPU资源,可以边传输边运行其他任务,更加高效。
参考
[1] https://blog.csdn.net/as480133937/article/details/104927922
[2] http://www.cnblogs.com/fire909090/p/8881039.html
【嵌入式12】DMA通信原理及编程实验,DMA方式向上位机连续发送数据相关推荐
- STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解
STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...
- 学习stm32中断、DMA通信原理和编程方法
目录 一.中断是什么 1.例1: 2.例2: 3.硬件和软件配合来协同实现中断处理的全过程 3.流程中出现的问题 中断处理经历的保存和恢复过程中的步骤: 二.什么是DMA 1.原理 1). ...
- 【嵌入式基础】STM32中断及DMA通信原理编程
本文主要学习stm32中断.DMA通信原理和编程方法.使用stm32tubemx和HAL库分别完成中断模式编程和串口通信中断实验. 目录 一.STM32中断,DMA通信原理编程 1.STM32中断 ( ...
- FPGA基于XDMA实现PCIE X4通信方案 提供工程源码和QT上位机程序和技术支持
目录 1.前言 2.我已有的PCIE方案 3.PCIE理论 4.总体设计思路和方案 5.vivado工程详解 6.驱动安装 7.QT上位机软件 8.上板调试验证 9.福利:工程代码的获取 1.前言 P ...
- 通信原理MATLAB仿真实验50例
通信原理MATLAB仿真实验50例 一.文章出处 1.1.本文转自 matchfilter的博客 原文链接:http://blog.sina.com.cn/s/articlelist_15036850 ...
- 学习通信原理之——从实验中理解频谱/功率谱/功率谱密度(MATLAB演示)
我的个人博客文章链接如下:学习通信原理之--从实验中理解频谱/功率谱/功率谱密度(MATLAB演示) 前言 最近在复习通信原理,每次到了功率谱这一块就感到困惑,每次都要去查,我觉得不能再这样循环下去了 ...
- Java网络编程(二) 连续发送数据
有了建立连接的基础后,接下来尝试连续地发送和接收数据. 对于发送端比较好理解,有数据时就可以发送出去.对于接收端,就需要一直监听是否有数据发送过来.一个基本的方法就是使用 while(true) 循环 ...
- 通信原理抽样定理MATLAB实验报告,通信原理抽样定理实验报告
与<通信原理抽样定理实验报告>相关的范文 通信原理软件实验报告 学 院:信息与通信工程学院 班 级: 班内序号: 学生姓名: 学 号: 实验二 时域仿真精度分析 一[实验目的] 1. 了解 ...
- 痞子衡嵌入式:分享一个i.MXRT系列配套DRAM压力测试上位机工具(i.MXRT DRAM Tester)...
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦SE团队制作的i.MXRT配套DRAM压力测试上位机工具. 事情源于痞子衡的技术交流群里的提问,有群友在恩智浦官方技术公众号 [恩 ...
最新文章
- html 组件化 编辑器,vue.js组件化使用百度富文本编辑器(一)
- 你的机器人女友到了,请签收
- mysql 远程连接速度慢的解决方案
- Qt QDialog将窗体变为顶层窗体(activateWindow(); 和 raise() )
- 图像识别中卷积神经网络“卷积”的作用
- 数据结构一:链表(循环链表)
- 【微信小程序】 setData 的用法
- (译)创建.NET Core多租户应用程序-租户解析
- 如何用计算机绘图画图,2018年《计算机绘图》考试试题及答案【完整版】.doc
- linux主机基本情况,查看linux主机系统基本信息.pdf
- ajax加载对应的json,jQuery:多个AJAX/JSON请求对应单个回调并行加载
- The Coding Kata: FizzBuzzWhizz in Modern C++11
- bigdecimal不保留小数_为什么 0.1 + 0.2 = 0.3,原来你不知道
- 三菱的触摸屏usb驱动_如何实现一个TK6071IP的触摸屏驱动两个三菱FX1S-30MT的PLC?...
- 关于三个概念:ActiveX、OLE和COM
- 学会python能做什么-学会python可以做什么
- Python机器学习、深度学习库总结(内含大量示例,建议收藏)
- MongoDB 数据库_集合_文档 操作
- vcpkg如何全面卸载和重新安装包
- 分享WPS office 2019 卸载方法:
热门文章
- 每日新闻:互联网企业收入同比增近20%;阿里巴巴云计算收入增长101%;哈哈零兽完成融资数千万;Red Hat推出新版RHEL...
- 使用Keras进行深度学习:(一)Keras 入门
- 人工智能三大核心技术
- web前端之——图片上传
- 在线音乐迎来产消多维时代,菠萝BOLO要做“原创音乐视频工厂”?
- Lambda表达式语法 (二)
- 如何手动创建 k8s kubeconfig 文件以实现多环境切换
- 阮一峰flex 布局
- 电商抖音直播带货SOP工作流程主播计划脚本方案
- 外行学计算机,《新手无忧学电脑:外行入门学电脑(2008至尊经典版)》低价购书_计算机与互联网_孔网...