遇到一个大的问题,我原本想要将DCMI接口获得的数据用DMA直接存入到外部SRAM中去,配置如下:
RCC->AHB1ENR|=1<<22; //DMA2时钟使能
while(DMA2_Stream1->CR&0X01);//等待DMA2_Stream1可配置
DMA2->LIFCR|=0X3D<<6*1; //清空通道1上所有中断标志
DMA2_Stream1->FCR=0X0000021;//设置为默认值
DMA2_Stream1->AR=(u32)&DCMI->DR; //外设地址为CMI->DR
DMA2_Stream1->M0AR=(u32)pptr;//u32 *pptr;pptr=(u32*)0x68000000;
DMA2_Stream1->NDTR=1; //传输长度为1
DMA2_Stream1->CR=0; //先全部复位CR寄存器值
DMA2_Stream1->CR|=0<<6; //外设到存储器模式
DMA2_Stream1->CR|=1<<8; //循环模式
DMA2_Stream1->CR|=0<<9; //外设非增量模式
DMA2_Stream1->CR|=1<<10; //存储器增量模式
DMA2_Stream1->CR|=2<<11; //外设数据长度:32位
DMA2_Stream1->CR|=2<<13; //存储器数据长度:32位
DMA2_Stream1->CR|=2<<16; //高优先级
DMA2_Stream1->CR|=0<<21; //外设突发单次传输
DMA2_Stream1->CR|=0<<23; //存储器突发单次传输
DMA2_Stream1->CR|=1<<25; //通道1 DCMI通道
DMA2_Stream1->FCR|=1<<2; //FIFO模式
DMA2_Stream1->FCR|=3<<0; //是用全FIFO
这是在别的帖子里复制的,正和我意(原以为)。却发现啥也没有做啊DMA,
于是我改成了
/* 配置 DMA Stream */
DMA_InitStructure.DMA_Channel = DMA_Channel_1; //通道选择
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&DCMI->DR;//DMA外设地址
DMA_InitStructure.DMA_Memory0BaseAddr = (u32)pptr;//DMA 存储器0地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//存储器到外设模式
DMA_InitStructure.DMA_BufferSize = 60000;//数据传输量
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设非增量模式
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//存储器增量模式
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;//外设数据长度:32位
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Word;//存储器数据长度:32位
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// 使用普通模式
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//中等优先级
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//存储器突发单次传输
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//外设突发单次传输
DMA_Init(DMA_Streamx, &DMA_InitStructure);//初始化DMA Stream
这下可以存了,但最多能存65535个数据,可以DCMI 一帧就得30万的数据啊,我又不能全部丢掉,怎么办啊!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
使用循环模式,是循环的覆盖我原先存的数据,地址超过了就从头开始的。
一周热门 更多>