> 文章列表 > 8 DWA(一)

8 DWA(一)

8 DWA(一)

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框图

8 DWA(一)

DMA基本结构

8 DWA(一)

DMA进行转运的条件:

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

DMA请求

8 DWA(一)

数据宽度与对齐

8 DWA(一)

数据转运+DMA

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

8 DWA(一)

ADC扫描模式+DMA

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

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

8 DWA(一)

函数解释:

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);	   //清除中断挂起位