DMA的认识
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的认识的更多相关文章
- STM32基于HAL库通过DMA读写SDIO
通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或 ...
- z-stack协议uart分析(DMA)
1.从ZMain里面的main函数开始分析 2.进入int main( void ); HalDriverInit(); //硬件相关初始化,有DMA初始化和UART初始化 3.进入HalDriv ...
- STM32之DMA+ADC
借用小甲鱼的经典:各位互联网的广大网友们.大家早上中午晚上好..(打下小广告,因为小甲鱼的视频真的很不错).每次看小甲鱼的视频自学都是比较轻松愉快的..我在想,如果小甲鱼出STM32的视频,我会一集不 ...
- STM32F103之DMA
一.背景: 需要使用STM32的DAC,例程代码中用了DMA,对DMA之前没有实际操作过,也很早就想知道DMA到底是什么,因此,看了一下午手册,代码和网上的资料,便有了此篇文章,做个记录. 二.正文: ...
- ASM:《X86汇编语言-从实模式到保护模式》越计卷:实模式下对DMA和Sound Blaster声卡的控制
说实话越计卷作者用了16页(我还是删过的),来讲怎么控制声卡,其实真正归纳起来就那么几点. ★PART1:直接存储访问 1. 总线控制设备(bus master) 在硬件技术不发达的早期,处理器是最重 ...
- 【SPI】Polling Interrupt DMA
三種將資料在I/O間傳送的方法有 1. Polling2. Interrupt-driven I/O3. DMA(Direct Memory Access) Polling:最簡單的方式讓I/O de ...
- 关于DMA和它的仇家
[基础知识]什么叫做DMA?DMA=Direct Memory Access.这是一种通过硬件实现的数据传输机制.简单的说,就是不在CPU的参与下完成数据的传输.[/基础知识]不太明白?我举个简单的例 ...
- STM32——DMA接收和发送的实现
最近写程序,需要一段一段数据的接收,再通过其他串口发送出去. 老司机们建议用DMA通信,以节约CPU资源.然后,我听了,发现挺好用的.特此,把自己写的代码贴上了. DMA发送接收的步骤如下: 1.初始 ...
- 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 ...
- DMA控制器
DMA控制器依赖于平台硬件,这里只对i386的8237 DMA控制器做简单的说明,它有两个控制器,8个通道,具体说明如下: 控制器1: 通道0-3,字节操作, 端口为 00-1F 控制器2: 通道 4 ...
随机推荐
- JavaScript版EAN码校验算法
<script type="text/javascript"> $(document).ready(function () { $("#btnCalc&q ...
- utf8 中文
#include <iostream> #include <codecvt> #include <fstream> #include <string> ...
- luogu3350 [ZJOI2016]旅行者
链接 P3350 [ZJOI2016]旅行者 题目大意:给出网格图,求两点之间最短路,多组询问. \(n*m\leq10^5\ \ q\leq 10^5\) 考虑\(CDQ\)分治. 首先把询问离线, ...
- bzoj4408 [Fjoi 2016]神秘数 & bzoj4299 Codechef FRBSUM 主席树+二分+贪心
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4299 https://lydsy.com/JudgeOnline/problem.php?id ...
- bzoj5118 Fib数列2 二次剩余+矩阵快速幂
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5118 题解 这个题一看就是不可做的样子. 求斐波那契数列的第 \(n\) 项,\(n \leq ...
- ArrayList,Vector, LinkedList的存储性能和特性?
ArrayList,Vector, LinkedList的存储性能和特性? ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入或删除时非常麻烦. ...
- spark与Hadoop的区别
1. Mapreduce和Spark的相同和区别 两者都是用mr模型来进行并行计算 hadoop的一个作业:job job分为map task和reduce task,每个task都是在自己的进程中运 ...
- @ControllerAdvice全局数据预处理
在传统项目的Controller的方法中传入参数,对象中的属性相同时,会出现以下错误 Book类和Author类 这是因为两个对象中的name相同,传参时分不清西游记和六小龄童 ...
- vue中怎么使用vuex
做一个简单的vuex如何使用的介绍: 先安装: npm i vuex --save-dev 新建一个store文件夹, 在store文件夹中建一个index.js文件,在该文件中: i ...
- plafrom SDK
{ //http://www.alipay-seller.mpymnt.com/node/82 //https://blog.csdn.net/xiaopingping1234567/article/ ...