本文介绍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控制器特点

  1. STM32F411微控制器具备两个DMA控制器:DMA1和DMA2,每个
    控制器有8个数据流,每个数据流可以映射到8个通道(或请求);
  2. 每一个DMA控制器用于管理一个或多个外设的存储器访问请求,并通
    过总线仲裁器来协调各个DMA请求的优先级;
  3. 数据流(stream)是用于连接传输源和传输目标的数据通路,每个数
    据流可以配置为不同的传输源和传输目标,这些传输源和传输目标称为
    通道(Channel);
  4. 具备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方式向上位机连续发送数据相关推荐

  1. STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解

    STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...

  2. 学习stm32中断、DMA通信原理和编程方法

    目录 ​​​​​ 一.中断是什么 1.例1: 2.例2: 3.硬件和软件配合来协同实现中断处理的全过程 3.流程中出现的问题 中断处理经历的保存和恢复过程中的步骤: 二.什么是DMA 1.原理 1). ...

  3. 【嵌入式基础】STM32中断及DMA通信原理编程

    本文主要学习stm32中断.DMA通信原理和编程方法.使用stm32tubemx和HAL库分别完成中断模式编程和串口通信中断实验. 目录 一.STM32中断,DMA通信原理编程 1.STM32中断 ( ...

  4. FPGA基于XDMA实现PCIE X4通信方案 提供工程源码和QT上位机程序和技术支持

    目录 1.前言 2.我已有的PCIE方案 3.PCIE理论 4.总体设计思路和方案 5.vivado工程详解 6.驱动安装 7.QT上位机软件 8.上板调试验证 9.福利:工程代码的获取 1.前言 P ...

  5. 通信原理MATLAB仿真实验50例

    通信原理MATLAB仿真实验50例 一.文章出处 1.1.本文转自 matchfilter的博客 原文链接:http://blog.sina.com.cn/s/articlelist_15036850 ...

  6. 学习通信原理之——从实验中理解频谱/功率谱/功率谱密度(MATLAB演示)

    我的个人博客文章链接如下:学习通信原理之--从实验中理解频谱/功率谱/功率谱密度(MATLAB演示) 前言 最近在复习通信原理,每次到了功率谱这一块就感到困惑,每次都要去查,我觉得不能再这样循环下去了 ...

  7. Java网络编程(二) 连续发送数据

    有了建立连接的基础后,接下来尝试连续地发送和接收数据. 对于发送端比较好理解,有数据时就可以发送出去.对于接收端,就需要一直监听是否有数据发送过来.一个基本的方法就是使用 while(true) 循环 ...

  8. 通信原理抽样定理MATLAB实验报告,通信原理抽样定理实验报告

    与<通信原理抽样定理实验报告>相关的范文 通信原理软件实验报告 学 院:信息与通信工程学院 班 级: 班内序号: 学生姓名: 学 号: 实验二 时域仿真精度分析 一[实验目的] 1. 了解 ...

  9. 痞子衡嵌入式:分享一个i.MXRT系列配套DRAM压力测试上位机工具(i.MXRT DRAM Tester)...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦SE团队制作的i.MXRT配套DRAM压力测试上位机工具. 事情源于痞子衡的技术交流群里的提问,有群友在恩智浦官方技术公众号 [恩 ...

最新文章

  1. html 组件化 编辑器,vue.js组件化使用百度富文本编辑器(一)
  2. 你的机器人女友到了,请签收
  3. mysql 远程连接速度慢的解决方案
  4. Qt QDialog将窗体变为顶层窗体(activateWindow(); 和 raise() )
  5. 图像识别中卷积神经网络“卷积”的作用
  6. 数据结构一:链表(循环链表)
  7. 【微信小程序】 setData 的用法
  8. (译)创建.NET Core多租户应用程序-租户解析
  9. 如何用计算机绘图画图,2018年《计算机绘图》考试试题及答案【完整版】.doc
  10. linux主机基本情况,查看linux主机系统基本信息.pdf
  11. ajax加载对应的json,jQuery:多个AJAX/JSON请求对应单个回调并行加载
  12. The Coding Kata: FizzBuzzWhizz in Modern C++11
  13. bigdecimal不保留小数_为什么 0.1 + 0.2 = 0.3,原来你不知道
  14. 三菱的触摸屏usb驱动_如何实现一个TK6071IP的触摸屏驱动两个三菱FX1S-30MT的PLC?...
  15. 关于三个概念:ActiveX、OLE和COM
  16. 学会python能做什么-学会python可以做什么
  17. Python机器学习、深度学习库总结(内含大量示例,建议收藏)
  18. MongoDB 数据库_集合_文档 操作
  19. vcpkg如何全面卸载和重新安装包
  20. 分享WPS office 2019 卸载方法:

热门文章

  1. 每日新闻:互联网企业收入同比增近20%;阿里巴巴云计算收入增长101%;哈哈零兽完成融资数千万;Red Hat推出新版RHEL...
  2. 使用Keras进行深度学习:(一)Keras 入门
  3. 人工智能三大核心技术
  4. web前端之——图片上传
  5. 在线音乐迎来产消多维时代,菠萝BOLO要做“原创音乐视频工厂”?
  6. Lambda表达式语法 (二)
  7. 如何手动创建 k8s kubeconfig 文件以实现多环境切换
  8. 阮一峰flex 布局
  9. 电商抖音直播带货SOP工作流程主播计划脚本方案
  10. 外行学计算机,《新手无忧学电脑:外行入门学电脑(2008至尊经典版)》低价购书_计算机与互联网_孔网...