OpenEdv-开源电子网

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

RGB屏显示图片或文字时,图片或文字的最右侧会出现一条竖线

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-11-27
在线时间
4 小时
发表于 2021-1-21 12:00:40 | 显示全部楼层 |阅读模式
4金钱
       硬件:采用正点原子的7寸800*480尺寸RGB屏,MCU为STM32F429IGT6,像素为RGB888格式,硬件连线为全连线。
       软件运行:RGB屏点亮正常,图片为采用image2lcd转化为.c文件后,放在内部FLASH;LTDC初始化、画点等代码采用原子哥的硬件阿波罗板HAL库函数版实验14LTDC LCD(RGB)屏代码。
       现象:1、采用原子哥的LTDC代码时,字符显示,显示的字符串最后纵向像素会有一条其他颜色的竖线
                 2、自己编制UI界面,放置圆形状态小图标后(图标像素为32*32),图标的最右侧会有一条竖线,图标的数组经过检查正常,竖线非图标自带。通过在图标最右侧画相同颜色的背景,竖线会根据划线的位置向右移动。即RGB屏的这条竖线,会出现在画点的图或线的右侧。
       如下图,绿色圆形图标为在右侧进行32像素的垂直线画线,则竖线会随着划线函数(背景色)数量向右侧移动,而紫色和红色图标没有进行垂直线画线,所以右侧黄色竖线就在图标右侧。
       向各位大佬请教这个问题的原因!谢谢各位老师!

图标右侧有黄色竖线

图标右侧有黄色竖线

      LTDC初始化代码(图片显示代码为借用之前论坛一位前辈所发的)
      void LTDC_Init(void)
{
        u16 lcdid = 0;
        lcdid = LTDC_PanelID_Read();                                                                     //读面板ID
        if(lcdid == 0x7084)
          {
                         LTDCDEV.pwidth = 800;                                                               //面板宽度,单位:像素
                         LTDCDEV.pheight = 480;                                                              //面板高度,单位:像素
                         LTDCDEV.hsw = 1;                                                                            //水平同步宽度
                         LTDCDEV.vsw = 1;                                                                            //垂直同步宽度
                         LTDCDEV.hbp = 46;                                                                   //水平后廊
                         LTDCDEV.vbp = 23;                                                                           //垂直后廊
                         LTDCDEV.hfp = 210;                                                                  //水平前廊
                         LTDCDEV.vfp = 22;                                                                           //垂直前廊
                         LTDC_Clk_Set(396,3,RCC_PLLSAIDIVR_4);                                       //设置像素时钟 33M(如果开双层,需要降低DCLK到18.75MHz 300/4/4,才会比较好)
                }
        LCDDEV.width = LTDCDEV.pwidth;
        LCDDEV.height = LTDCDEV.pheight;
        LTDC_FrameBuf[0]=(u32*)&LCD_FrameBuf;                                                  //将LTDC第一层的帧缓存,指向了LTDC_FrameBuf数组,往LCD_FrameBuf里面写入不同的数据,就可以修改RGBLCD上面显示的内容
        LTDCDEV.pixsize=3;                                                                                         //每个像素占4个字节       
        //LTDC配置
        LTDC_Handler.Instance=LTDC;
        LTDC_Handler.Init.HSPolarity=LTDC_HSPOLARITY_AL;                                         //水平同步极性
        LTDC_Handler.Init.VSPolarity=LTDC_VSPOLARITY_AL;                                         //垂直同步极性
        LTDC_Handler.Init.DEPolarity=LTDC_DEPOLARITY_AL;                                         //数据使能极性
        LTDC_Handler.Init.PCPolarity=LTDC_PCPOLARITY_IPC;                                        //像素时钟极性
        LTDC_Handler.Init.HorizontalSync=LTDCDEV.hsw-1;                                          //水平同步宽度
        LTDC_Handler.Init.VerticalSync=LTDCDEV.vsw-1;                                            //垂直同步宽度
        LTDC_Handler.Init.AccumulatedHBP=LTDCDEV.hsw+LTDCDEV.hbp-1;                 //水平同步后沿宽度
        LTDC_Handler.Init.AccumulatedVBP=LTDCDEV.vsw+LTDCDEV.vbp-1;                 //垂直同步后沿高度
        LTDC_Handler.Init.AccumulatedActiveW=LTDCDEV.hsw+LTDCDEV.hbp+LTDCDEV.pwidth-1;                         //有效宽度
        LTDC_Handler.Init.AccumulatedActiveH=LTDCDEV.vsw+LTDCDEV.vbp+LTDCDEV.pheight-1;                         //有效高度
        LTDC_Handler.Init.TotalWidth=LTDCDEV.hsw+LTDCDEV.hbp+LTDCDEV.pwidth+LTDCDEV.hfp-1;               //总宽度
        LTDC_Handler.Init.TotalHeigh=LTDCDEV.vsw+LTDCDEV.vbp+LTDCDEV.pheight+LTDCDEV.vfp-1;              //总高度
        LTDC_Handler.Init.Backcolor.Red=0;                                                                                                            //屏幕背景层红色部分
        LTDC_Handler.Init.Backcolor.Green=0;                                                                                                  //屏幕背景层绿色部分
        LTDC_Handler.Init.Backcolor.Blue=0;                                                                                                           //屏幕背景色蓝色部分
        HAL_LTDC_Init(&LTDC_Handler);
        //层配置
        LTDC_Layer_Parameter_Config(0,(u32)LTDC_FrameBuf[0],LCD_PIXFORMAT,255,0,6,7,0X000000);             //层参数配置
        LTDC_Layer_Window_Config(0,0,0,LTDCDEV.pwidth,LTDCDEV.pheight);        //层窗口配置,以LCD面板坐标系为基准,不要随便修改!
       
        LTDC_Display_Dir(1);                                                                                                                                //默认横屏
        LTDC_Select_Layer(0);                                                                                                                         //选择第1层
        LCD_LED=1;                                                                                                                                         //点亮背光
        LTDC_Clear(CYAN);                                                                                                                                //清屏
}

最佳答案

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

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-11-27
在线时间
4 小时
 楼主| 发表于 2021-1-21 12:00:41 | 显示全部楼层
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2021-1-22 23:30:46 | 显示全部楼层
应该是画点函数的坐标问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 10:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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