#include "stm32f10x.h" // Device header
uint8_t MyDMA_Size;
void MyDMA_Init(uint32_t AddrA,uint32_t AddrB, uint8_t size)
{
MyDMA_Size=size;
//DMA在AHB时钟上
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
DMA_InitTypeDef DMA_InitStruct;
DMA_InitStruct.DMA_PeripheralBaseAddr=AddrA ;//外设站点基地址
DMA_InitStruct.DMA_PeripheralDataSize= DMA_PeripheralDataSize_Byte; //数据宽度
DMA_InitStruct.DMA_PeripheralInc= DMA_PeripheralInc_Enable; //地址是否自增
DMA_InitStruct.DMA_MemoryBaseAddr=AddrB ;
DMA_InitStruct.DMA_MemoryDataSize= DMA_MemoryDataSize_Byte;
DMA_InitStruct.DMA_MemoryInc= DMA_MemoryInc_Enable;
//传输计数器是否要重装
DMA_InitStruct.DMA_Mode= DMA_Mode_Normal;
//传输计数器
DMA_InitStruct.DMA_BufferSize= size;
//设置外设为源头方向
DMA_InitStruct.DMA_DIR= DMA_DIR_PeripheralSRC;
//enable是软件触发,相反硬件触发
DMA_InitStruct.DMA_M2M=DMA_M2M_Enable ;
//优先级
DMA_InitStruct.DMA_Priority= DMA_Priority_Medium;
DMA_Init(DMA1_Channel1,&DMA_InitStruct);
DMA_Cmd(DMA1_Channel1,DISABLE);
}
void MyDMA_Transfer(void)
{
DMA_Cmd(DMA1_Channel1,DISABLE);
//重新给计数值,前提要先失能DMA;
DMA_SetCurrDataCounter(DMA1_Channel1,MyDMA_Size);
DMA_Cmd(DMA1_Channel1,ENABLE);
while(DMA_GetFlagStatus(DMA1_FLAG_TC1)==RESET);
DMA_ClearFlag(DMA1_FLAG_TC1);
}