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

STM32F7 DMA2D M2M

[复制链接]
edveve 提问时间:2018-11-29 14:05 /
使用dma2d传输一张图片到帧缓冲里,当图片分辨率与帧分辨率相同时图片可以正常显示,图片分辨率小于帧缓冲分辨率时显示不正常。

根据LCD显示效果似乎图片宽度被拉长到了帧缓存的宽度,查看dma2d初始化参数觉得可能是Dma2dHandle.Init.OutputOffset的参数设置问题。
以下是f746G disc的例程中初始化代码:

例程中采用的模式是DMA2D_M2M_BLEND,相比m2m增加图层混合功能。
其中
LCD_X_SIZE =480,是帧缓存的宽度;
x_size =x_size_orig ,图片宽度,

  Dma2dHandle.Init.Mode         = DMA2D_M2M_BLEND; /* DMA2D mode Memory to Memory with Pixel Format Conversion */
  Dma2dHandle.Init.ColorMode    = DMA2D_RGB565; /* DMA2D Output color mode is RGB565 (16 bpp) */
  Dma2dHandle.Init.OutputOffset = (LCD_X_SIZE - x_size) ; /* No offset in output */   

  /* DMA2D Callbacks Configuration */
  Dma2dHandle.XferCpltCallback  = TransferComplete;
  Dma2dHandle.XferErrorCallback = TransferError;

  /* Foreground layer Configuration : layer 1 */
  Dma2dHandle.LayerCfg[1].AlphaMode = DMA2D_COMBINE_ALPHA;
  Dma2dHandle.LayerCfg[1].InputAlpha = alpha; /* Alpha fully opaque */
  Dma2dHandle.LayerCfg[1].InputColorMode = ColorMode; /* Layer 1 input format */
  Dma2dHandle.LayerCfg[1].InputOffset = x_size_orig - x_size ; /* No offset in input */

   /* Background layer Configuration */
  Dma2dHandle.LayerCfg[0].AlphaMode = DMA2D_REPLACE_ALPHA;
  Dma2dHandle.LayerCfg[0].InputAlpha = 0xFF; /* 127 : semi-transparent */
  Dma2dHandle.LayerCfg[0].InputColorMode = CM_RGB565;
  Dma2dHandle.LayerCfg[0].InputOffset = (LCD_X_SIZE - x_size) ; /* No offset in input */


LayerCfg[0]代表背景层,背景层宽度为帧缓存宽度,相比与与之混合的图片宽度x_size而言需要设置InputOffset = (LCD_X_SIZE - x_size)以便匹配帧缓存。
LayerCfg[1]代表前景层,这层就是输入的图片,该层输入的数据与传入图片宽度一致,所以offset设置为0。

OutputOffset 是输出设置,输出宽度同样为帧缓存宽度,也需要设置OutputOffset = (LCD_X_SIZE - x_size)来匹配宽度。



综合以上,还都是我的猜测,需要实验验证。

收藏 评论0 发布时间:2018-11-29 14:05

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版