STM32 DMA 自我学习 简单总结

发布者:sjjawx831最新更新时间:2017-11-29 来源: eefocus关键字:STM32  DMA 手机看文章 扫描二维码
随时随地手机看文章

        简单记录一下STM32的DMA的配置说明--------

        根据野火的串口的DMA程序,自己简单理解说明-----

----第一部分----DMA配置-----

void USART1_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);  //时钟

DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;    //设置DMA源:串口数据寄存器地址----基地址----如果后面打开了地址自增---则会传输连续一组数据  
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;   //内存地址(要传输的变量的指针)---也就是DMA传输的源地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //方向:外设是目的地----如果是--DMA_DIR_PeripheralSRC---则是外设作为数据传输的来源
DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;  //DMA要传输的总数据大小   
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址不增---外设地址不自增---表示从一个固定地址传输或者接收数据----反之则为一个递增地址
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址自增---内存地址不自增---也表示从一个固定地址传输或者接收数据----反之则为一个递增地址
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外设数据单位---分别有8位---字---DMA_PeripheralDataSize_Byte。半字---DMA_PeripheralDataSize_HalfWord。字----DMA_PeripheralDataSize_Word---
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;  //内存数据单位 8bit---分别有8位---字---DMA_MemoryDataSize_Byte。半字---DMA_MemoryDataSize_HalfWord。字----DMA_MemoryDataSize_Word--- 
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;   //DMA模式:不断循环 ----另一种模式--循环---DMA_Mode_Normal
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;    //优先级:中-----分别有----最高优先级---DMA_Priority_VeryHigh。高优先级---DMA_Priority_High。中优先级---DMA_Priority_Medium。低优先级---DMA_Priority_Low。
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;   //禁止内存到内存的传输   

DMA_Init(DMA1_Channel4, &DMA_InitStructure);  //配置DMA1的4通道---对应USART1_TX。还有很多相应已经确定好的通道----见下面截图----截图01   
DMA_Cmd (DMA1_Channel4,ENABLE);  //使能DMA

//DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);  //配置DMA发送完成后产生中断----这个是根据需要来确定是否需要中断---比如你需要确定DMA什么时候完成传输----传输完成后你需要做一些什么的时候。但是如果配置了使用完成中断,则需要在后面配置其作为中断的优先级。
}

---第二部分---如果前面打开了DMA中断,这里需要配置其中断优先级----

static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  
  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn;  //主要是这里的对应DMA通道
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

---第三部分---如果前面打开了DMA中断,这里需要设置其中断函数----

void DMA1_Channel4_IRQHandler(void)

{

  if(DMA_GetFlagStatus(DMA1_FLAG_TC4)==SET)  //DMA发送完成标志----其它标志位见截图02---和截图03--

  {

    ..............

    DMA_ClearFlag(DMA1_FLAG_TC4);  //清除发送完成标志---以便下次判断

  }

}

----------------------------------------截图------------------------------

--------------截图01---------------




----------------------截图02-------------------------


--------------------------------截图03-----------------------




关键字:STM32  DMA 引用地址:STM32 DMA 自我学习 简单总结

上一篇:STM32 SysTick 精准延时 简单分析
下一篇:STM32 ADC自我学习总结

推荐阅读最新更新时间:2024-03-16 15:47

