STM32的DMA配置

发布者:boczsy2018最新更新时间:2016-12-26 来源: eefocus关键字:STM32  DMA配置 手机看文章 扫描二维码
随时随地手机看文章

DMA可以认为连接两个“地址”数据通道。DMA共享系统总线,不占用CPU,所以可以实现快速数据传输。

这里以DMA连接存储器(数组)和串口(USART1->DR)为例。


 1 void DMA_init(void)

 2 {

 4 RCC->AHBENR|=1<<0;//时能DMA1时钟

 5 

 7 DMA1_Channel4->CPAR=(u32)&USART1->DR;//读外设串口数据寄存器

 8 DMA1_Channel4->CMAR=(u32)tbuff;//存储器地址为temp地址

 9 DMA1_Channel4->CNDTR=10;//一次接收字节数DMA_BUFF_SIZE

11  //DNA->CCR配置

12  DMA1_Channel4->CCR=0x00000000;//复位DMA

13  DMA1_Channel4->CCR|=0<<14;//非存储器到存储器模式

14  DMA1_Channel4->CCR|=1<<12;//13,12设置通道优先级

15  DMA1_Channel4->CCR|=0<<10;//10,11存储器数据宽度

16  DMA1_Channel4->CCR|=0<<8;//9,8外设数据宽度8位

17  DMA1_Channel4->CCR|=1<<7;//存储器地址增量模式

18  DMA1_Channel4->CCR|=0<<6;//外设地址增量模式

19  DMA1_Channel4->CCR|=0<<5;//循环模式

20  DMA1_Channel4->CCR|=1<<4;//数据传输方向0:从外设读,即从外设到存储器 1:从存储器读,即从存储器到外设

21  DMA1_Channel4->CCR|=0<<3;//允许传输错误中断

22  DMA1_Channel4->CCR|=0<<2;//允许半传输中断

23  DMA1_Channel4->CCR|=0<<1;//允许传输完成中断

24  DMA1_Channel4->CCR|=0<<0;//通道开启

25 }


28 int main(void)

29 {            

31     Stm32_Clock_Init(9); //系统时钟设置

32     delay_init(72);         //延时初始化 

33     uart_init(72,9600);     //串口初始化为9600

34     LED_Init();               //初始化与LED连接的硬件接口 

35     DMA_init(); 

36     LED0=0;  

37 

38     USART1->CR3|=1<<7;//记得要把串口配置为DMA使能,否则DMA不会工作

39     while(1)

40     {

41             

42         DMA1_Channel4->CCR&=~(1<<0);

43         DMA1_Channel4->CNDTR=10;

44         DMA1_Channel4->CCR|=1<<0;

45     

46         while(1)

47         {

48          if(DMA1->ISR&(1<<13))

49          {

50          delay_ms(100);

        LED0=~LED0;

51           DMA1->IFCR|=1<<13;

52           break;

53          }

54         }

55     }     

56 }


关键字:STM32  DMA配置 引用地址:STM32的DMA配置

上一篇:STM32 串口使用
下一篇:stm32的SPI初始化

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

stm32专题十二:DEBUG调试宏 C语言 调试宏
调试宏在c编程中比较重要,通常用于前期测试打印调试信息,然后正式发布时,只需要修改宏,就能取消打印全部调试信息,非常方便。 fmt为希望输出的调试信息,比较关键的就是(fmt,...)和##__VA_ARGS__,__VA_ARGS__用于把...替换成宏并连接。 典型用法: void DefaultFlashSet(void) { // 若Flash标记地址的值没有被正确的写入,则重新写入,只会在全片擦除后执行 if ((InternalFlashRead(FLASH_SIGN_ADDR) != FLASH_WRITE_SIGN)) { DEBUG_INFO( Flash擦除 ); InternalFlas
[单片机]
<font color='red'>stm32</font>专题十二:DEBUG调试宏 C语言 调试宏
STM32学习之:NVIC的初步理解
1 对NVIC的理解 CM3支持硬件中断嵌套,分为抢占式优先级和亚优先级,使用规则主要有,抢占优先级高级别的可以打断低级别的,同一级别的抢占优先级同时发生时,亚当优先级高的先发生中断,若是相同,则按硬件排列顺序发生。若是有一个亚优先级正在执行中断,同一级别的其它亚优先级发生时,则先挂起,等此中断执行完再执行! 从库函数中找到优先级分组模式: #define NVIC_PriorityGroup_0 ((uint32_t)0x700) /* 0 bits for pre-emption priority 4 bits for subpriority */
[单片机]
STM32开发笔记59: STM32F407的启动模式
单片机型号:STM32F407VGT6 本文介绍STM32F407的启动模式,也称为BOOT模式。STM32F407可以有3种方式进行启动,见下表,我们一般采用从FLASH进行程序启动的方式,所以,对于一般的电路图只需将BOOT0引脚下拉到地,即可满足设计要求,而不需考虑BOOT1引脚。 不过,STM32内部还隐含着另外一种启动方式,如下列文字所述。其表述的思想是STM32在出厂时已内嵌bootloader程序,可以从USART1、USART3、CAN2和USB OTG FS进行启动。 这种启动模式,需将BOOT0设置为1,BOOT1设置为0。所以如果希望应用STM32的Bootloader功能,则需将BO
[单片机]
<font color='red'>STM32</font>开发笔记59: STM32F407的启动模式
基于STM32+华为云IOT设计的酒驾监控系统
1. 前言 随着人们生活水平的提高,为了减少和杜绝车的现象越来越多,所引发的交通事故也引起了人们的重视,为了减少和杜绝酒后驾车导致事故发生,当前设计了一种安装在驾驶室内,能根据具体功能进行鉴别酒精浓度的系统,当识别到酒驾之后会发出警报,并发送短信给指定紧急联系人,通知家人通知酒驾,一起监督行车安全。并将GPS数据上传到华为云物联网平台,调用地图模块显示具体位置,主控芯片采用STM32单片机,GSM模块采用IM800C。系统还带了一块LCD显示屏,可以实时显示检测的酒精含量,酒精超标后,本地蜂鸣器也会发出警报,提醒驾驶员。 测量酒驾的标准是: (1)饮酒驾车是指车辆驾驶人员血液中的酒精含量大于或者等于20mg/100ml,小
[单片机]
基于STM32+华为云IOT设计的酒驾监控系统
STM32学习之路-FSMC与LCD
以下的资料都是从别的大虾那里偷来的.在此谢谢人家的分析.让我们站在巨人的肩膀上学习. 开发板:奋斗V5 这是从http://www.cnblogs.com/hduxyc/archive/2011/05/17/2048099.html这里copy过来的 FSMC全称“静态存储器控制器”。 使用FSMC控制器后,可以把FSMC提供的FSMC_A 作为地址线,而把FSMC提供的FSMC_D 作为数据总线。 (1)当存储数据设为8位时,(FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b) 地址各位对应FSMC_A ,数据位对应
[单片机]
<font color='red'>STM32</font>学习之路-FSMC与LCD
STM32串口通信:修改标准库的printf通过USART打印
USART1需要事先进行较为麻烦配置,配置之后发现即使用HAL函数发送语句还要事先以字符串方式定义,实在是麻烦,虽然后面另外自己写了一个简单的库来操作串口,但看到了更简单的方法,修改标准库中printf相关的两个函数,达到通过printf来串口输出的效果。 (在配置完要使用的串口后) 先在main.c中加上 #include stdio.h 然后重定向两个函数,这里指定的是USART1接口,PA9和PA10,其他USART或者UART自行修改即可 int fputc(int ch, FILE *f) { USART1- DR=(uint8_t)ch; while((USART1- SR&0X40)==0); return ch
[单片机]
stm32 ADC全解(单次,连续DMA传输)
学习STM32的ADC转换,在开发板上写程序调试。 四个任务: 四个任务: 1.AD以中断方式(单次)采集一路 2.AD以中断方式连续采集四路 3.ADC多路采集,DMA传输,DMA深度为一级 4.ADC以DMA方式采集四路,每路DMA深度为28级,并滤波,说明滤波原理 总结: 第一个任务 :ADC以中断方式采集一路ADC,通过配置ADC_InitStructure结构体中的ADC_ScanConvMode,它规定模数转换工作在扫描模式(多通道)还是单次模式(单通道), ADC_InitStructure.ADC_ScanConvMode=DISABLE,为单通道单次模式。 ADC_ContinuousConvMode,定转
[单片机]
STM32 ADC转换(DMA
上次博客已经讲了如何实现ADC转换。这次我使用DMA来帮助ADC的转换。用DMA的话,可以实现多路ADC通道同时转化了。 下面就讲讲怎么借助DMA实现DAC的多路转换。还是基于我自己的规范工程。 1、工程的修改 1)由于要使用ADC功能,必须使用到库文件stm32f10x_adc.c,所以将是stm32f10x_adc.c文件添加到STM32F10x_StdPeriod_Driver工程组中。 2)这次需要使用DMA功能,所以还要讲stm32f10x_dma.c文件添加到STM32F10x_StdPeriod_Driver工程组中. 3)打开stm32f10x_conf.h文件,将原先屏蔽的:#include stm32f
[单片机]
<font color='red'>STM32</font> ADC转换(<font color='red'>DMA</font>)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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