【stm32的DMA通信】

news/2024/11/7 15:35:28/

目录

stm32的DMA通信

  • 目录
  • 一、关于DMA
  • 二、工程建立
  • 三、结果展示
  • 四、总结
  • 五、参考

一、关于DMA

DMA定义
DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。

DMA传输方式
DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)。四种情况的数据传输如下:

外设到内存 内存到外设 内存到内存 外设到外设
DMA传输参数
我们知道,数据传输,首先需要的是1 数据的源地址 2 数据传输位置的目标地址 ,3 传递数据多少的数据传输量 ,4 进行多少次传输的传输模式 DMA所需要的核心参数,便是这四个

当用户将参数设置好,主要涉及源地址、目标地址、传输数据量这三个,DMA控制器就会启动数据传输,当剩余传输数据量为0时 达到传输终点,结束DMA传输 ,当然,DMA 还有循环传输模式 当到达传输终点时会重新启动DMA传输。
  
也就是说只要剩余传输数据量不是0,而且DMA是启动状态,那么就会发生数据传输。  
DMA的主要特征
每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置;

在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推);
独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐;
支持循环的缓冲器管理;
每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求;
存储器和存储器间的传输、外设和存储器、存储器和外设之间的传输;
闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标;
可编程的数据传输数目:最大为65535。

二、工程建立

我们通过hal库实现DMA传输的时候可以用cubeMX简单的初始化部分引脚。
具体步骤如下
1.选择时钟模式在这里插入图片描述
2.设置串口
在这里插入图片描述
在这里插入图片描述
3.设置DMA
在这里插入图片描述
4.设置时钟源
在这里插入图片描述
5.创建工程
在这里插入图片描述

三、结果展示

我们在main函数中加上一个输出试一下:
在main.C中添加:

 /* USER CODE BEGIN Init */uint8_t Senbuff[] = "\r\n**** Serial Output Message by DMA ***\r\n   UART DMA Test \r\n   Zxiaoxuan";  //定义数据发送数组

while循环:

while (1){/* USER CODE END WHILE */HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff));HAL_Delay(1000);/* USER CODE BEGIN 3 */}

编译烧录后的现象如下

DMA

四、总结

在单片机的串口通信中,DMA的特点是明显,即无需CPU的干预。相关的使用函数也比较具象,理解起来比中断的要轻松。

五、参考

1.https://blog.csdn.net/weixin_44793491/article/details/107564370
2.https://blog.csdn.net/as480133937/article/details/104827639/
3.https://www.bilibili.com/video/BV1th411z7sn?p=23&vd_source=2ed968bffd4cf5758431b45852b18164


http://www.ppmy.cn/news/601483.html

相关文章

板卡测评 | 基于TI AM5708开发板——ARM+DSP多核异构开发案例分享

本次测评板卡是创龙科技旗下的TL570x-EVM,它是一款基于TI Sitara系列AM5708ARM Cortex-A15+浮点DSPC66x处理器设计的异构多核SOC评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 评估板接口资源丰富,引出…

STM32F407ZG DMA

STM32F407ZG开发板学习(11) 直接存储器访问 DMA简介原理及框图寄存器中断状态寄存器 LISR HISR中断标志清零寄存器 LIFCR HIFCR数据流 x 配置寄存器 DMA_SxCR (x 0..7)数据 x 数据项数寄存器数据流 x 外设地址寄存器 DMA_SxPAR (x 0..7)数据流 x 存储器…

STM32CubeMX + AD7606 + FSMC 使用FSMC完成对8080并口的数据读取

AD7606部分 AD7606是一款采样率最高200ksps、8通道、16位AD芯片,可使用8080并口、按字节并口、SPI串行等方式读取AD转换的原始数据。 实验时使用的是安富莱的AD7606模块。 各引脚的作用: OS2/OS1/OS2 : 组合状态选择过采样模式。 000表示无过采样&am…

16、STM32——DMA详解

1、DMA简介 DMA(Direct Memory Access) :直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候, CPU 可以干其他的事情,好像是多线程一样。数据…

stm32 DAC+DMA 输出100K正弦波杠杠的!!!

之前想用stm32的DAC输出正弦波,才用的方案是在死循环里面用for循环输出36点的电压值模拟成一个完整的正弦波。发现最多只能输出个20KHz的波形,在示波器下面能够看到明显的梯度。后来用DMAADC的模式发现可以上100K(不过频率有点飘)…

STM32 DMA详解

目录 1、综述 2、DMA事务 3、通道选择 4、仲裁器 5、DMA数据流 6、源、目标和传输模式 6.1、外设到存储器模式 6.2 存储器到外设模式 6.3 存储器到存储器模式 7、指针递增 8、循环模式 9、双缓冲模式 10、可编程数据宽度、封装/解封、字节顺序 11、单次传输和突发…

STM32:DMA

一、DMA简介: DMA,全称为:Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址复制空间复制到另外一个地址空间,当CPU初始化这个传输动作之后,传输动作本身是由DMA控制器来实现和完成的。DM…

STM32 DAC+TIMER+DMA输出正弦波

前段时间学习了STM32使用DAC模块输出正弦波的功能,在学习过程中遇到了一些问题,在此和各位分享。 DAC是数字/模拟转换模块的简称,STM32中的DAC是12位数字输入,这个就决定了其精度。STM32的DAC模块具有两个通道,可单独进…