硬汉嵌入式论坛

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

[emWin] emwin移植到STM32H7开发板,屏用的AMOLED 0.95寸的,在窗口回调函数内调用GUI_Clear和GUI_SetBkColor不起作用

[复制链接]

16

主题

34

回帖

82

积分

初级会员

积分
82
发表于 2021-11-13 17:03:02 | 显示全部楼层 |阅读模式
现象就是,在main函数内调用GUI_SetBkColor还有GUI_Clear都能正常改变背景颜色,但是一加上一个窗口回调函数后,在回调函数里面调用这两个函数就没任何反应,而且GUI_DispStringAt函数也没法显示字,但是回调函数里面添加的画线函数GUI_DrawLine是能够正常使用的,想请教一下这个原因有可能是什么导致的。移植过程中,读点函数尚未实现,只是实现了打点函数和区域填充函数
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
发表于 2021-11-14 09:11:21 | 显示全部楼层
感觉是emWin底层接口的打点没有和这个没有匹配上。

你可以试试emWin接口函数那里指定位置打点是否正常。
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-15 09:43:26 | 显示全部楼层
eric2013 发表于 2021-11-14 09:11
感觉是emWin底层接口的打点没有和这个没有匹配上。

你可以试试emWin接口函数那里指定位置打点是否正常。

调用了打点函数,在屏上指定位置打点也都显示正常的,请问还有可能是什么原因
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-15 10:07:50 | 显示全部楼层
eric2013 发表于 2021-11-14 09:11
感觉是emWin底层接口的打点没有和这个没有匹配上。

你可以试试emWin接口函数那里指定位置打点是否正常。

在main'函数调用GUI_DispStringAt可以将字体显示出来,但也是有个问题就是显示出来的字与调用自己编写的字体显示函数写出来的字是关于x轴对称的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
发表于 2021-11-15 12:55:32 | 显示全部楼层
iuuiangela 发表于 2021-11-15 10:07
在main'函数调用GUI_DispStringAt可以将字体显示出来,但也是有个问题就是显示出来的字与调用自己编写的 ...

方便的话,上传下你的底层接口文件代码。
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-15 14:12:47 | 显示全部楼层
eric2013 发表于 2021-11-15 12:55
方便的话,上传下你的底层接口文件代码。

我调用的是oled.c这个文件里面的oled_drawpoint这个打点函数,麻烦硬汉哥帮我看一下哪出了问题,由于代码在内网,所以我简单描述了下这个文件的一些函数

oled.c

1.5 KB, 下载次数: 2

oled.c

回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-15 14:16:32 | 显示全部楼层
eric2013 发表于 2021-11-15 12:55
方便的话,上传下你的底层接口文件代码。

还有没有可能是GUI_DispStringAt这个函数调用的英文字库取模方式造成的,但是我看了下好像这个函数显示英文字体的时候没有调用外部字库,请问下,是这个函数本身就不需要字库的支撑就能显示英文字体了吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
发表于 2021-11-16 09:20:34 | 显示全部楼层
iuuiangela 发表于 2021-11-15 14:16
还有没有可能是GUI_DispStringAt这个函数调用的英文字库取模方式造成的,但是我看了下好像这个函数显示英 ...

不是这个,是emWin的接口文件,不行直接试试我这个吧
第一期:在OLED上面移植STemWin5.20
http://www.armbbs.cn/forum.php?m ... 1678&fromuid=58
(出处: 硬汉嵌入式论坛)





回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-16 09:58:35 | 显示全部楼层
eric2013 发表于 2021-11-16 09:20
不是这个,是emWin的接口文件,不行直接试试我这个吧
第一期:在OLED上面移植STemWin5.20
http://www.a ...

硬汉哥,之前字体显示的正常了,在main函数调用GUI_DispStringAt打印出来的内容正确了,但是就还是这个问题,进入窗口回调函数,执行WM_PAINT里面的内容就没效果,调试的时候也能进到里面的语句,也在while循环里面调用的GUI_Delay的,不知道这是啥原因
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-16 10:35:11 | 显示全部楼层
eric2013 发表于 2021-11-16 09:20
不是这个,是emWin的接口文件,不行直接试试我这个吧
第一期:在OLED上面移植STemWin5.20
http://www.a ...

