当前位置: 首页 > news >正文

STM32——DMA详解

 

目录

一:DMA简介

二:DMA基本结构

三:DMA实现过程

1.框图

2.DMA进行转运的条件

四:函数


一:DMA简介

  • DMA(Direct Memory Access)直接存储器存取

  • DMA可以提供外设存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源

  • 12个独立可配置通道,DMA1(7个通道),DMA2(5个通道)

  • 外设就是寄存器,寄存器就是存储器

  •  DMA2仅存在于大容量产品和互联型产品。

    1. SPI/I2S3、 UART4、 TIM5、 TIM6、 TIM7和DAC的DMA请求仅存在于大容量产品和互联型产品。

    2. ADC3、 SDIO和TIM8的DMA请求仅存在于大容量产品

二:DMA基本结构

传输计数器:递减,减到零后,自增的地址就会返回到起始地址。写入传输计数器的时候

                      必须先关闭使能DMA再写入--DMA_CNDTRx

自动重装器:是否恢复传输计数器的最初的值,即是否循环转运数据,自减,每传输一个

                     就自减一,直到减到0,表示传输完成

软件触发:以最快的速度连续不断的转运数据,一般用于存储器到存储器的转运,一般不

                 与循环模式同时使用

硬件触发:一般是外设,这些转运需要一定的时机,比如ADC转换完成,串口收到数据,

                 定时时间……

开关控制:DMA_Cmd函数

数据宽度:少传多,高位补零;多传少,舍弃高位

 

三:DMA实现过程

1.框图

 MA是AHB总线的设备,所以要用AHB开启时钟的函数

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

2.DMA进行转运的条件

  • 开关控制,DMA_Cmd必须使能

  • 传输计数器必须大于0

  • 触发源必须有触发信号,触发一次转运一次,传输器自减一次。当传输寄存器等于0且没有自动重装时,这时无论是否触发,DMA都不会再进行转运。此时就需要DMA_Cmd给DISABLE,关闭DMA,再给传输寄存器写入一个大于0的数,再DMA_Cmd给ENABLE开启DMA,DMA才能继续工作。

四:函数

    //外部站点
	DMA_InitStructure.DMA_PeripheralBaseAddr = AddrA;//设置站点 
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;//数据自增
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //数据宽度
	//存储器站点
	DMA_InitStructure.DMA_MemoryBaseAddr = AddrB; 
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; 
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
	
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//外设站点作为数据源 
	DMA_InitStructure.DMA_BufferSize = Size; //传输次数
	DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //不是自动重装
	DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; 
	DMA_InitStructure.DMA_M2M = DMA_M2M_Enable
	DMA_Init(DMA1_Channel1, &DMA_InitStructure);

    DMA_Cmd(DMA1_Channel1,ENABLE);

相关文章:

  • 似然函数与极大似然估计
  • 表达式求值(后缀表达式)
  • 软考中级-数据库-3.2 数据结构-数组和矩阵
  • Deepgram推出Nova-3 Medical,AI语音转录助力医疗行业
  • 基于CURL命令封装的JAVA通用HTTP工具
  • Linux中shell对话框(dialog)编程
  • 从零开始学习Slam--数学概念
  • 文心4.5,大模型下半场的野心之作
  • 网络学习(四)HTTPS中,SSL的单向认证与双向认证
  • [自然语言处理]pytorch概述--什么是张量(Tensor)和基本操作
  • Sourcetrail 代码分析工具
  • 年后寒假总结及计划安排
  • Linux 下使用traceroute来进行网络诊断分析
  • css之英文换行样式
  • Python项目】基于Python的图像去雾算法研究和系统实现
  • 【五.LangChain技术与应用】【1.LangChain虚拟环境搭建(上):开发环境的配置】
  • 利用矩阵相乘手动实现卷积操作
  • C++ STL泛型算法之transform
  • 数据库原理3
  • 服务降级的理解
  • 企业网站的形式/比百度好用的搜索软件手机版
  • wordpress login 页面/seo入门基础教程
  • 十大互联网公司排名/优化推广网站淄博
  • 网站开发 工期安排/爱站网长尾关键词搜索
  • 郑州网约车平台/seo服务套餐
  • 东莞市塘厦网站建设/seo优质友链购买