STM32——DMA详解

 

目录

一:DMA简介

二:DMA基本结构

三:DMA实现过程

1.框图

2.DMA进行转运的条件

四:函数


一:DMA简介

  • DMA(Direct Memory Access)直接存储器存取

  • DMA可以提供外设存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源

  • 12个独立可配置通道,DMA1(7个通道),DMA2(5个通道)

  • 外设就是寄存器,寄存器就是存储器

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

    1. SPI/I2S3、 UART4、 TIM5、 TIM6、 TIM7和DAC的DMA请求仅存在于大容量产品和互联型产品。

    2. ADC3、 SDIO和TIM8的DMA请求仅存在于大容量产品

二:DMA基本结构

传输计数器:递减,减到零后,自增的地址就会返回到起始地址。写入传输计数器的时候

                      必须先关闭使能DMA再写入--DMA_CNDTRx

自动重装器:是否恢复传输计数器的最初的值,即是否循环转运数据,自减,每传输一个

                     就自减一,直到减到0,表示传输完成

软件触发:以最快的速度连续不断的转运数据,一般用于存储器到存储器的转运,一般不

                 与循环模式同时使用

硬件触发:一般是外设,这些转运需要一定的时机,比如ADC转换完成,串口收到数据,

                 定时时间……

开关控制:DMA_Cmd函数

数据宽度:少传多,高位补零;多传少,舍弃高位

 

三:DMA实现过程

1.框图

 MA是AHB总线的设备,所以要用AHB开启时钟的函数

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

2.DMA进行转运的条件

  • 开关控制,DMA_Cmd必须使能

  • 传输计数器必须大于0

  • 触发源必须有触发信号,触发一次转运一次,传输器自减一次。当传输寄存器等于0且没有自动重装时,这时无论是否触发,DMA都不会再进行转运。此时就需要DMA_Cmd给DISABLE,关闭DMA,再给传输寄存器写入一个大于0的数,再DMA_Cmd给ENABLE开启DMA,DMA才能继续工作。

四:函数

    //外部站点DMA_InitStructure.DMA_PeripheralBaseAddr = AddrA;//设置站点 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;//数据自增DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //数据宽度//存储器站点DMA_InitStructure.DMA_MemoryBaseAddr = AddrB; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//外设站点作为数据源 DMA_InitStructure.DMA_BufferSize = Size; //传输次数DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //不是自动重装DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; DMA_InitStructure.DMA_M2M = DMA_M2M_EnableDMA_Init(DMA1_Channel1, &DMA_InitStructure);DMA_Cmd(DMA1_Channel1,ENABLE);

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

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

相关文章

告别卡顿,拥抱流畅!MemReduct——内存清理工具

先给安装包下载地址:MemReduct.exe下载,无脑下一步安装即可。 MemReduct 是一款出色的内存清理工具,以下是对它的详细介绍: 功能特点 高效内存清理:采用先进算法及系统底层 API,能智能清理系统缓存、应用…

告别GitHub连不上!一分钟快速访问方案

一、当GitHub抽风时,你是否也这样崩溃过? 😡 npm install卡在node-sass半小时不动😭 git clone到90%突然fatal: early EOF🤬 改了半天hosts文件,第二天又失效了... 根本原因:传统代理需要复杂…

指纹细节提取(Matlab实现)

指纹细节提取概述指纹作为人体生物特征识别领域中应用最为广泛的特征之一,具有独特性、稳定性和便利性。指纹细节特征对于指纹识别的准确性和可靠性起着关键作用。指纹细节提取,即从指纹图像中精确地提取出能够表征指纹唯一性的关键特征点,是…

【对话推荐系统综述】A Survey on Conversational Recommender Systems

文章信息: 发表于:ACM Computing Surveys 2021 原文链接:https://arxiv.org/abs/2004.00646 Abstract 推荐系统是一类软件应用程序,旨在帮助用户在信息过载的情况下找到感兴趣的项目。当前的研究通常假设一种一次性交互范式&am…

【0001】初识Java

Java是世界上最好的语言,没有之一!!! Java是世界上最好的语言,没有之一!!! Java是世界上最好的语言,没有之一!!! 重要的事情说三遍&am…

全向广播扬声器在油气田中的关键应用 全方位守护安全

油气田作为高风险作业场所,安全生产始终是重中之重。在紧急情况下,如何快速、有效地传达信息,确保人员安全撤离,是油气田安全管理的关键环节。全向广播扬声器凭借其全方位覆盖、高音质输出和强大的环境适应性,成为油气…

显式 GC 的使用:留与去,如何选择?