我看了下您的教程,里面修改了GetDevData这里,提示根据自己屏的位数改,我用的屏是RGB888的,查看了一下emwin的手册,可用的颜色数是16777216,这样算下来就应该将GetDevData那里修改为24,但是GUI.h文件内的GUI_MEMDEV_DEVICE只有1、8、16、32四个选择,我如果用24的话是不是应该选32这个呢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
发表于 2021-11-17 07:45:47 | 显示全部楼层
iuuiangela 发表于 2021-11-16 10:35
我看了下您的教程,里面修改了GetDevData这里,提示根据自己屏的位数改,我用的屏是RGB888的,查看了一下 ...

对,你的显示屏是RGB888是一方面,关键还是你的底层驱动接口也是888的24位色配置吗
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-17 09:55:07 | 显示全部楼层
eric2013 发表于 2021-11-17 07:45
对,你的显示屏是RGB888是一方面,关键还是你的底层驱动接口也是888的24位色配置吗

硬汉哥,我昨天试了一下,如果按照我这个屏的RGB888来配置,颜色就只有黑白色,所以在底层驱动这里,我还是用的GUICC_M565,而且存储设备那四个选择都试过,感觉没区别,就继续采用GUI_MEMDEV_DEVICE_16,昨天看到有人把WM_SetcreateFlags(WM_CF_MEMDEV)这句屏蔽掉,我也试了下,发现能够执行回调函数内的语句了,也就是说看上去屏好像正常了,但现在还有个问题就是,如果我使用了对话框,屏显示的内容就会很慢,需要好几秒才会显示出我程序的内容,不知道是不是和我屏蔽掉存储设备那里有关,会不会也和我没实现读点函数有有关,麻烦硬汉哥指点一下,多谢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
发表于 2021-11-17 13:57:51 | 显示全部楼层
iuuiangela 发表于 2021-11-17 09:55
硬汉哥,我昨天试了一下,如果按照我这个屏的RGB888来配置,颜色就只有黑白色,所以在底层驱动这里,我还 ...

屏蔽掉WM_SetcreateFlags(WM_CF_MEMDEV),显示会有撕裂感,但一般不会显示慢,

你的应该是16bpp那个接口函数没有优化吧
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-17 14:35:16 | 显示全部楼层
eric2013 发表于 2021-11-17 13:57
屏蔽掉WM_SetcreateFlags(WM_CF_MEMDEV),显示会有撕裂感,但一般不会显示慢,

你的应该是16bpp那个接 ...

是的,我的16pp这个接口函数没做优化,里面这样写的for (;xsize > 0; xsize--, x++, p++) {_SetPixelIndex(pDevice, x, y, *p);},这里如果再做优化,是要加打点函数这些吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
发表于 2021-11-17 15:43:03 | 显示全部楼层
iuuiangela 发表于 2021-11-17 14:35
是的,我的16pp这个接口函数没做优化,里面这样写的for (;xsize > 0; xsize--, x++, p++) {_SetPixelInde ...

你用的这个amoled是不是不支持逐行或者逐列的加速操作,如果不支持的话,可以考虑整个显存,定时刷整个显存来提升速度。
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-17 16:14:48 | 显示全部楼层
eric2013 发表于 2021-11-17 15:43
你用的这个amoled是不是不支持逐行或者逐列的加速操作,如果不支持的话,可以考虑整个显存,定时刷整个显 ...

嗯嗯,我目前采用的方法就是您之前发过的一个帖子的方法http://www.armbbs.cn/forum.php?mod=viewthread&tid=94375,但是我看这个帖子的说法就是,采用了定时器刷的话,就不用WM_SetCreateFLags这条语句了,但是我试了一下,如果屏蔽掉存储设备这句,定时刷,有一种闪屏的现象,就和网上说不加这一句出现的现象一致,但是我加了这一句,显示就正常,但是在Framewin以外的界面是花的,我如果将framwewin设置较大的话,看上去倒是正常的,但后面的背景肯定还是花的,就怕后面加上触摸的话,一移动framewin,看到的全是花屏,感觉就和您那个帖子不太一样,这个屏确实比较小众,网上也不太找得到相关资料
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
发表于 2021-11-18 08:30:10 | 显示全部楼层
iuuiangela 发表于 2021-11-17 16:14
嗯嗯,我目前采用的方法就是您之前发过的一个帖子的方法http://www.armbbs.cn/forum.php?mod=viewthread& ...

剩下只能多试试各种方案了。
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-11-26 11:33:14 | 显示全部楼层
硬汉哥,再请教下您,我现在做到了触摸屏移植阶段,但用厂家提供的触摸屏驱动,点击时,返回的坐标值不太正确,不知道是不是这个原因让我移植emwin里面touch的部分失败了,我看了下您的电容屏移植教程,想问下那个教程是针对任何驱动都可用的吗
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 10:32 , Processed in 0.626488 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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