8 DWA(一)

DMA是一种允许外设直接与内存交换数据的技术,减少了CPU的干预。STM32F103C8T6微控制器包含DMA1和DMA2,共12个通道。在DMA传输中,需要启用通道、设置传输计数器和触发源。常见应用包括数据转运和配合ADC扫描模式。文章还列举了相关配置和管理函数。
摘要由CSDN通过智能技术生成

8 DWA

DMA简介

DMA(Direct Memory Access)直接存储器存取(可以直接访问32内部存储器,包括内存SRAM,Flash)
DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源
存储器和存储器(软件触发);外设和存储器(硬件触发)
12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道)
每个通道都支持软件触发和特定的硬件触发

STM32F103C8T6 DMA资源:DMA1(7个通道)

8.1 DWA直接存储读取

存储器映像

类型起始地址存储器用途
ROM(只读)0x0800 0000程序存储器Flash存储C语言编译后的程序代码
0x1FFF F000系统存储器存储BootLoader,用于串口下载
0x1FFF F800选项字节存储一些独立于程序代码的配置参数
RAM(随机存储器)0x2000 0000运行内存SRAM存储运行过程中的临时变量
0x4000 0000外设寄存器存储各个外设的配置参数
0xE000 0000内核外设寄存器存储内核各个外设的配置参数(NVIC和SysTick)

DMA框图

在这里插入图片描述

DMA基本结构

在这里插入图片描述

DMA进行转运的条件:

第一,就是开关控制,DMA_Cmd必须使能;
第二,传输计数器必须大于0;
第三,触发源必须由触发信号;

DMA请求

在这里插入图片描述

数据宽度与对齐

在这里插入图片描述

数据转运+DMA

将DataA转到DataB,外设地址给DataA数组地址,有储器地址给Data B的首地址,宽度按8位字节传输,两地址都自增,传输计数器给7,无需自动重装,用软件触发,调用DMA_ Cmd( )

在这里插入图片描述

ADC扫描模式+DMA

DMA最常见的用途就是配合ADC的扫描模式

外设地址给ADC_DR地址,有储器地址在SRAM中定一个数组ADValue,以16位半字转输

在这里插入图片描述

函数解释:

void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx);		//恢复缺省配置
void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct); //初始化
void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct);		//结构体初始化

void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);		//DMA通道使能
void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);	//中断输出使能
void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); //设置当前传输数据寄存器
uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);	//获取当前传输数据寄存器

FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG);	//获取标志位状态
void DMA_ClearFlag(uint32_t DMAy_FLAG);			   //清除标志位
ITStatus DMA_GetITStatus(uint32_t DMAy_IT);		   //获取中断状态
void DMA_ClearITPendingBit(uint32_t DMAy_IT);	   //清除中断挂起位
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值