STM32的I2C的原理与使用(24C02附代码)
一、IIC的定义 I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS开发用于连接微控制器及其外围设备。IIC是一种多向控制总线,就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。这种方式简化信号传输总线。 它由数据线SDA和时钟SCL构成的串行总线,接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上,可发送接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。 IIC是半双工通信方式。 二、多主机I2C总线系统结构 2)多设备的使用举例
[单片机]
<font color='red'>STM32</font>的I2C的原理与使用(24C02附代码)
更改STM32定时器周期后的输出疑问分析
他先将STM32某定时器计数周期设为0xff,单向递增计数模式,OC比较值设为0x7F。 在某时刻将新的计数周期0x7F与比较值0x3F加载到影子寄存器。 当正在进行的一个周期结束后,经示波器测量确实可以看到其下一个周期发生变化,但其周期明显与预设值对应不上! 再次经过一个周期,定时器才会按照预设值稳定输出。 以上是咨询者不算很清晰的描述【其实咨询TIMER问题最好配上时序图】,但可以了解到他要做的事情就是在ARR=0xff,ccr=0x7F的PWM输出状态下,于某时刻赋予ARR和CCR新值以改变输出波形。 事情不算复杂,疑点就是为什么需要2个周期延时后才能有基于新配置的稳定输出。 【他这里说的2个周期显然不清楚到底指的前
[单片机]
更改<font color='red'>STM32</font>定时器周期后的输出疑问分析
最简单的方式 创建STM32的工程(使用标准库)-1
1:看到网上好多资料有关怎么创建STM32工程文件的,比较麻烦,都是建啥文件夹,然后拷贝文件,挪来挪去。其实在STM32标准库中本来就有工程文件的样板,如下图,有5中IDE的工程文件样板。我这里选用的标准库是F1系列的。 2:我电脑装的IDE是MDK uVision V4.00。打开上面MDK-ARM文件夹,双击直接打开Project.uvproj 工程文件。 3:直接编译-build,没问题! 这里介绍下工程目录: STM32100E-EVAL 是当前工程的名字,100E应该是一款MCU,EVAL尾缀是evalution的简写,评估的意思。 User: 里面放main.c 和 stm32f10x_it.c ,我
[单片机]
最简单的方式 创建<font color='red'>STM32</font>的工程(使用标准库)-1
STM32_RTC笔记
RTC这东西晕晕的,因为一个模块涉及到了RTC,BKP,RCC多个模块,之间的关系让人有点模糊 入门的知识请大家看手册,我来总结: 总之,RTC只是个能靠电池维持运行的32位定时器over! 所以,使用时要注意以下问题: 1. 上电后要检查备份电池有没有断过电。如何检查? 恩,RTC的示例代码中已经明示: 往备份域寄存器中写一个特殊的字符,备份域寄存器是和RTC一起在断电下能保存数据的。 上电后检查下这个特殊字符是否还存在,如果存在,ok,RTC的数据应该也没丢,不需要重新配置它 如果那个特殊字符丢了,那RTC的定时器数据一定也丢了,那我们要重新来配置RTC了 这个过程包括时钟使能、RTC时钟源切换、设置分频系数等等,这个可以参考
[单片机]
stm32之电源管理(实现低功耗)
前言:STM32F10xxx系列产品都有电源管理模块,芯片功耗会影响到一个产品的续航能力;比如在一些终端传感器场合里,为了减轻后期的维护投入,要求长期工作时间较长,更需要合理的芯片功耗管理。芯片自带几种运行模式,包括正常模式、睡眠模式、停止模式、待机模式。越往后,芯片的功耗越低,但能执行功能就越少。低功耗的电源管理策略就是在芯片不需要对外界响应的时候进入低功耗模式,而当外界条件满足的时候,退出低功耗模式(唤醒),正常执行处理工作。下面对其模式之间的转换和各个模式下的芯片内部的运转情况等一探究竟。 写代码前要先了解芯片的特性及工作原理,难免会先阅读一些长长的文档。下面核心讲解一些要点。 1.硬件原理 下图是芯片的电源框架:
[单片机]
<font color='red'>stm32</font>之电源管理(实现低功耗)
关于STM32的滴答滴答
void SysTick_Configuration(void) { if (SysTick_Config((SystemCoreClock) / 10)) // 1/10s=100ms { while (1); } NVIC_SetPriority(SysTick_IRQn, 0x0); } SysTick_Config(SystemFrequency / 10) 函数的形参就是systick重装定时器的值
[单片机]
STM32学习笔记之ADC转换
1. ADC简介 stm32f103最少有2个AD模数转换器,每个ADC都有18个通道,可以测量16个外部和2个内部模拟量。最大转换频率为1Mhz,也就是转换时间为1us(在 ADCCLK = 14Mhz,采样周期为1.5个时钟周期时)。最大时钟超过14Mhz,将导致ADC转换准确度降低。stm32的ADC是12位精度的。 stm32的ADC转换有两种通道,规则通道和注入通道,注入通道可以抢占式地打断规则通道的采样,执行注入通道采样后,再执行之前的规则通道采样,和中断类似。本例只使用规则通道实现独立模式的中断采样,这里不再赘述两种通道区别。 stm32的ADC可以由外部事件触发(例如定时器捕获,EXTI线)和软件触发(即在配置相关
[单片机]
<font color='red'>STM32</font>学习笔记之ADC转换
关于STM32存储的堆栈地址
由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后有系统释放 4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。 STM32的地址
[单片机]
关于<font color='red'>STM32</font>存储的堆栈地址
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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