目录 一、什么是显式 GC? (一) 垃圾回收的基本原理 (二)显式 GC 方法和行为 1. System.gc() 方法 2. 显式 GC 的行为 (三)显式 GC 的使用场景与风险 1. JVM 如何处理显式 GC 2. 显式 GC…

基于vue框架的游戏商城系统cq070(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,分类,商品信息,游戏高手,游戏代练 开题报告内容 基于Vue框架的游戏商城系统开题报告 一、研究背景与意义 随着互联网技术的飞速发展和游戏产业的蓬勃兴起,游戏商城作为游戏产业链中的重要一环,迎来了前所…

【OpenCV】OpenCV指南:图像处理基础及实例演示

OpenCV 是一个功能强大且易于使用的库,广泛应用于图像处理和计算机视觉领域。从读取和显示图像,到颜色空间转换、图像缩放、翻转、边缘检测、高斯模糊、形态学操作以及图像平滑和绘制,本文详细介绍了 OpenCV 的基础使用方法,附带了…

网络安全数据富化 网络数据安全处理规范

本文件规定了网络运营者开展网络数据收集、存储、使用、加工、传输、提供、公开等数据处理的安全 技术与管理要求。 本文件适用于网络运营者规范网络数据处理,以及监管部门、第三方评估机构对网络数据处理进行 监督管理和评估。 部分术语和定义 数据(data&#x…

蓝桥杯备考:动态规划线性dp之下楼梯问题进阶版

老规矩,按照dp题的顺序 step1 定义状态表达 f[i]表示到第i个台阶的方案数 step2:推导状态方程 step3:初始化 初始化要保证 1.数组不越界 2.推导结果正确 如图这种情况就越界了,我们如果把1到k的值全初始化也不现实,会增加程序的时间复杂度…

springboot + mybatis-plus + druid

目录架构 config MyMetaObjectHandler.java package com.example.config;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.util.Date;Com…

UniApp 中封装 HTTP 请求与 Token 管理(附Demo)

目录 1. 基本知识2. Demo3. 拓展 1. 基本知识 从实战代码中学习,上述实战代码来源:芋道源码/yudao-mall-uniapp 该代码中,通过自定义 request 函数对 HTTP 请求进行了统一管理,并且结合了 Token 认证机制 请求封装原理&#xff…

【HarmonyOS Next】自定义Tabs

背景 项目中Tabs的使用可以说是特别的频繁,但是官方提供的Tabs使用起来,存在tab选项卡切换动画滞后的问题。 原始动画无法满足产品的UI需求,因此,这篇文章将实现下面页面滑动,tab选项卡实时滑动的动画效果。 实现逻…

RMSNorm模块

目录 代码代码解释1. 初始化方法 __init__2. 前向传播方法 forward3. 总结4. 使用场景 可视化 代码 class RMSNorm(torch.nn.Module):def __init__(self, dim: int, eps: float):super().__init__()self.eps epsself.weight nn.Parameter(torch.ones(dim))def forward(self,…

【USRP】NVIDIA Sionna:用于 6G 物理层研究的开源库

目录 Sionna:用于 6G 物理层研究的开源库主要特点实现6G研究的民主化支持 5G、6G 等模块化、可扩展、可伸缩快速启动您的研究 好处原生人工智能支持综合研究平台开放生态系统 安装笔记使用 pip 安装基于Docker的安装从源代码安装“你好世界!”探索锡奥纳…

大模型开发(四):PET项目——新零售决策评价系统(上)

PET项目——新零售决策评价系统(上) 0 前言1 项目介绍1.1 PET简介1.2 项目背景1.3 项目结构1.4 硬件配置 2 数据处理2.1 数据介绍2.2 提示词模板与标签映射2.3 BERT模型的输入格式2.4 硬模板类2.5 函数式编程2.6 datasets模块主要功能:在本项…

C语⾔数据类型和变量

C 语言的数据类型 类型分类: C 语言提供丰富的数据类型,包括字符型(char、signed char、unsigned char)、整型(short、int、long 等多种,且各有 signed 和 unsigned 修饰形式) 、浮点型&#x…

yum源选要配置华为云的源,阿里云用不了的情况

curl -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo

JDBC连接数据库(MySQL)教程(包含可能出错的问题)

阅读提示:这篇文章关于Mysql的知识涉及到的不是很多,如果有需要我改天专门写一篇详细的关于mysql的文章,当然点进来的人大部分肯定是了解过mysql的。 一、准备工作(驱动包) 1.1 下载IntelliJ IDEA(主要用…