DMA(STM32)
1.DMA:data memory access //实际的内存存储
注:DMA干活的时候是不须要CPU干涉的
2.
①内存(定义的变量)---外设(寄存器)。
②内存---内存
③外设---外设(一个外设的寄存器到还有一个外设的寄存器)
3.
STM32有两个DMA控制器
如图:

4.举例说明:(内存到外设,串口1 TX DMA)
1 void USART1_DMA_Config(void)
2 {
3 DMA_InitTypeDef DMA_InitStructure;
4
5 /*Open the DMA clock*/
6 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
7
8 /*Set the DMA source: serial port data register address*/
9 DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;
10
11 /*Memory address,(A pointer to the variable transmission)*/
12 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;
13
14 /*Direction:From memory to the peripherals*/
15 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
16
17 /*Transmission size:DMA_BufferSize=SENDBUFF_SIZE*/
18 DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;
19
20 /*It does not increase peripheral address*/
21 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
22
23 /*Memory address since the increase*/
24 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
25
26 /*A peripheral unit of data*/
27 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
28
29 /*Memory data unit:8bit*/
30 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
31
32 /*The DMA mode: cycle*/
33 //DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
34 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
35
36 /*priority:medium*/
37 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
38
39 /*Memory to memory transmission is prohibited*/
40 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
41
42 /*Configuration of the channel 4*/
43 DMA_Init(DMA1_Channel4, &DMA_InitStructure);
44
45 /*enable DMA1_Channel4*/
46 DMA_Cmd (DMA1_Channel4,ENABLE);
47 //DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE); //Configuration after completion of the DMA interrupt
48 }
①USART1_TX挂载在DMA1的通道4(每一个DMA有7个通道,相应不同外设)如图:

②程序第九行source(源)
即:源头地址(外设地址)
1
#define USART1_DR_Base 0x40013804 // 0x40013800 + 0x04 = 0x40013804
怎么算出来的呢?
请来看:

基地址是什么呢?

