在USART章节讲解了串口的轮询和中断模式,这一章介绍一下通过DMA模式控制串口传输。

直接存储器访问 (DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可供其它操作使用。说白了DMA就是一个搬运工,将数据从一个地方搬到另一个地方而不需要CPU处理。

作为一个搬运工,要他正常工作必须要确定几个重要的参数。

1.传输模式:数据从哪里搬到哪里。三种可能的传输方向:存储器到外设、外设到存储器或存储器到存储器。

2.通道选择:就是数据传输的是走那条道路

3.仲裁器:多个DMA传输是优先级高的优先传输。

4.数据长度:每次传输的数据长度,可以一个字节,两个字节(半字),四个字节(字)

5.指针递增:如果使能了递增模式,则下一次传输的地址将是前一次传输的地址递增 1(对于字节)、2(对于半字)或4(对于字)。

打开STM32CubeMX重新建工程,配置和上一章配置一样。只是这个工程中,在DMA设置栏添加UASART发送TX和接收RX的DMA。发送选择 DMA1 Channel 4通道,方向从存储器到外设。优先级为低。接收选择DMA1 Channel 5通道,方向外设到存储器,优先级为低。Mode为Normal,Data Width选择Byte。

其中mode设置可以选择Normal表单次传输,传输一次后终止传输,Circular表示循环传输,传输完成后又重新开始继续传输,不断循环永不停止。此处选择单次传输。

Increment Address表示地址指针递增。串口发送数据是将数据不断存进串口的发送数据寄存器(USARTx_TDR)。所以外接的地址是不递增。而内存储器存储的是要发送的数据,所以地址指针要递增才能将所以的数据发送出去。

串口数据发送寄存器只能存储8bit,每次发送一个字节,所以数据长度选择Byte。

另外要注意的一点,必须要开启串口中断。DMA1中断已默认开启。

生成报告以及代码,编译程序。在usart.c文件中,可以找到刚才的DMA设置。

在main函数前面添加发送的数据。

在main()函数的while(1)循环中添加应用程序,通过DMA将数据发送出去。

这是只测试发送,至于接收可以看USART章节后面有讲解

编译程序并下载到开发板。用USB线连接开发板到电脑,在电脑上打开串口调试助手。选择对应的串口号,设置波特率为115200,接收到如图信息。

这章文档总结:https://download.csdn.net/download/zdw6868/10655284

注意:如果不开启串口中断,则程序只能发送一次数据,程序不能判断DMA传输是否完成,USART一直处于busy状态。

STM32Cube-直接存储器访问(DMA)相关推荐

  1. 【DSP】直接存储器访问(DMA)控制器——TMS320VC5509A(下篇)

    之前的上篇和中篇是对直接存储器访问(DMA)的一个大体上的讲解,下篇中主要是对一个DMA具体的实例进行讲解. 实例主要是两个文件:dma.c和vectors.s55. dma.c文件 /** Copy ...

  2. 直接存储器存取(DMA)有哪3种工作方式?

    DMA是I/0设备与主存储器之间由硬件组成的直接数据通路,用于高速I/0设备与主存之间的成组数据传送.数据传送是在DMA控制器控制下进行的. DMA的3种工作方式如下: (1)CPU暂停方式主机响应D ...

  3. DSP原理学习笔记--第七章--增强直接存储器访问(EDMA)

    第七章 增强直接存储器访问(EDMA) 第七章 增强直接存储器访问(EDMA) DMA 数据传输 EDMA的特点 EDMA控制器的结构 EDMA传输中的术语 EDMA传输方式 同步事件 EDMA通道与 ...

  4. 【瑞萨RA_FSP】DMAC/DTC——直接存储器访问与数据传输

    文章目录 一.DMAC和DTC模块简介 1. DMAC 特性 2. DTC 特性 二.DMAC 模块框图分析 三.DMAC 传输模式 1. 正常传输模式 2. 重复传输模式 3. 块传输模式 4. 重 ...

  5. 直接内存访问(DMA)

    1. 什么是DMA 直接内存访问是一种硬件机制,它允许外围设备和主内存之间直接传输它们的I/O数据,而不需要系统处理器的参与.使用这种机制可以大大提高与设备通信的吞吐量.   2. DMA数据传输 有 ...

  6. DSP之直接存储器访问控制器

    DMA控制器 1 概述   DMA控制器可以无需CPU介入而在内部存储器.外部存储器及片上外设之间传送数据,HPI接口也使用DMA辅助端口传送数据.DMA具有如下的特点:   DMA可以独立于CPU工 ...

  7. 【STM32】DMA详解

    00. 目录 文章目录 00. 目录 01. DMA简介 02. DMA主要特性 03. DMA框图 04. DMA事务 05. 通道选择 06. 仲裁器 07. DMA数据流 08. DMA中断 0 ...

  8. 非标准语法;请使用 _一文读懂使用MCU SPI访问具有非标准SPI接口ADC的方法

    好文章当然要分享啦~如果您喜欢这篇文章,请联系后台添加白名单,欢迎转载哟~ 问题 能否用MCU访问非标准SPI接口? 答案 可以,但可能需要做一些额外的努力. 当前许多精密模数转换器(ADC)具有串行 ...

  9. android 串口一直打开_STM32之串口DMA接收不定长数据

    STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口 ...

最新文章

  1. isAssignableFrom和isInstance、instanceof
  2. antd 刷新页面及后退时菜单栏高亮问题
  3. QPainter 的状态保存与恢复
  4. Hadoop RPC实例
  5. ***教程十:数据库注入(上)
  6. LC和RC滤波电路分析
  7. mysql 占用swap_查看swap占用情况
  8. 湖南2021普通高考专业成绩查询,2021年湖南高考成绩查询时间 高考成绩查询入口...
  9. |Vijos|图论最短路|P1082 丛林冒险
  10. centos的服务管理
  11. AsynTask用法
  12. Scp远程批量执行命令
  13. 读《向外行一样思考、像专家一样实践》之 简单、省略、抽象化、例子分析
  14. 推送数据分析全新升级,优化方向一目了然
  15. java sao_Java SAO操作-使用lambda代替字符串
  16. 如何运用量化策略跑赢大盘?
  17. C++学习笔记:实现向量类的加减赋值运算,重载运算符
  18. CF949D Curfew solution
  19. Android 项目必备(十四)--> 开发者选项
  20. 「GoTeam 招聘时间」深信服科技 Go 开发工程师(成都)

热门文章

  1. (转)FFmpeg源代码简单分析:avformat_open_input()
  2. SILKYPIX Developer Studio Pro 9.0.5.0 破解版 RAW数码照片处理神器
  3. ambari 下postgresql 命令
  4. 超强数据恢复软件easyrecovery
  5. AS9100系列标准也跟随ISO9001完成新版标准的转换
  6. echarts-主标题居中,副标题居右
  7. catkin所依赖的package必须在package.xml中添加build_depend和run_depend
  8. OKR制定实例大全--让你制定OKR不发愁
  9. 按键精灵调试三天,气到吐血!!快速开发脚本代码常见错误!绝对干货!
  10. Charles 抓包,服务器压力测试