DMA配置:
void DMA1Config(void)
{
//配置ADC->Memory
DMA_InitTypeDef DMA1_InitStructure;
//使能时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
DMA1_InitStructure.DMA_BufferSize = 1;//
DMA1_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA1_InitStructure.DMA_M2M = DMA_M2M_Disable;//diasble
DMA1_InitStructure.DMA_MemoryBaseAddr = (u32)&SendBuff;
DMA1_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA1_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;//disable
DMA1_InitStructure.DMA_Mode = DMA_Mode_Circular;//
DMA1_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;
DMA1_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA1_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//DIsABLE
DMA1_InitStructure.DMA_Priority = DMA_Priority_High;//high
DMA_Init(DMA1_Channel1,&DMA1_InitStructure);
DMA_Cmd(DMA1_Channel1,ENABLE);
}
1):DMA_BufferSize :保存了DMA要传输的数据大小,其单位是DMA_MemoryDataSize 或者DMA_PeripheralDataSize 。
2):DMA_DIR :DMA数据传输方向,可以选择外设到内存还是内存到外设,例如3):DMA_DIR_PeripheralSRC(内存作为目标地址),DMA_DIR_PeripheralDST(外设作为目标地址)
4):DMA_M2M :是否开启内存到内存的传输
5):DMA_MemoryBaseAddr :内存基地址,可以作为传输源或者目标地址
6):DMA_MemoryDataSize :内存的数据单元大小,可以为字节、半字节、字或者。假设前面DMA_BufferSize 为100,DMA_MemoryDataSize 为字节,那么总共传输的是100字节
7):DMA_Mode:循环模式(DMA_Mode_Circular)和正常模式(DMA_Mode_Normal只传输一次就停止)
8):DMA_PeripheralBaseAddr :外设基地址,作为传输源或者目标地址
9):DMA_Priority :DMA的优先级,只是用一个DMA时候,配备为任何优先级是没有区别的。
10)DMA_MemoryInc 或者DMA_PeripheralInc :分别为是否开启内存自增、外设自增
初始化通道: