Note
DMA工作的3个条件:①Size传输计数器>0;②触发源有触发信号;③DMA使能
//需要用到的库函数参数介绍
//外设数据宽度
DMA_PeripheralDataSize
//DMA_PeripheralDataSize_Byte 字节-8位,一次传输uint8_t的数据
//DMA_PeripheralDataSize_HalfWord 半字-16位,一次传输uint16_t的数据
//DMA_PeripheralDataSize_Word 字-32位,一次传输uint32_t的数据
//选择硬/软件触发
DMA_M2M
//DMA_M2M_Enable 软件触发-一般适用于存储器到存储器的转运
//DMA_M2M_Disable 硬件触发-触发源可以选择ADC、串口、定时器等,一般都是与外设之间的转运
//DMA使能
DMA_Cmd
//当传输计数器=0,且没有自动重装时,这是无论是否触发,DMA都不会继续再进行转运
//此时需要DMA_Cmd使能给DISABLE关闭DMA,再为传输计数器写入一个>0的数
//再DMA_Cmd使能给ENABLE开启DMA,开始工作
//DMA设置当前数据寄存器(给传输计数器写数据)DMA_Cmd使能给DISABLE关闭DMA时才能使用
void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber);
//DMA获取当前数据寄存器(返回传输计数器的值)
uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);
-
1.DMA介绍
1)DMA简介
-
DMA(Direct Memory Access)直接存储器存取
-
DMA可以提供外设和存储器(硬件触发)或者存储器和存储器(软件触发)之间的高速数据传输,无须CPU干预,节省了CPU的资源
-
12个独立可配置的通道:DMA1(7个通道),DMA2(5个通道)
-
每个通道都支持软件触发和特定的硬件触发
-
STM32F103C8T6DMA资源:DMA1(7个通道)
2)存储器映像
3)DMA框图
4)DMA基本框图
5)DMA请求
6)数据宽度与对齐
7)数据转运+DMA
-
将DataA转到DataB,外设地址给DataA数组地址,存储器地址给DataB的首地址
-
宽度按数组长度8位字节传输,两地址都自增,传输计数器给7,无需自动重装,使用软件触发
-
最后调用DMA_Cmd( )函数启动DMA
8)ADC扫描模式+DMA
-
外设地址给ADC_DR地址,存储器地址在SRAM中定一个数组ADValue