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

请教下 ,使用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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版