故:串口1的数据寄存器地址:
// 0x40013800 + 0x04 = 0x40013804
③内存地址,自定义的数组
④方向:内存到外设
⑤传输大小:5000个字节
⑥外设地址不增,内存地址自增。把5000个字节循环发完
⑦发送模式:有Normal:送完5000个字节工作就结束了。circular则是循环发送
⑧优先级:假如在一个程序里面有几个外设同一时候申请了DMA请求,则依据优先级不同来选择配置那个
⑨禁止内存到内存的传输
4.看看main函数
uint16_t i;
/*Filling is going to send data*/
for(i=0;i<SENDBUFF_SIZE;i++)
{
SendBuff[i] = 'A';
}
/* USART1向DMA发出TX请求*/
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
/* 此时CPU是空暇的。能够来做别的事情*/
//LED At the same time scintillation
for(;;)
{
LED1(ON);
Delay(0xFFFFF);
LED1(OFF);
Delay(0xFFFFF);
}
注:这样串口1不断向外发送数据,不影响CPU执行,CPU能够藤下时间做别的事情;(同事干两件事情)
M3里面的DMA仅仅能软件触发,有的芯片能够外部的脉冲触发;
瘋子随记
DMA(STM32)的更多相关文章
- CAN通信(STM32)
1.CAN是控制器局域网络(Controller Area Network, CAN)的简称 (理论知识不做讲解了,太多了) 2.芯片选用:TJA1050 差分信号输入, 这里的显性电平CANH和CA ...
- eBox(stm32) 之中断结构
eBox的中断结构参考了mbed,和我们平时所用的中断结构有些差异,不容易理解,最近仔细看了底层代码,终于搞清楚了,总结一下 一 首先要要搞清楚的几个概念:类的静态成员,实例成员 ...
- FSMC(STM32)
(一)FSMC:Flexible Static Memory Controller,可变(灵活)静态存储控制器 小容量产品是指闪存存储器容量在1 6K至32K 字节之间的STM32F101xx.STM ...
- STM32 串口功能 库函数 详解和DMA 串口高级运用(转载)
数据传输时要从支持那些相关的标准?传输的速度?什么时候开始?什么时候结束?传输的内容?怎样防止通信出错?数据量大的时候怎么弄?硬件怎么连接出发,当然对于stm32还要熟悉库函数的功能 具起来rs232 ...
- STM32的USART DMA传输(转)
源:STM32的USART DMA传输 问题描述: 我有一个需求,AD采得一定数目的数据之后,由串口DMA发出,由于AD使用双缓冲,所以每次开始DMA的时候都需要重新设置开始的内存地址以及传输的数目( ...
- stm32 DMA数据搬运 [操作寄存器+库函数](转)
源:stm32 DMA数据搬运 [操作寄存器+库函数] DMA(Direct Memory Access)常译为“存储器直接存取”.早在Intel的8086平台上就有了DMA应用了. ...
- STM32(11)——DMA
简介: DMA:Direct Memory Access,直接存储器访问.DMA传输数据从一个地址空间复制到另外一个地址空间.当CPU初始化这个传输动作,传输动作本身就是DMA控制器来实现和完成.典型 ...
- 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)(转)
引子 STM32的硬件I2C很多人都对它望而却步.因为很多电工都说,STM32 硬件 I2C有BUG.不稳定.死机等等……最后都使用GPIO模拟I2C. 的确,模拟I2C好用.但是在我看来在一个72M ...
- (六)STM32的时钟系统
在STM32中,一共有5个时钟源,分别是HSI.HSE.LSI.LSE.PLL (1) HSI是高速内部时钟,RC振荡器,频率为8MHz: (2) HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外 ...
随机推荐
- Java中单例七种写法(懒汉、恶汉、静态内部类、双重检验锁、枚举)
/*** * 懒汉模式 1 * 可以延迟加载,但线程不安全. * @author admin * */ public class TestSinleton1 { private static Test ...
- git创建分支与合并分支
git branch myfeture 创建分支 git checkout myfeture git add --all git commit -m git push origin myfeture ...
- html5 input的type属性启动数字输入法
html5 input的type属性启动数字输入法 当文本框只能输入数字是一个很常见的需求,比如电话号码,身份证号,卡号, 数量....等等只允许数字输入,为了更好的用户体验性,直接写出 启动数字 ...
- 与《YII框架》不得不说的故事—5篇目录
与<YII框架>不得不说的故事—基础篇 第1章 课程目标 1-1 课程目标 (00:54) 第2章 课前知识准备 2-1 YII的启动和安装 (05:12) 2-2 YII请求处理流程 ( ...
- 3种方式实现可滑动的Tab
1. 第一种,使用 TabHost + ViewPager 实现 该方法会有一个Bug,当设置tabHost.setCurrentTab()为0时,ViewPager不显示(准确的说是加载),只有点击 ...
- NPO贴片电容容量范围对照表
NPO贴片电容简述 NPO(COG)贴片电容属于Class 1温度补偿型电容.它的容量稳定,几乎不随温度.电压.时间的变化而变化.尤其适用于高频电子电路. NPO(COG)贴片电容特性 具有最高的电容 ...
- 四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现
原文:四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现 虽然说现在官方的自带插件已经有很多了,但是有时候往往不能满足我们 ...
- nyoj三个水杯(bfs)
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互 ...
- BootStrap 智能表单系列 首页 (持续更新中...)
背景:本码农.NET后端工程师,在项目开发中发现写了很多重复的代码, 于是自己整了一套根据配置来生成form表单的插件,针对表单的改动仅需要修改配置的json即可 使用中发现还是蛮实用的,于是开源出来 ...
- 行内元素有哪些?块级元素有哪些?CSS的盒模型?转载
块级元素:div p h1 h2 h3 h4 form ul行内元素: a b br i span input selectCss盒模型:内容,border ,margin,padding css中的 ...