【STM32】DMA(直接存储器访问)

一、DMA本质

在ADC中使用FIFO(先进先出),当FIFO快满的时候,产生一个中断。在中断的时候将数据传输到SRAM,但是此时还是需要CPU的参与,但是CPU就不会一直在等待。【但是这个方法还是不能完全解决问题】

此时ADC不将数据存储到寄存器中,直接给DMA

1)适用与需要大量的数据传输,减轻CPU的负担

2)DMA实际上是一块电路,一个内部外设

3)DMA就是建立数据的传输通道【不需要CPU参与】

二、DMA框图

DMA一般都是连接内存和外设。

1.DMA请求

DMA传输数据,先向DMA控制器发送请求

2.DMA通道

不同外设向DMA的不同通道发送请求

DMA1有7个通道,DMA2有5个通道

DMA2仅存在于大容量产品和互联型产品。

3.DMA优先级

多个DMA通道同时发送请求时,就有先后响应处理的顺序问题,这个由仲裁器管理(优先级分为:软件阶段 && 硬件阶段

4.DMA的应用场景

三、DMA处理过程

1.各个通道的DMA1请求

1)在F1系列中外设对应的DMA通道是固定都

2)每一个通道用来管理来自于一个或者多个外设对寄存器访问的请求,并且有一个仲裁器,用于处理DMA优先级。

2.DMA优先级:软件VS硬件

在同一个时刻,只有一个请求是有效的

四、可编程的数据传输宽度、对齐方式和数据大小端

1)当PSIZE和MSIZE不相同时,DMA模块按照下表进行数据对齐。

2)关键看源端宽度和目标宽度是否一致,如果不一致存储数据时可能要跳着存储。要跳几位,具体看几倍关系。

五、DMA寄存器

1.DMA通道x配置寄存器(DMA_CCRx)(x = 1…7)

1)数据传输方向

2)通道优先级

3)循环模式

4)外设/存储器增量模式

5)外设/存储器数据宽度(如果不一致,前面有表格可以进行修改)

6)中断使能

增量模式:表示不用手动将指针指向下一个要进行发送/接收所在的位置,而是会自动的移动。(如果我们使用数组对数据进行存储,则需要使用增量模式)

2.DMA中断状态寄存器(DMA_ISR)

查看当前DMA传输状态

当设置了允许中断时,将会产生中断

3.DMA中断标志清除寄存器(DMA_IFCR)

4.DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7)

1)最大数据传输数目:65535

2)非循环模式下传输结束后,要开始新的DMA传输,需要在关闭DMA通道的情况下,在该寄存器中重新写入传输数值

5.存放地址

源地址VS目的地址

六、相关HAL库驱动介绍

0.DMA是否中断

判断DMA是否需要中断??

比如:

1)我们从ADC(人脸)将数据传输到SRAM(人脸识别),则直接通过DMA传输就可以。不需要CPU的其他操作就可以完成任务。

2)如果我们从ADC读取到温度,但是此时温度需要CPU去处理,则DMA就需要进行中断,将从ADC获取到的数据传输给CPU进行处理。

1.DMA外设相关结构体

七、DMA配置步骤

八、编程实战

1.条件

按下按键key0,实现内部RAM中内存到内存的数据传输

2.代码编写

1.dma_init

1)使能DAM时钟

2)初始化相关DMA配置

2.dma_enable_transmit

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

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

相关文章

这个双11,阿里云经历了可能是历史级的大故障!

2023年11月12日17:44开始,阿里云发生严重故障,导致阿里巴巴大量产品无法连接,一时间,“阿里云盘崩了”、“淘宝又崩了”、“闲鱼崩了”、“钉钉崩了”等话题相继登上热搜。 此外,像纳思云充电桩、乐爽coole…

OSS服务和MinIO存储做一个区分解析

日落金山,明天我们继续… 什么是OSS服务和MinIO存储 OSS(Object Storage Service)和MinIO都是对象存储服务,但它们有一些区别。以下是对它们的简要分析: 1. 部署和管理: OSS: 由阿里云提供&a…

VPN创建连接 提示错误 628: 在连接完成前,连接被远程计算机终止。

提示错误 628: 在连接完成前,连接被远程计算机终止。 需要把这个地址配置一下: VPN类型:点对点PPTP 数据加密:如果没有加密的话, 要把这个选一下。

深入理解ResNet网络:实现与应用

Resnet 在深度学习领域,卷积神经网络(CNN)是一种非常重要的模型,它在图像识别、目标检测等领域取得了显著的成果。然而,随着网络层数的增加,梯度消失和梯度爆炸问题变得越来越严重,导致训练深层…

AI智剪:批量剪辑实战,技巧与实例

随着人工智能技术的不断发展,越来越多的领域开始应用AI技术提升工作效率和质量。其中,AI智剪技术在视频剪辑领域的应用也越来越广泛。AI智剪是一种基于人工智能技术的视频剪辑方法,通过机器学习算法对视频进行自动分析和处理,实现…

【2023春李宏毅机器学习】生成式学习的两种策略

文章目录 1 各个击破2 一步到位3 两种策略的对比 生成式学习的两种策略:各个击破、一步到位 对于文本生成:把每一个生成的元素称为token,中文当中token指的是字,英文中的token指的是word piece。比如对于unbreakable,他…

Linux CentOS7 添加网卡

一台主机中安装多块网卡,有许多优势。可以实现多项功能。 为了学习网卡参数的设置,可以为主机添加多块网卡。与添加磁盘一样,要在VMware中设置。利用图形化方式或命令行查看或设置网卡。本文仅作一初步讨论。有关网络参数的设置不在讨论之列…

2023年【四川省安全员A证】考试资料及四川省安全员A证考试试卷

题库来源:安全生产模拟考试一点通公众号小程序 2023年四川省安全员A证考试资料为正在备考四川省安全员A证操作证的学员准备的理论考试专题,每个月更新的四川省安全员A证考试试卷祝您顺利通过四川省安全员A证考试。 1、【多选题】《建设工程安全生产管理…

让你的Mac体验更便捷,快速启动工具Application Wizard为你助力!

亲爱的Mac用户们,你是否经常感到在繁琐的软件启动过程中浪费了太多时间?你是否希望能够以更快的速度找到并启动你所需的应用程序?如果是的话,那么不要犹豫,让我们来介绍一款强大的软件快速启动工具——Application Wiz…

循环队列(出队、入队、判空、长度、遍历、取头)(数据结构与算法)

循环队列 涉及到移动、赋值原队列参数的函数参数列表如front,rear,都最好别用&引用,否则会修改原队列中的地址和数值如:SqQueue &Q 使用SqQueue Q作参数列表时,函数引入的只是一份副本,不会修改原队…

【GUI】-- 09 JComboBox JList、JTextField JPasswordField JTextArea

GUI编程 03 Swing 3.6 列表 下拉框 package com.duo.lesson06;import javax.swing.*; import java.awt.*;public class ComboBoxDemo01 extends JFrame {public ComboBoxDemo01() throws HeadlessException {Container contentPane getContentPane();JComboBox<Object&…

腾讯云轻量级服务器和云服务器什么区别?轻量服务器是干什么用的

随着互联网的迅速发展&#xff0c;服务器成为了许多人必备的工具。然而&#xff0c;面对众多的服务器选择&#xff0c;我们常常会陷入纠结之中。在这篇文章中&#xff0c;我们将探讨轻量服务器和标准云服务器的区别&#xff0c;帮助您选择最适合自己需求的服务器。 腾讯云双十…