新手入门
- 积分
- 14
- 金钱
- 14
- 注册时间
- 2020-11-27
- 在线时间
- 4 小时
|
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(<DC_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); //清屏
}
|
|