1、 DMA_InitTypeDef DMA_InitStructure; DMA_InitStructure .DMA_Channel=DMA_Channel_0; DMA_InitStructure .DMA_PeripheralBaseAddr=aSRC_Const_Buffer; DMA_InitStructure .DMA_Memory0BaseAddr=aDST_Buffer; DMA_InitStructure .DMA_DIR=DMA_DIR_MemorytoMemory; DMA_InitStructure .DMA_Buff
2、erSize=32; DMA_InitStructure .DMA_PeripheralInc= DMA_PeripheralInc_Enable; DMA_InitStructure .DMA_MemoryInc= DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize= DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize= DMA_MemoryDataSize_Word; DMA_InitSt
3、ructure .DMA_Mode=DMA_Mode_Normal; DMA_InitStructure .DMA_Priority=DMA_Priority_High; DMA_InitStructure .DMA_FIFOMode= DMA_FIFOMode_Disable; DMA_InitStructure .DMA_FIFOThreshold=DMA_FIFOThreshold_Full; DMA_InitStructure .DMA_MemoryBurst=DMA_MemoryBurst_Single; DMA_InitStruct
4、ure .DMA_PeripheralBurst=DMA_PeripheralBurst_Single; DMA_Init(DMA2_STREAM0,&DMA_InitStructure); DMA_ClearFlag(DMA_STREAM,DMA_FLAG_TCIF);//清除DMA数据流传输完成标志位 DMA_Cmd(DMA2_Stream0,ENABLE);//开始DMA数据传输 DMA外设请求通道的选择 DMA_InitStructure .DMA_Channel 参数选择 DMA_Channel_0 通道0 DMA_Channel_1 通道1 DMA_C
5、hannel_2 通道2 DMA_Channel_3 通道3 DMA_Channel_4 通道4 DMA_Channel_5 通道5 DMA_Channel_6 通道6 DMA_Channel_7 通道7 外设地址 DMA_InitStructure .DMA_PeripheralBaseAddr 参数自定义 1).一般设置为外设的数据寄存器地址 2).存储器到存储器模式,则设置其中一个存储区地址 存储区0地址 DMA_InitStructure .DMA_Memory0BaseAddr 参数自定义 一般设置为我们自定义存储区
6、的首地址,也可以定义一个对应的数组存放数值,直接将数组名赋给DMA_Memory0BaseAddr即可 传输方向 DMA_InitStructure .DMA_DIR 参数选择 DMA_DIR_PeripheralToMemory 外设到存储器 DMA_DIR_MemoryToPeripheral 存储器到外设 DMA_DIR_MemoryToMemory 存储器到存储器 设定待传输数据数目 DMA_InitStructure .DMA_BufferSize 参数自定义 其设定的范围为0-65535,一般明确指定一个传输数量 控制外设地址自动递
7、增功能 DMA_InitStructure .DMA_PeripheralInc 参数选择 DMA_PeripheralInc_Enable 使能外设地址自动递增功能 DMA_PeripheralInc_Disable 失能外设地址自动递增功能 其增加量由DMA_PeripheralDataSize决定; 控制存储器地址自动递增功能 DMA_InitStructure .DMA_MemoryInc 参数选择 DMA_MemoryInc_Enable 使能存储器地址自动递增功能 DMA_MemoryInc _Disable 失能存储器地址自动递增功能
8、 其增加量由DMA_MemoryDataSize;决定; 外设数据宽度 DMA_InitStructure.DMA_PeripheralDataSize 参数选择 DMA_PeripheralDataSize_Byte 字节单位=8位 DMA_PeripheralDataSize_HalfWord 半字单位=16位 DMA_PeripheralDataSize_Word 字单位=32位 存储器数据宽度 DMA_InitStructure.DMA_MemoryDataSiz
9、e 参数选择 DMA_MemoryDataSize_Byte 字节单位=8位 DMA_MemoryDataSize_HalfWord 半字单位=16位 DMA_MemoryDataSize_Word 字单位=32位 直接模式条件下外设和储存器数据宽度大小一样,DMA_PeripheralDataSize 和DMA_MemoryDataSize不被使用 DMA传送模式选择 DMA_InitStructure .DMA_Mode 参数选择 DMA_Mode_Normal 一次传输模式 DMA_Mod
10、e_Circular 循环传输模式 软件设置数据流的优先级 DMA_InitStructure .DMA_Priority 数据选择 DMA_Priority_Low 对应定义的数据流为低优先级 DMA_Priority_Medium 对应定义的数据流为中优先级 DMA_Priority_High 对应定义的数据流为高优先级 DMA_Priority_VeryHigh 对应定义的数据流为非常高优先级 FIFO模式 DMA_InitStructure .DMA_FIFOMode; 参数选择 D
11、MA_FIFOMode_Disable FIFO模式使能 DMA_FIFOMode_Enable FIFO模式失能 1).FIFO使能 FIFO模式 源数据 à 目标地址,在FIFO临时存放数据 例如:源地址和目标地址数据宽度不同 源地址输出字节数据,目标地址输出字数据,实际传输把4个8位数据拼凑成一个32位字数据输出 2).FIFO失能 直接模式 默认情况下,DMA工作在直接模式 在每次外设请时都立刻启动对存储器传输的单次传输,要求源地址的数据宽度等于目标地址的数据宽度 3).双缓冲模式 DMA_SxCR的寄存器DBM位为1就可以启用双缓冲模式,并自动激
12、活循环模式 两个存储器的地址指针都有效,DMA控制器会自动切换两个存储区的的数据储存 FIFO阈值选择 DMA_InitStructure .DMA_FIFOThreshold 参数选择 DMA_FIFOThreshold_1QuarterFull FIFO容量的1/4 DMA_FIFOThreshold_HalfFull FIFO容量的1/2 DMA_FIFOThreshold_3QuartersFull FIFO容量的3/4 DMA_FIFOThreshold_Full FIFO容量的满
13、 存储器突发模式选择 DMA_InitStructure .DMA_MemoryBurst 参数选择 DMA_MemoryBurst_Single 单次模式 DMA_MemoryBurst_INC4 4节拍的增量突发模式 DMA_MemoryBurst_INC8 8节拍的增量突发模式 DMA_MemoryBurst_INC16 16节拍的增量突发模式 外设突发模式选择 DMA_InitStructure .DMA_PeripheralBurst 参数选择 DMA_PeripheralBurst_Single
14、 单次模式 DMA_PeripheralBurst_INC4 4节拍的增量突发模式 DMA_PeripheralBurst_INC8 8节拍的增量突发模式 DMA_PeripheralBurst_INC16 16节拍的增量突发模式 1).单次传输 外设 每次DMA请求就传输一次DMA_PeripheralDataSize数据 存储器 每次DMA请求就传输一次DMA_PeripheralDataSize数据 2).突发传输 外设 每次DMA请求就传输DMA_MemoryBurst(4/8/16
15、个DMA_PeripheralDataSize(字节/半字/字)数据 存储器 每次DMA请求就传输DMA_MemoryBurst(4/8/16)个DMA_PeripheralDataSize(字节/半字/字)数据 突发传输是结合FIFO使用的,要求FIFO阈值一定是内存突发传输数据流(节拍*数据宽度)的整数倍 FIFO(共4级32位) 完成DMA数据流参数配置 DMA_Init(DMA2_STREAM0,&DMA_InitStructure) 参数选择 DMA1_Stream0 DMA1的通道0 DMA1_Stream1 DMA1的通道1 DMA1
16、Stream2 DMA1的通道2 DMA1_Stream3 DMA1的通道3 DMA1_Stream4 DMA1的通道4 DMA1_Stream5 DMA1的通道5 DMA1_Stream6 DMA1的通道6 DMA1_Stream7 DMA1的通道7 DMA2_Stream0 DMA2的通道0 DMA2_Stream1 DMA2的通道1 DMA2_Stream2 DMA2的通道2 DMA2_Stream3 DMA2的通道3 DMA2_Stream4 DMA2的通道4 DMA2_Stream5 DMA2的通道5 DMA2_Stream6 DMA2的通道6 DMA2_Stream7 DMA2的通道7 结合DMA_Init和DMA_InitStructure .DMA_Channel函数可以对外设请求进行通道和数据流进行选择






