STM32-DMA学习笔记

发布者:喜从中来最新更新时间:2016-01-11 来源: eefocus关键字:STM32  DMA  学习笔记 手机看文章 扫描二维码
随时随地手机看文章
       DMA,全称为:Direct Memory Access,即直接存储器访问。DMA传输方式无需CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM 与I/O设备开辟一条直接传送数据的通路,能使CPU 的效率大为提高。
       STM32中 DMA1有7个通道,DMA2有5个通道(DMA2 仅存在大容量产品中)。DMA挂载的时钟为AHB总线,其时钟为72Mhz,所以可以实现高速数据搬运。
       STM32F103RBT6 只有1 个DMA控制器,DMA1 ,下面我们就针对DMA1 进行介绍。
       从外设(TIMx、ADC、SPIx 、I2Cx 和USARTx )产生的DMA请求,通过逻辑或输入到DMA控制器,这就意味着同时只能有一个请求有效。外设的DMA请求,可以通过设置相应的外设寄存器中的控制位,被独立地开启或关闭。
       DMA1各通道一览:
这里我们要使用的是串口 1 的 DMA 传送,也就是要用到通道 4。
DMA1通道4的配置方法如下:
dma.c主要代码:
[cpp] view plaincopy
 
  1. u16 DMA1_MEM_LEN;//保存DMA每次数据传送的长度             
  2. //DMA1的各通道配置  
  3. //这里的传输形式是固定的,这点要根据不同的情况来修改  
  4. //从存储器->外设模式/8位数据宽度/存储器增量模式  
  5. //DMA_CHx:DMA通道CHx  
  6. //cpar:外设地址  
  7. //cmar:存储器地址  
  8. //cndtr:数据传输量    
  9. void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)  
  10. {  
  11.     RCC->AHBENR|=1<<0;     //开启DMA1时钟  
  12.     delay_ms(1);            //等待DMA时钟稳定  
  13.     DMA_CHx->CPAR=cpar;      //DMA1 外设地址   
  14.     DMA_CHx->CMAR=(u32)cmar;//DMA1,存储器地址  
  15.     DMA1_MEM_LEN=cndtr;     //保存DMA传输数据量  
  16.     DMA_CHx->CNDTR=cndtr;   //DMA1,传输数据量  
  17.     DMA_CHx->CCR=0X00000000;//复位  
  18.     DMA_CHx->CCR|=1<<4;  //从存储器读  
  19.     DMA_CHx->CCR|=0<<5;  //普通模式  
  20.     DMA_CHx->CCR|=0<<6;  //外设地址非增量模式  
  21.     DMA_CHx->CCR|=1<<7;  //存储器增量模式  
  22.     DMA_CHx->CCR|=0<<8;  //外设数据宽度为8位  
  23.     DMA_CHx->CCR|=0<<10; //存储器数据宽度8位  
  24.     DMA_CHx->CCR|=1<<12; //中等优先级  
  25.     DMA_CHx->CCR|=0<<14; //非存储器到存储器模式            
  26. }   
  27. //开启一次DMA传输  
  28. void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)  
  29. {  
  30.     DMA_CHx->CCR&=~(1<<0);       //关闭DMA传输   
  31.     DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,传输数据量   
  32.     DMA_CHx->CCR|=1<<0;          //开启DMA传输  
  33. }  
}  
        在主函数里主要有这几个语句完成DMA传输:
1.首先配置DMA1通道4相关参数
        MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)SendBuff,5200);//DMA1通道4,外设为串口1,存储器为SendBuff,长度5200.
2.然后将待发送内容装入存储器
        SendBuff[i]=TEXT_TO_SEND[t];        
3.然后开启一次DMA传输
        MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输!
4.监控传送进度。
        pro=DMA1_Channel4->CNDTR;//得到当前还剩余多少个数据      
关键字:STM32  DMA  学习笔记 引用地址:STM32-DMA学习笔记

上一篇:STM32-触摸屏实验
下一篇:STM32-SPI实验学习笔记

推荐阅读最新更新时间:2024-03-16 14:43

