STM32---DMA与常用存储介绍

DMA(Direct Memory Access)—直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU。

然后了解的是三个方面的部分:

1.从哪里来到哪里去:从存储器到存储器(需要特别的配置),从存储器到外设,从外设到存储器。

2.数据量以及数据的单位:数据量的配置:DMA_CNDTR    单位的配置:DMA_CCRx(8/16/32位的配置)

正确设置两边数据指针的增量模式:外设的地址指针由 DMA_CCRx 的 PINC 配置,存储,存储器的地址指针由DMA_CCRx的MINC配置

3.什么时候传输结束:查询标志位或者通过中断的方式来鉴别,各个标志位参数的描述请看DMA_ISR,然后传输的模式分一次传输以及循环传输

DMA初始化结构体的描述

typedef struct

{

uint32_t DMA_PeripheralBaseAddr; //外设地址

uint32_t DMA_MemoryBaseAddr;     //存储器地址

uint32_t DMA_DIR;               //传输方向

uint32_t DMA_BufferSize;    //传输数目

uint32_t DMA_PeripheralInc;     //外设增量模式

uint32_t DMA_MemoryInc;       //存储器增量模式

uint32_t DMA_PeripheralDataSize;//外设数据宽度

uint32_t DMA_MemoryDataSize;   //存储器数据宽度

uint32_t DMA_Mode;         //模式选择(一次循环/无限循环)

uint32_t DMA_Priority;      //DMA优先模式

uint32_t DMA_M2M;          //设置存储器到存储器的传输方向

}DMA_InitTypeDef;

一般的步骤:

使能DMA时钟

配置DMA数据参数

使能DMA进行传输

一般用到的函数在官方库里的头文件有讲解与使用,在参数配置里面不理解的可以看官方的头文件

void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx);

void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);

void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct);

void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);

void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);

void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber);

uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);

FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG);

void DMA_ClearFlag(uint32_t DMAy_FLAG);

ITStatus DMA_GetITStatus(uint32_t DMAy_IT);

void DMA_ClearITPendingBit(uint32_t DMAy_IT);

以上是官方头文件里的函数

DMA_DeInit与DMA_Init里是对DMA的初始化方面的。在Init里面第一个参数是通道,比如说DMA1_Channel6,DMA_Cmd是对DMA的操控,后面的参数NewState一般是Enable之类的

正如函数名的定义那样,这些函数通俗易懂,值得需要了解的是DMA_IT这个定义,是有关中断设置的,能被以下几个固定的值赋值,定义也如英文解释的那个样子,DMA_IT_TC,传输结束后进行中断,DMA_IT_HT,半传输中断.DMA_IT_TE:传输错误中断。void DMA_ClearFlag(uint32_t DMAy_FLAG);这个是清除标志位,在传输结束后会自动标志,所以当我们想重新使用的时候必须要自己清零。

* @param  DMA_IT: specifies the DMA interrupts sources to be enabled
  *   or disabled.
  *   This parameter can be any combination of the following values:
  *     @arg DMA_IT_TC:  Transfer complete interrupt mask
  *     @arg DMA_IT_HT:  Half transfer interrupt mask
  *     @arg DMA_IT_TE:  Transfer error interrupt mask
  * @param  NewState: new state of the specified DMA interrupts.
  *   This parameter can be: ENABLE or DISABLE.

今天晚上看的下一章是常用存储器介绍

存储器一般是RAM与ROM,然后还有FLASH,RAM分DRAM与SRAM,DRAM是动态的,断电后数据会消失,而SRAM是静态,以锁存器存储数据,SRAM一般用于高速缓存。

然后就是ROM与FLASH(NOR与NAND,NOR地址线与数据线分开,由地址得到数据不需要复杂的转化,然而NAND地址线与数据线是共用的,而且NOR可以字节读取,而NAND只能块读取,而且NAND的寿命不比NOR长)

原文地址:https://www.cnblogs.com/wxb1314520/p/12297404.html

时间: 2024-10-01 09:33:54

STM32---DMA与常用存储介绍的相关文章

[转帖]mysql常用存储引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介绍与如何选择

mysql常用存储引擎(InnoDB.MyISAM.MEMORY.MERGE.ARCHIVE)介绍与如何选择原创web洋仔 发布于2018-06-28 15:58:34 阅读数 1063 收藏展开 https://blog.csdn.net/CSDN___LYY/article/details/80844606 一:前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的

