开启DMA循环传输导致OLCD不能显示

2019-07-21 06:02发布

请问各位有没有遇到这样的问题:开启DMA循环传输,OLCD不能正常显示
一关闭循环传输,OLCD正常
DMA1_Channel1 -> CCR |= 0<<5;   // 循环传输

[mw_shl_code=c,true]void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
        /*
        DMA_CHx->CCR &= ~(1<<0);//DMA_DeInit
        DMA_CHx->CCR = 0;
        DMA_CHx->CNDTR = 0;
        DMA_CHx->CPAR =0;
        DMA_CHx->CMAR = 0;
        DMA1->IFCR &= ~(1<<0);
       
        RCC->AHBENR|=1<<0;                        //开启DMA1时钟
        delay_ms(5);                                //等待DMA时钟稳定
        DMA_CHx->CPAR=cpar;                  //DMA1 外设地址
        DMA_CHx->CMAR=(u32)cmar;         //DMA1,存储器地址
        DMA1_MEM_LEN=cndtr;              //保存DMA传输数据量
        DMA_CHx->CNDTR=4*cndtr;            //DMA1,传输数据量
        DMA_CHx->CCR=0X000025A1;        //复位
        //DMA_CHx->CCR&=0<<4;                  //从外设读
        //DMA_CHx->CCR|=1<<5;                  //循环模式
        //DMA_CHx->CCR&=0<<6;                 //外设地址非增量模式
        //DMA_CHx->CCR|=1<<7;                  //存储器增量模式
        //DMA_CHx->CCR|=1<<8;                  //外设数据宽度为16位
        //DMA_CHx->CCR|=1<<10;                 //存储器数据宽度16位
        //DMA_CHx->CCR|=2<<12;                 //中等优先级
        //DMA_CHx->CCR&=0<<14;                 //非存储器到存储器模式                 
        //DMA1_Channel1->CCR|=1<<0;          //开启DMA传输*/
         /*DMA配置*/
         RCC -> AHBENR |= 1<<0;      // 开启DMA1时钟
         delay_ms(5);                // 等待DMA时钟稳定
         DMA1_Channel1 -> CPAR = cpar;  // DMA1外设地址
         DMA1_Channel1 -> CMAR = cmar; // 存储器地址
         DMA1_Channel1 -> CNDTR = 4*cndtr; // 保存DMA数据传输量
         DMA1_Channel1 -> CCR = 0x00000000;       // 复位
         DMA1_Channel1 -> CCR |= 0<<4;   // 从外设读
         DMA1_Channel1 -> CCR |= 0<<5;   // 循环传输///////////////////////////////
         DMA1_Channel1 -> CCR |= 0<<6;   // 外设地址固定
         DMA1_Channel1 -> CCR |= 1<<7;   // 存储器地址增加
         DMA1_Channel1 -> CCR |= 1<<8;   // 外设数据宽度16位
         DMA1_Channel1 -> CCR |= 1<<10;  // 存储器数据宽度为16位
         DMA1_Channel1 -> CCR |= 2<<12;  // 高优先级
     DMA1_Channel1 -> CCR |= 0<<14;  // 非 存储器到存储器 模式
     DMA1 -> IFCR &= ~(1<<0);        // 清除通道1全局中断标志
     DMA1_Channel1 -> CCR &= ~(1<<3);// 禁止传输错误中断
     DMA1_Channel1 -> CCR &= ~(1<<2);// 禁止半传输中断
     DMA1_Channel1 -> CCR |= 1<<1;   // 允许传输完成中断         
         DMA1_Channel1 -> CCR |= 1<<0;   // 开启DMA传输
     //MY_NVIC_Init(1,2,DMA1_Channel1_IRQn,2); // 配置DMA1通道1中断 抢占1  响应2  组2       
} [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。