硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1102|回复: 6
收起左侧

[LVGL] lvgl 显示异常

[复制链接]
回帖奖励 12 个金币 回复本帖可获得 3 个金币奖励! 每人限 1 次

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2024-6-2 18:03:28 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
static void drag_event_handler(lv_event_t * e)
{

    lv_obj_t * obj = lv_event_get_target(e);

    lv_indev_t * indev = lv_indev_get_act();
    if(indev == NULL)  return;

    lv_point_t vect;
    lv_indev_get_vect(indev, &vect);

    lv_coord_t x = lv_obj_get_x(obj) + vect.x;
    lv_coord_t y = lv_obj_get_y(obj) + vect.y;
    lv_obj_set_pos(obj, x, y);
}

/**
 * Make an object dragable.
 */
void lv_example_obj_2(void)
{
    lv_obj_t * obj;
		obj = lv_obj_create(lv_scr_act());
		lv_obj_set_size(obj, 100, 100);
		//lv_obj_add_event_cb(obj, drag_event_handler, LV_EVENT_PRESSING, NULL);
		
		lv_obj_t * label = lv_label_create(obj);
		lv_label_set_text(label, "Drag me");
		lv_obj_center(label);

}

问题:

在stm32f429使用lvgl,显示是通过ltdc+dma2d中断完成的。
上面的代码是显示例程。在lv_conf文件中如果LV_USE_PERF_MONITOR的值为0.则会出现图1的情况,如果LV_USE_PERF_MONITOR的值为1.则会出现图2的情况。

附加信息:
1:如果lv_obj_add_event_cb(obj, drag_event_handler, LV_EVENT_PRESSING, NULL);这一句在如果例程没有注释掉,在显示屏触摸该控件后,也会在屏幕上产生像图2一样类似的纹路(获取触摸点坐标和是否按下的程序在单独测试下没有问题)

2:在运行lv_example_obj_2后再运行LcdApp_CrePag()的结果如图3,正常显示,二者函数都在while(1)前创建。
运行代码如下:
[C] 纯文本查看 复制代码
	//lv_example_keyboard_1();
	 lv_example_obj_2();
	LcdApp_CrePag();
	

	
	while(1)
	{
		if ((TimerFlag % 30) == 0)
		{
			
			Gt5688_TapProcess(); //5ms左右处理一次
			lv_timer_handler();//必须在5ms左右轮询一次,好像没有啥刷新会一直卡在里面?
		}
	}




图1

图1

图2

图2

图3

图3
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2024-6-2 19:15:11 | 显示全部楼层
补充一下,显示的的方法是,ltdc显示的区域在fmc的sdram里,lvgl的显存在sram里面,dma2d把数据传递到ltdc所在的sdram里面。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115459
QQ
发表于 2024-6-4 10:11:09 | 显示全部楼层

回帖奖励 +3 个金币

有完整点的应用测试代码吗,有时间我试试。
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2024-6-7 13:49:05 | 显示全部楼层
你好,抱歉,是我自己的问题。是给DMA2D OOR寄存器赋的值相比与实际值乘了2导致的问题。

你好,我还有一个问题。stm32f429数据手册中关于DMA2D->OMAR寄存器有段描述:The address alignment must match the image format selected e.g. a 32-bit per pixel
format must be 32-bit aligned and a 16-bit per pixel format must be 16-bit aligned。即OMAR寄存器的值与RGB格式有关,如果是RGB565,那么OMAR的值应该是16位对齐,我使用lvgl中,OMAR寄存器的值可能不是16的倍数,再使能DMA以后,stm32产生了DMA2D configuration error。
我看了论坛里https://www.armbbs.cn/forum.php?mod=viewthread&tid=93536这一篇文章,以及网上相关DMA2D寄存器配置,都没有OMAR的值不是16倍数情况下的异常处理,想问一下,是H7与f429在该寄存器上不同?还是中间有啥地方我没弄明白?

回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2024-6-22 21:23:38 | 显示全部楼层
做完了,来回答一下自己的问题。
是我理解+最后找不到问题硬找的问题,configuration error不是这个引起的,也不可能由DMA2D的OMAR寄存器引起。This bit is set when the START bit of DMA2D_CR, DMA2DFGPFCCR or
DMA2D_BGPFCCR is set and a wrong configuration has been programmed
这里应该是地址对齐,比如RGB565,这地址必须是16bit的倍数,即2字节,ARGB888必须是32bit的倍数,则必须是4字节对齐。
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-6-23 23:45:58 | 显示全部楼层

回帖奖励 +3 个金币

V9内部是888的格式,地址统一用4字节对齐比较好吧,省得麻烦
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-6-23 23:47:42 | 显示全部楼层
补充一下,即便你设置了565格式,但V9的内核还是统一按888处理,只是输出时按565
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-27 09:32 , Processed in 0.290872 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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