STM32F429-DISCO 学习LTDC的双层显示

/ 0评 / 2

对于这个F429啊,真是神奇,就显示,还搞两个分层,不知道干什么,反正SDRAM还是得读写,好像不但没增加什么东西,反正加重了带宽负载,要是我就直接显示单层了,但是既然有这个功能,我们还是发挥一下这个多层显示的能力吧.我们可以用LTDC_Display_2Layers.有两个头文件,分别定义不同的内容,有两个变量ST_LOGO_1和ST_LOGO_2.分别在不同的Layer上.
在初始化时候,有公共参数,是初始化背景的,背景不需要缓冲,因为都是一个颜色.

  /* Configure R,G,B component values for LCD background color */
  LTDC_InitStruct.LTDC_BackgroundRedValue = 0;
  LTDC_InitStruct.LTDC_BackgroundGreenValue = 0;
  LTDC_InitStruct.LTDC_BackgroundBlueValue = 0;
  LTDC_Init(&LTDC_InitStruct);

另外每层显示的图像,大小都是19200个uint32_t,也就是38400个点,也就是传说中的240*160,另外一个也是240*160,所以组合起来,就刚好是一个LCD界面.设置LTDC_CFBLineNumber为160,就是完全显示,设置80,他就只刷到80行,但是刷列就不一样了.受LTDC_CFBPitch和LTDC_CFBLineLength的影响.先测试一下,比如我把LTDC_BackgroundRedValue修改成200,那么就应该背景变红.
QQ截图20151112202036
这时候Layer2也是覆盖到Layer1上.如果我把Layer1的LTDC_CFBLineNumber的160,改成80,就会显示只有部分,不见了一半.
QQ截图20151112202036
如果要把屏幕显示的240全范围改成120,有多种办法,一种是改LTDC_CFBLineLength,使得缓冲中只刷前面120位,但是后面120位虽然读取,但是不刷.方法二是改小缓冲区,但是无论哪个修改,都要修改LTDC_HorizontalStop,比如如下是修改过的代码:

  LTDC_Layer_InitStruct.LTDC_HorizontalStop = (120 + 30 - 1);
  LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((120 * 2) + 3);

那么显示效果就变成这样了.
QQ截图20151112202036
另外这货支持透明度设置,比如我把Layer 1透明度设置到150,Layer 2是100,这个应该可以做出一些毛玻璃效果?透明度通过改变LTDC_ConstantAlpha来改变,最大是255.
QQ截图20151112202036
剩下参数是他们两个图层的合并方式LTDC_BlendingFactor1_CA或者LTDC_BlendingFactor2_PAxCA,另外图片的滚动,全靠主程序调用LTDC_LayerPosition实现,这个并没难度,一看就明白.对于LCD的双层,也就解释到这儿,总结起来就是Layer 2覆盖Layer 1,然后Layer 1可以做背景,如任务栏,而Layer 2可以做窗体.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注