你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教下 ,使用dma2d的透明功能改如何设置 ?

[复制链接]
hpdell 提问时间:2018-1-14 17:02 /
请教下 ,使用dma2d的透明功能改如何设置 ?

配置函数如下

static void BMP_DMA2D_ConverBuffer(uint32_t *pSrc, uint32_t *pDst,
                                    uint16_t _usX, uint16_t _usY,
                                    uint16_t _usWidth, uint16_t _usHeight,
                                    uint32_t InputColorMode, uint32_t OutputColorMode)
{  
  
  uint32_t source ;
  uint32_t destination = 0;
  
    uint16_t  OutputOffset = 0;     // 行偏移
    uint16_t  NumberOfLine = 0;     // 行数,表示我们显示的数据需要的行数
    uint16_t  PixelPerLine = 0;        // 每行像素数, 每行需要显示多少个像素点   
  
  __IO uint32_t  XaddrPutPixel = 0;
  source      = (uint32_t)pSrc;
  destination = (uint32_t)pDst;

  XaddrPutPixel = (BYTES_PER_PIXEL * (uint32_t)((_usY * LCD_PIXEL_WIDTH) + (_usX)));
  OutputOffset =  LCD_PIXEL_WIDTH - _usWidth;
  NumberOfLine =  _usHeight ;
  PixelPerLine =  _usWidth  ;  
  
  __HAL_RCC_DMA2D_FORCE_RESET();             // 强制复位
  __HAL_RCC_DMA2D_RELEASE_RESET();           // 释放复位
  
  DMA2D->CR     &= ~DMA2D_CR_START;    // 停止dma2d
  
  DMA2D_Handle.Init.Mode          = DMA2D_M2M_PFC;  
  DMA2D_Handle.Init.OutputOffset  = OutputOffset;         //OutputOffset;
  DMA2D_Handle.Init.AlphaInverted = DMA2D_REGULAR_ALPHA;  // No Output Alpha Inversion
  DMA2D_Handle.LayerCfg[1].AlphaMode = DMA2D_REPLACE_ALPHA;
  DMA2D_Handle.LayerCfg[1].InputAlpha = 0xFF;   
   
  DMA2D_Handle.Init.RedBlueSwap   = DMA2D_RB_REGULAR;
  
  DMA2D_Handle.XferCpltCallback  = NULL;
  
  DMA2D_Handle.LayerCfg[1].InputColorMode = InputColorMode;   // 输入颜色模式
  DMA2D_Handle.Init.ColorMode             = OutputColorMode;  // 输出颜色模式

  DMA2D_Handle.LayerCfg[1].InputOffset = 0;
  DMA2D_Handle.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR; /* No ForeGround Red a Blue swap */  
  DMA2D_Handle.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA; /* No ForeGround Alpha inversion */
  DMA2D_Handle.Instance          = DMA2D;
   
  if(HAL_DMA2D_Init(&DMA2D_Handle) == HAL_OK)
  {
    if(HAL_DMA2D_ConfigLayer(&DMA2D_Handle, 1) == HAL_OK)
    {
      uint32_t timeout = 0;

          if (HAL_DMA2D_Start(&DMA2D_Handle, source, destination + XaddrPutPixel, PixelPerLine, NumberOfLine ) == HAL_OK)
          {
            while((DMA2D->ISR & (DMA2D_FLAG_TC)) == 0)      //等待传输完成
            {
              timeout++;
              if(timeout > 0X1FFFFF) break;          //超时退出
            }  

            __HAL_DMA2D_CLEAR_FLAG(&DMA2D_Handle, DMA2D_FLAG_TC | DMA2D_FLAG_CTC);
            DMA2D_Handle.State = HAL_DMA2D_STATE_READY;   
            __HAL_UNLOCK(&DMA2D_Handle);                     
            
          }
    }
  }
}


收藏 1 评论3 发布时间:2018-1-14 17:02

举报

3个回答
butterflyspring 回答时间:2018-3-8 17:05:43
我看你已经把alpha功能已经打开了,你只要设置一下具体的alpha值就好了.
DMA2D_Handle.LayerCfg[1].InputAlpha = 0xFF;     -->这是完全不透明呀..

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

hpdell 回答时间:2018-3-9 15:44:08
butterflyspring 发表于 2018-3-8 17:05
我看你已经把alpha功能已经打开了,你只要设置一下具体的alpha值就好了.
DMA2D_Handle.LayerCfg[1].InputAlp ...

ok,我试试看

点评

等楼主分享结果了  发表于 2018-3-12 09:30

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版