OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4419|回复: 2

使用rgb888格式,在清贫切换时,屏幕会有杂乱的条纹出现?

[复制链接]

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
发表于 2017-3-8 21:49:00 | 显示全部楼层 |阅读模式
2金钱
使用rgb888格式,在清贫切换时,屏幕会有杂乱的条纹出现?

但是使用 ARGB8888, RGB565的格式时貌似木有,是怎么个情况 ???

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-3-9 09:24:01 | 显示全部楼层
这个应该不会的啊,看看你的代码呢,DMA方式驱动应该清屏超快的
回复

使用道具 举报

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
 楼主| 发表于 2017-3-9 09:28:45 | 显示全部楼层
wmaxwell 发表于 2017-3-9 09:24
这个应该不会的啊,看看你的代码呢,DMA方式驱动应该清屏超快的

void BSP_LCD_Clear(uint32_t Color)
{

#if   0
  // Register to memory mode with ARGB8888 as color Mode  
  hdma2d_eval.Init.Mode         = DMA2D_R2M;
  hdma2d_eval.Init.ColorMode    = LTDC_USER_PIXFORMAT;
  hdma2d_eval.Init.OutputOffset = 0;      

  hdma2d_eval.Instance  = DMA2D;

  // DMA2D Initialization
  if(HAL_DMA2D_Init(&hdma2d_eval) == HAL_OK)
  {
    if(HAL_DMA2D_ConfigLayer(&hdma2d_eval, ActiveLayer) == HAL_OK)
    {
      if (HAL_DMA2D_Start(&hdma2d_eval, Color, (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize() , BSP_LCD_GetYSize() ) == HAL_OK)
      {
        // Polling For DMA transfer
        HAL_DMA2D_PollForTransfer(&hdma2d_eval, DMA2D_TIMEOUT);   // 超时时间需要设置大些,否则清贫时会返回超时错误
      }
    }
  }

#else
  u32 addr;
  u32 timeout = 0;


        addr=((u32)(hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + LTDC_PIX_SIZE * ((LCD_PIXEL_WIDTH ) * 0 + 0));
        RCC->AHB1ENR |= 1 << 23;                        //使能DM2D时钟
        DMA2D->CR     = 3 << 16;                                //寄存器到存储器模式
        DMA2D->OPFCCR = LTDC_USER_PIXFORMAT;        //设置颜色格式
        DMA2D->OOR    = 0;                                //设置行偏移
        DMA2D->CR    &= ~(1 << 0);                                //先停止DMA2D
        DMA2D->OMAR   = addr;                                //输出存储器地址
        DMA2D->NLR    = (1280) | ((800) << 16);        //设定行数寄存器
        DMA2D->OCOLR  = Color;                                //设定输出颜色寄存器
        DMA2D->CR    |= 1 << 0;                                //启动DMA2D
        while((DMA2D->ISR & (1 << 1)) == 0)        //等待传输完成
        {
                timeout++;
                if(timeout > 0X1FFFFF) break;        //超时退出
        }  
        DMA2D->IFCR |= 1 << 1;                                //清除传输完成标志  


#endif

}






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 22:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表