
1)对外设和存储器进行初始化
2)由M2M确定触发方式(merry to merry 存储器到存储器表示软件触发)
3)确定传输模式选择
4)使能DMA
DMA数据转运的详细代码介绍(本次外设作为源地址,选择一次传输,软件触发)
1)开启DMA时钟
2)初始化DMA结构体

PeripheralDaseAddr:为外设地址
PeripheralInc:地址是否自增(若外设定义为寄存器不用自增,增加地址后,寄存器发生改变了,若读取flash,sram中一块区域地址,地址自增)
PeripheralDataSize:外设数据宽度(外设数据为所示字节)
存储器初始化与外设相同
IDR:传输方向(相对于外设来说,若读取外设写入存储器中,定义为源地址,若读取存储器写入外设,定义为目标地址)
BuffSzie:传输数目(自动重载器里面的值,由读取地址内容决定)
Mode:选择一次传输或循环传输(往传输计数器写值的次数,一次还是循环写入)
M2M:软件触发(存储器到存储器)还是硬件触发,使用软件触发,模式不能选择循环模式
Priority:传输优先级
3)使能DMA,DMA开始转运
完成一次后,DMA搬运结束,若循环进行DMA搬运,对传输计数器赋值(软件触发一直有触发信号,使能DMA也不是问题)
4)循环转运DMA(手动写传输计数器,在失能DMA下进行写入)
先失能DMA,调用DMA_SetCurrDataCounter函数对传输计数器赋值,使能DMA ,等待DMA转运完成,清除DMA标准位。
DMA转运AD多通道编程的主要思路
AD配置:通过ADC_RegularChannelConfig函数,配置AD多通道,使用单次,扫描模式
DMA配置:外设地址配置为ADC1的DR寄存器,读取十六位数据(半字读取),地址不自增,定义一个数组为存储器,存储器地址为数组地址,读取数据相同,地址自增,外设为源地址,使用硬件(ADC)触发,选择一次传输模式。
打开ADC触发DMA通道
在(AD:单次,扫描模式 , DMA一次传输)情况下,循环转运,①对传输计数器赋值(与上面相同)②开启ADC软件触发 ③等待DMA转运完成
在(AD:非单次,扫描模式 , DMA循环传输)情况下,只需要软件触发ADC一次,DMA就鞥循环转运。
AD单次模式:触发一次就转化ADC一次,若需要进行循环转化,需要手动进行触发
AD非单次模式:触发一次就能够循环转运
AD非扫描模式:只对规则列表里面的序列1有效,即对序列1里面的通道进行AD转化
AD扫描模式:能够指定规则列表有效的序列数,一般与DMA相配合使用。