DMA的简单了解与认识

DMA就是为了减轻CPU的负担来设置的存储方式。当从外设取到的数据就不需要经过内核操作,而是通过DMA直接把外设的数据放到内存SRAM中,这样就会减少CPU的负担,让CPU在此同时能做更多的事情。(直接存储器)

对于32的学习已经轻车熟路了,这时我们就会开始想到会有一个关于DMA的结构体即DMA_InitTypeDef

这时就会想到对其结构体的参数进行配置

void USART1_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;

NVIC_Config(); //中断的配置

/开启DMA时钟/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

/设置DMA源:串口数据寄存器地址//到哪里去/
DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;

/内存地址(要传输的变量的指针)/这里一般的话都是变量
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;

/方向“从内存到外设”/ (当外设作为地址的时候)
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

/传输的大小/
DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;

/外设地址不增/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

/内存地址自增/(因为有5000个字节所以每次发完一个就指向下一个)
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

/外设的数据单元/
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

/内存的数据单元/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;

/传输模式:这是支循环一次(不断循环)*/
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
// DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

/优先级为中/
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;

/禁止内存到内存传输*/
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

/根据上面配置DMA的4通道/
DMA_Init(DMA1_Channel4, &DMA_InitStructure);

/使能DMA/
DMA_Cmd (DMA1_Channel4,ENABLE);
/配置DMA传输完毕产生中断/
DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE); 
}

看到这DMA的配置图就知道,先给配置时钟信号(可以在时钟树图上看到DMA是接着AHB上到的)

首先看到的是DMA_PeripheralBaseAddr = USART1_DR_Base

这是MDA源,也就是外设的基地址,对于USART1_DR_Base,我们能看到这是

#define USART1_DR_Base  0x40013804 // 0x40013800 + 0x04 = 0x40013804

也就是这是DR寄存器的基地址=USART1的地址+偏移量

下图是部分基地址

然后看下DR寄存器

可以看到偏移量为0x04

还有一点注意的就是内存到内存的传输,不能和循环检测一起使用。

DMA的认识的更多相关文章

  1. STM32基于HAL库通过DMA读写SDIO

    通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或 ...

  2. z-stack协议uart分析(DMA)

    1.从ZMain里面的main函数开始分析 2.进入int main( void ); HalDriverInit();   //硬件相关初始化,有DMA初始化和UART初始化 3.进入HalDriv ...

  3. STM32之DMA+ADC

    借用小甲鱼的经典:各位互联网的广大网友们.大家早上中午晚上好..(打下小广告,因为小甲鱼的视频真的很不错).每次看小甲鱼的视频自学都是比较轻松愉快的..我在想,如果小甲鱼出STM32的视频,我会一集不 ...

  4. STM32F103之DMA

    一.背景: 需要使用STM32的DAC,例程代码中用了DMA,对DMA之前没有实际操作过,也很早就想知道DMA到底是什么,因此,看了一下午手册,代码和网上的资料,便有了此篇文章,做个记录. 二.正文: ...

  5. ASM:《X86汇编语言-从实模式到保护模式》越计卷:实模式下对DMA和Sound Blaster声卡的控制

    说实话越计卷作者用了16页(我还是删过的),来讲怎么控制声卡,其实真正归纳起来就那么几点. ★PART1:直接存储访问 1. 总线控制设备(bus master) 在硬件技术不发达的早期,处理器是最重 ...

  6. 【SPI】Polling Interrupt DMA

    三種將資料在I/O間傳送的方法有 1. Polling2. Interrupt-driven I/O3. DMA(Direct Memory Access) Polling:最簡單的方式讓I/O de ...

  7. 关于DMA和它的仇家

    [基础知识]什么叫做DMA?DMA=Direct Memory Access.这是一种通过硬件实现的数据传输机制.简单的说,就是不在CPU的参与下完成数据的传输.[/基础知识]不太明白?我举个简单的例 ...

  8. STM32——DMA接收和发送的实现

    最近写程序,需要一段一段数据的接收,再通过其他串口发送出去. 老司机们建议用DMA通信,以节约CPU资源.然后,我听了,发现挺好用的.特此,把自己写的代码贴上了. DMA发送接收的步骤如下: 1.初始 ...

  9. include/asm/dma.h

    /* $Id: dma.h,v 1.7 1992/12/14 00:29:34 root Exp root $ * linux/include/asm/dma.h: Defines for using ...

  10. DMA控制器

    DMA控制器依赖于平台硬件,这里只对i386的8237 DMA控制器做简单的说明,它有两个控制器,8个通道,具体说明如下: 控制器1: 通道0-3,字节操作, 端口为 00-1F 控制器2: 通道 4 ...

随机推荐

  1. 02scikit-learn模型训练

    模型训练 In [6]: import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import Lin ...

  2. SPOJ - DQUERY (主席树求区间不同数的个数)

    题目链接:https://vjudge.net/problem/SPOJ-DQUERY 题目大意:给定一个含有n个数的序列,有q个询问,每次询问区间[l,r]中不同数的个数. 解题思路:从左向右一个一 ...

  3. Redis 复制原理及特性

    摘要 早期的RDBMS被设计为运行在单个CPU之上,读写操作都由经单个数据库实例完成,复制技术使得数据库的读写操作可以分散在运行于不同CPU之上的独立服务器上,Redis作为一个开源的.优秀的key- ...

  4. 在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码

    这两天装了一个mysql 5.7数据库,但是在本地dos登陆不上去,报错Access denied for user 'root'@'localhost'(using password:YES): 也 ...

  5. django之静态文件的设置

    一:静态文件 Django中提供了一种解析的方式配置静态文件路径.静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理. 为了提 ...

  6. 载]mysqlhotcopy 热备工具体验与总结

    载]mysqlhotcopy 热备工具体验与总结 今天有空尝试了一下MYSQLHOTCOPY这个快速热备MYISAM引擎的工具.(本文是针对单个服务器的情况,以后将会加入多服务器相关操作)他和MYSQ ...

  7. 运行 tensorboard

    使用下面命令总是报错: tensorboard --logdir=mylogdir tensorboard --logdir='./mylogdir' 正确命令 tensorboard --logdi ...

  8. 数据库(一):事务的特性与事务(在同一个 JVM 中)的传递

    参考文章 https://blog.csdn.net/shuaihj/article/details/14163713 https://blog.csdn.net/shfqbluestone/arti ...

  9. Jenkins插件--通知Notification

    参考来源:http://blog.csdn.net/wangmuming/article/details/22925357 ============================ 题外话 邮箱配置需 ...

  10. iText导出PDF(图片,水印,页眉,页脚)

    项目需要导出PDF,导出的内容包含图片和文本,而且图片的数量不确定,在网上百度发现大家都在用iText,在官网发现可以把html转换为PDF,但是需要收费,那就只能自己写了. 在开始之前先在网上百度了 ...