点亮LED(库函数实现)
本次测试采用的芯片是STM32F103CB 我的开发板如下: 此开发板有8个led,分别为D11,D12,D13,D14,D15,D16,D17,D18。查询核心板的电路图后知道其对应芯片的控制引脚为P0.0,P0.1,P0.2,P0.3,P0.4,P0.5,P0.6,P0.7,P0.8。 现在开始测试点亮D11。主要源代码如下: 1 //main.c 2 #include pbdata.h 3 #include led.h 4 5 int main(void) 6 { 7 led_init(); 8 led_setBit(); 9 } 1 //pbdata.h 2 #ifndef _pbdata
[单片机]
点亮LED(库函数实现)
STM32开发笔记68: keil中使用ST-Link不能成功下载的真实原因
单片机型号:STM32F091RCT6 在STM32开发笔记67: 在keil中使用ST-Link不能成功下载的解决方法提到解决keil中使用ST-Link不能成功下载的一种方法,经仔细分析其实原因还在于程序上。 不能成功下载的程序中,包含如下程序,: CInit::CInit(uint8_t mode) { //底层初始化 HAL_Init(); //GPIO时钟使能 __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENAB
[单片机]
一种基于STM32和PPG技术的腕戴式心率计设计
引言 心血管疾病是威胁人类生命健康的严重疾病,且发病年龄呈现年轻化的趋势。随着人们健康意识的增强,自我保健的需求不断增长,医院中精度高但使用不便的心电图仪已不能满足人们对心脏进行日常监护的需求。因此基于光电容积脉搏波(Photo-Plethysmography,简称PPG)技术的可穿戴式心率测量设备被广泛应用于心率监测领域。虽然市面上已有多种便携式心率仪,但大部分不能在人们进行日常活动时应用,只能进行短时间段的监测,不能有效抵抗运动干扰。夹于耳垂或头戴式的测量设备也不利于用户体验。 基于以上考虑,本文以STM32L152CB为控制核心,设计出了一款可以戴在手腕上的低功耗穿戴式心率计,设备体积小、携带方便、抗干扰能力强、测量精度
[单片机]
一种基于<font color='red'>STM32</font>和PPG技术的腕戴式心率计设计
STM32中断NVIC部分知识总结
1.assert_param 实际上assert_param是一个宏定义,在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。当参数无效时,assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误。 2.NVIC_TypeDef结构体成员: (1)ISER (Interrupt Set Enable Register)中断使能,ISER 的bit0~bit31对应中断0~31,ISER 的bit0~bit27对应中断的32~59,置1对应中断被使能;(还要分组、屏蔽、IO映射) (2)ICER (Clear),置1有效; (3)ISPR (Set Pending)置1正在执行的对应中
[单片机]
<font color='red'>STM32</font>中断NVIC部分知识总结
STM32配置外部中断(EXTI)流程
1:配置外设GPIO端口(具体配置为请看配置GPIO流程) GPIO_Init(); 2:使能复用功能时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 3:初始化外部中断以及配置中断映射 EXTI_InitTypeDef EXTI_InitStruct; GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); //中断映射 EXTI_InitStruct.EXTI_Line = EXTI_Line0; //中断线 EXTI_I
[单片机]
STM32固件库说明
l 版本 :v2.0.3 l 发布时间 :09/22/2008 l 功能: :给出了STM32微控制器片内所有外设的驱动函数,使用户把更多的时间花在应用程序的开发上,以加快产品上市时间。(实质上是将各种寄存器的参数配置定义成宏,并以结构体的方式给寄存器赋值,这样既方便又易懂) l 特点 : 由函数、数据结构和宏组成,包括了微控制器所有外设的功能特征,还包括了每个外设的驱动描述和应用实例 按照ANSI-C编写的,不受开发环境的影响,仅启动文件取决于开发环境(即程序和数据在寄存器中是如何配置的得根据所使用的开发环境),非常易于移植。 每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。函数和参数名称都进行了标准化(函
[单片机]
<font color='red'>STM32</font>固件库说明
LCD实验学习笔记(五):MMU
内存管理分别页表机制和内存分配机制两块。 页表机制就是管理设备真实物理地址与虚拟地址的动态或静态的映射,基于cpu内部的mmu(内存管理单元)进行。 CP15(协处理器)的C0(缓存)是一级页表,含4096个索引(每索引4字节,共16K)。 每个索引项代表1MB地址空间,4096*1MB=4GB=32位CPU可寻址4GB空间。 4096个索引欺项,对应虚拟地址 。 每个索项引占4字节32位,其 含义为: 00无效,MMU向CPU发出缺页异常; 01粗页表,二级页表是64K或4K页; 10段(section),每段长度1MB; 11细页表,二级页表是1K页。 段模式下,送进MMU的32位虚拟地址被分成两部份, 为段索引, 为段内偏移
[单片机]
STM32速成笔记(5)—串口通信
一、什么是串口通信 串口通信是指外部设备与主控芯片之间,通过数据信号线、地线等,按位进行数据传输的一种通信方式,属于串行通信方式。串行通信是指使用一条数据线依次逐位传输数据,每一位数据占据固定长度的时间。可以看一下简单的串行通信示意图。 串口通信示意图 二、串口通信有什么用 这里简单列举一下串口通信的用途 • 下载程序 • 外设与单片机通信 单片机给外设发送一些指令或者配置信息,外设给单片机回传一些信息。 • 打印信息 比如将ADC采集到的电压发送给上位机的串口调试助手,或者实时监测某一个变量的变化。 三、STM32的串口通信 普中核心板上使用的STM32F103ZET6有三
[单片机]
<font color='red'>STM32</font>速成<font color='red'>笔记</font>(5)—串口通信
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved