高中生
最后登录1970-1-1
在线时间 小时
注册时间2021-3-27
|
楼主在尝试用DMA来将ADC的数据搬运至外部SRAM,在使能DMA的存储地址递增功能后,发现只能在存储器基地址处更新,也就是说之前设置的DMA存储器地址指针递增功能没有起作用,在网上找了别人的代码对比,也没有发现什么不一样,想请教一下各位,楼主的DMA配置是否有问题:搬运ADC1的数据(DMA2的 channel0 stream0)到设定的数组(数组地址传入dma初始化函数)
- void dma_init(uint32_t ADCvalue_addr){
- //使能DMA总线时钟
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
- //channel0 stream0
- DMA_DeInit(DMA2_Stream0); //先失能。将DMA所有寄存器复位为未修改状态
- while(DMA_GetCmdStatus(DMA2_Stream0) != DISABLE){ //确保DMA数据流复位完成
- }
-
- DMA_InitTypeDef DMA_InitStructure;
- DMA_InitStructure.DMA_Channel = DMA_Channel_0;
- DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_ADDRESS;
- DMA_InitStructure.DMA_Memory0BaseAddr = ADCvalue_addr; //ADCvalue_addr为数组名
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
- DMA_InitStructure.DMA_BufferSize = 3;
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //ADC读取数据仅在DR处产生
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
- DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //仿照例子用循环模式,传输完数据后,重新将BufferSize填满
- DMA_InitStructure.DMA_Priority = DMA_Priority_High;
- DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
- DMA_Init(DMA2_Stream0, &DMA_InitStructure);
- DMA_Cmd(DMA2_Stream0, ENABLE);
- }
复制代码
|
-
仅在数组第一位更新
|