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);
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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)