void DMA1_Channel2_init(void{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//开启时钟
DMA_DeInit(DMA1_Channel2); //初始化
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC_DR_Address; //外设数据地址
DMA_InitStructure.DMA_MemoryBaseAddr =(uint32_t)&ADCConvertedValue; //内存数据地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //外设是数据传输的目的地还是数据源
DMA_InitStructure.DMA_BufferSize = 1;//要传输的数据量
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //接收一次数据后,设备地址禁止后移
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;//关闭接收一次数据后,目标内存地址后移
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //定义外设数据宽度为16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//内存数据宽度(根据数据选择)
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循环缓存模式,数据传输数目为0时,自动恢复配置初值
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; //优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//通道未被设置成内存到内存模式,与循环模式相对
DMA_Init(DMA1_Channel2, &DMA_InitStructure);
DMA_Cmd(DMA1_Channel2, ENABLE);
}
DMA通道二配置如上代码所示,但是无法工作(需要的数据总是为零),如果把代码里面的channel2改为channel1就能工作了! 真搞不懂是为什么?
|