摘自:https://blog.csdn.net/zzwdkxx/article/details/9026173

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  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;//得到当前还剩余多少个数据      

DMA 如何查看它有没有传输完成 传输完成再开启的更多相关文章

  1. ubuntu下查看(改变)本地端口开放情况,开启和关闭防火墙

    查看开放端口: sudo ufw status 允许80端口开放: sudo ufw allow 允许22端口开放: sudo ufw allow 启动防火墙: sudo ufw enable 重启防 ...

  2. STM32基础分析——USART的DMA模式

    有关USART的DMA传输模式,其基本的概念和配置,网上有很多博客和教程都有,这里不再赘述,只是记录一下比较容易忽视而造成调试不通的问题. 1. 串口发送和接收分属两个DMA通道 一般方式操作串口时, ...

  3. 使用filebeat收集不同用应用的日志传输到redis,并加以区分

    附加技巧 步骤流程: 使用filebeat收集一台主机上两个不同应用的日志,传递给redis,然后logstash从redis中拉去数据传递给elasticsearch 1.filebeat.yml文 ...

  4. OSPF 提升 一 ----基础

    ospf  ccnp内容   一  link-state protocols      IGP   开放式的最短路径优先协议     公有协议 支持中到大型的网络    spf算法 链路状态协议 1. ...

  5. linux 系统管理--进程管理

    目录 linux 系统管理--进程管理 一.进程基本概述 二.监控进程状态 三.进程的优先级[进阶] 四.企业案例,Linux假死是怎么回事 五.后台进程管理 六.系统平均负载[进阶] linux 系 ...

  6. STM32的USART DMA传输(转)

    源:STM32的USART DMA传输 问题描述: 我有一个需求,AD采得一定数目的数据之后,由串口DMA发出,由于AD使用双缓冲,所以每次开始DMA的时候都需要重新设置开始的内存地址以及传输的数目( ...

  7. STM32学习笔记——DMA控制器(向原子哥学习)

    一.DMA简介 DMA,全称为:Direct Memory Access,即直接存储器访问,DMA 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.当 CPU 初始化这个传输动作,传输 ...

  8. DriverStudio开发PCI设备DMA数据传输

    DriverWizard向导可以创建基本的wDM驱动程序框架,包括总线类型,地址空间,中断源,DMA资源,以及IOCTL(i/o控制代码)的定义等等.详细情况可参看DriverStudio的帮助文档, ...

  9. DMA设计

    目录 DMA设计 DMA框架 手册请看英文手册 芯片特性 请求来源 协议简述 基本时序 模式 协议 数据大小的描述 具体完整的实例时序 代码设计 驱动程序 测试程序 测试 参考链接 title: DM ...

随机推荐

  1. golang语言入门及安装

    golang语言入门及安装 go语言是google在2009年发布的开源编程语言使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进程. 本次讲解在windows上安装go语言的开 ...

  2. 计算机视觉(ComputerVision, CV)相关领域的站点链接

    关于计算机视觉(ComputerVision, CV)相关领域的站点链接,当中有CV牛人的主页.CV研究小组的主页,CV领域的paper,代码.CV领域的最新动态.国内的应用情况等等. (1)goog ...

  3. Python笔记---错误笔记

    Python---错误笔记 1. Python编码问题: 我们在编写 Python 脚本时,往往会写上中文凝视. 可是有时候,当我们执行程序时.却发现例如以下错误:SyntaxError: Non-A ...

  4. 非对称算法,散列(Hash)以及证书的那些事

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/35389657 作者:小马 这几个概念在金融电子支付领域用得比較多,我忽然认为把它们 ...

  5. linux设置tab键的宽度为4

    先cd 到~目录 ~$ cd ~$ vi .vimrc set nu

  6. div+css制作表格

    html: <div class="table"> <h2 class="table-caption">花名册:</h2> ...

  7. beego的orm ,用的数据库sqlite3

    测试 beego的orm ,用的数据库sqlite3 1 package main import ( "fmt" "github.com/astaxie/beego/or ...

  8. Angular:了解Typescript

    Angular是用Typescript构建的.因此在学习Angular之前有必要了解一下Typescript. [ 类型 ] Typescript增加了类型系统,好处是: 1. 有助于代码编写,预防在 ...

  9. Android系统如何管理自己内存的?

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 机缘巧合写下这篇博客,作为个人工作经验的总结,不足之处,随后补上. 安卓是基于Linux2.6内核的 ...

  10. innodb next-key lock解析

    參考http://blog.csdn.net/zbszhangbosen/article/details/7434637#reply 这里补充一些: (1)InnoDB默认加锁方式是next-key ...