stm32 DMA数据搬运 [操作寄存器+库函数](转)

源:stm32 DMA数据搬运 [操作寄存器+库函数] DMA(Direct Memory Access)常译为“存储器直接存取”.早在Intel的8086平台上就有了DMA应用了. 一个完整的微控制器通常由CPU.存储器和外设等组件构成.这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由CPU完成.如此一来,CPU作为整个芯片的核心,其处理的工作量是很大的.如果CPU先从A外设拿到一个数据送给B外设使用,同时C外设又需要D外设提供一个数据...这样的数据搬运工作将使CPU的负荷显

C#文件读写常用类介绍

首先要熟悉.NET中处理文件和文件夹的操作.File类和Directory类是其中最主要的两个类.了解它们将对后面功能的实现提供很大的便利.      本节先对和文件系统相关的两个.NET类进行简要介绍.  System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间.下面通过程序实例来介绍其主要属性和方法.  (1) 文件打开方法:File.Open () 该方法的声明如下: public static FileS

Dreamweaver简明手册——常用功能介绍

1.概述 Dreamweaver 是一款集网页制作和管理网站于一身的所见即所得网页编辑器,在开发前端视图页面的时候,用这个工具,能让代码更清晰化,界面更整洁,可以大大的提升Web前端开发效率.基于数通畅联的AEAI DP开发平台可以直接生成JSP前端页面,通常在AEAI DP中使用JSP编辑器编辑JSP页面,但是JSP编辑器强于在JSP页面上写JAVA代码片段,但调整页面里的表单元素以及CSS样式等不方便,因此,一般采用AEAI D跟Dreamweaver配合进行前端JSP页面扩展开发.本文对D

[转]MySQL性能调优与架构设计——第11章 常用存储引擎优化

第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处.如何将各种存储引擎在自己的应用环境中结合使用,扬长避短,也是一门不太简单的学问.本章选择最为常用的两种存储引擎进行针对性的优化建议,希望能够对读者朋友有一定的帮助. 11.1 MyI SAM存储引擎优化 我们知道,MyISAM存储引擎是MySQL最为古老的存储引擎之一,也是最为流行的存储引擎之一.对

Docker生态系统系列之一:常用组件介绍

[编者的话]本篇文章是介绍Docker生态系统的第一篇,不仅从概念上介绍了容器化.服务发现和全局配置存储.网络工具.调度.集群管理和编排这几部分内容,而且配以清晰易懂的例子进行讲解说明,非常值得读者称赞.Docker是现在使用最多的容器化软件.与其它已经存在的容器化系统相比,Docker可以更加简单的创建和管理容器,并与其它开源软件集成. 简介 容器化是一个以可移植和可预测的方式来部署分布式应用的过程,它会将应用组件以及依赖打包为一个标准.独立.轻量的环境,这个环境其实就是容器.现在许多公司都乐

Redis常用数据类型介绍、使用场景及其操作命令

Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字典) 4.Set(集合) 5.Sorted Set(有序集合) 下面就分别介绍这五种数据类型及其相应的操作命令. 1. String(字符串) String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字.String在redis内部存储默认就是一个字符串,被

Ansible 自动化运维工具之inventory和常用模块介绍

一.inventory介绍 前面我们介绍过ansible的hosts文件是存放被管理主机的,被管理主机比较少的情况下,直接在hosts中定义即可,但是以后很定会管理多台主机,而ansible可管理的主机集合就叫做inventory.在ansible中,描述你主机的默认方法是将它们列在一个文本文件中,这个文件叫inventory文件. 一个简单的inventory文件可能只包含一组主机名的列表,如下: ftp.testansible.com samba.testansible.com mail.t

MySQL性能调优与架构设计——第11章 常用存储引擎优化

第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处.如何将各种存储引擎在自己的应用环境中结合使用,扬长避短,也是一门不太简单的学问.本章选择最为常用的两种存储引擎进行针对性的优化建议,希望能够对读者朋友有一定的帮助. 11.1 MyI SAM存储引擎优化 我们知道,MyISAM存储引擎是MySQL最为古老的存储引擎之一,也是最为流行的存储引擎之一.对