硬汉嵌入式论坛

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

[emWin] STM32F439的EMWIN使用问题

[复制链接]

1

主题

8

回帖

1

积分

新手上路

积分
1
发表于 2017-5-3 16:50:31 | 显示全部楼层 |阅读模式
用STM32F439的TFT控制器驱动液晶,显示缓冲区在0X60000000区域,在调用GUI_JPEG_DRAW涵数显示图片后,不能对显示缓冲区读写,哪里出问题?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115737
QQ
发表于 2017-5-3 17:18:08 | 显示全部楼层
这个地址0X60000000是显存首地址?
显存区域是emWin自动处理的,不用用户操作。是不是调用函数GUI_JPEG_DRAW后,卡死子在某个地方了。
回复

使用道具 举报

1

主题

8

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-5-3 22:24:04 | 显示全部楼层
把JPEG文件数据放到F439内部RAM,调用GUI_JPEG_DRAW后,可显示图片,再将另一幅JPEG数据再调入改内部RAM区域,调GUI_JPEG_DRAW函数,就是不显示新的图片。不知是GUI_JPEG_DRAW函数对显示区做了什么处理。没释放显示缓冲区?
回复

使用道具 举报

1

主题

8

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-5-3 22:26:15 | 显示全部楼层
0X60000000起是EMWIN中定义的VRAM起始地址。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115737
QQ
发表于 2017-5-4 01:29:09 | 显示全部楼层

回 scarmfan 的帖子

scarmfan:把JPEG文件数据放到F439内部RAM,调用GUI_JPEG_DRAW后,可显示图片,再将另一幅JPEG数据再调入改内部RAM区域,调GUI_JPEG_DRAW函数,就是不显示新的图片。不知是GUI_JPEG_DRAW函数对显示区做了什么处理。没释放显示缓冲区?
 (2017-05-03 22:24) 
这是你使用的问题吧,首先显示屏的显存不要动,这个是emWin自己在管理,用户不要去操作。

然后你emWin有个动态内存,你可以用SDRAM除开显存占用的区域以外,其它部分作为动态内存,然后把你的图片加载到动态内存就好的,详细可以学习下我们新版emWin教程的JPEG章节:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834
回复

使用道具 举报

1

主题

8

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-5-4 15:03:41 | 显示全部楼层
调试时,确实发现后面解码的图片数据没有写入VRAM区内 该区被隔离了?写不进数.
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115737
QQ
发表于 2017-5-4 15:09:57 | 显示全部楼层

回 scarmfan 的帖子

scarmfan:调试时,确实发现后面解码的图片数据没有写入VRAM区内 该区被隔离了?写不进数. (2017-05-04 15:03)
你的工程简单的跑个窗口或者对话框没问吧。

然后看下你的GUIConf.C文件,是不是动态内存定义小了,动态内存一定要足够大,JPEG比较耗动态内存的。
回复

使用道具 举报

1

主题

8

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-5-4 15:10:06 | 显示全部楼层
我的动态内存使用的是片内RAM
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115737
QQ
发表于 2017-5-4 15:11:40 | 显示全部楼层

回 scarmfan 的帖子

scarmfan:我的动态内存使用的是片内RAM (2017-05-04 15:10) 
片内太小了,根本不够用,显示非常小的JPEG图片还行。
可以显示个30*30看看。前提是保证你分配了100KB以上的动态内存。
回复

使用道具 举报

1

主题

8

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-5-4 22:45:39 | 显示全部楼层
#define GUI_NUMBYTES  (1024*100)  内存定义在100K,但是偶尔连续JPEG显示也可以,单大部分时间运行都只显第一次的图片,后面就显不出了。我用的
是外部静态RAM,IS61WV102416BLL-10.显示图片格式是800X480,颜色RGB565。把JPEG数据放F439内部RAM和外部静态RAM都是一样的,偶尔也能显示。大多数运行都显示不出后面的图片。而且显示JPEG也是较慢,屏幕从上到下慢慢更新。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115737
QQ
发表于 2017-5-5 11:18:15 | 显示全部楼层

回 scarmfan 的帖子

scarmfan:#define GUI_NUMBYTES  (1024*100)  内存定义在100K,但是偶尔连续JPEG显示也可以,单大部分时间运行都只显第一次的图片,后面就显不出了。我用的
是外部静态RAM,IS61WV102416BLL-10.显示图片格式是800X480,颜色RGB565。把JPEG数据放F439内部RAM和外部静态RA .. (2017-05-04 22:45)
用F439了,为什么还要用SRAM,而不用SDRAM。

另外你的显示屏怎么接的,裸屏吗,还是都带有控制器的。

讨论了这么多,你的问题才讨论到点上,你在楼主位就应该把这两个问题说明下,很重要。
回复

使用道具 举报

1

主题

8

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-5-5 21:47:15 | 显示全部楼层
SRAM使用方便,SDRAM驱动器太复杂.TFT是不带驱动的裸屏.其驱动芯片是ILI9806. 与F439接口通过DPI with DBI Type C 3-line 9-bit 连接.并行RGB24色.行场同步信号和点时钟等信号.反正LDTC接口就能驱动.从接口方法上应没问题吧
回复

使用道具 举报

1

主题

8

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-5-5 23:26:36 | 显示全部楼层
我把图片缩小成100X60大小,还是一样的现象。偶尔能显出来。程序如下,显示3张小图片
   GUI_Init();
   GUI_JPEG_Draw(_acTP1, sizeof(_acTP1), 0, 0);
   GUI_JPEG_Draw(_acTP2, sizeof(_acTP2), 120, 100);
   GUI_JPEG_Draw(_acTP3, sizeof(_acTP3), 300, 200);
大部分时间都是显示TP1后,后面图片都显不出。现在图片TP1 ,TP2 ,TP3是存在在内部程序FLASH里。
郁闷呀,到底是啥原因。实在不行只能自己编JPEG解码程序,解出后放入SRAM肯定能行。
为什么调用GUI_JPEG_Draw后,SRAM都不能正确存取数呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115737
QQ
发表于 2017-5-6 01:41:03 | 显示全部楼层

回 scarmfan 的帖子

scarmfan:SRAM使用方便,SDRAM驱动器太复杂.TFT是不带驱动的裸屏.其驱动芯片是ILI9806. 与F439接口通过DPI with DBI Type C 3-line 9-bit 连接.并行RGB24色.行场同步信号和点时钟等信号.反正LDTC接口就能驱动.从接口方法上应没问题吧 (2017-05-05 21:47) 
用SRAM太不划算了,价格高,而且容量很小。你用的还是16位接口的。
性能与F439外接32位SDRAM,差距稍大。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115737
QQ
发表于 2017-5-6 01:43:03 | 显示全部楼层

回 scarmfan 的帖子

scarmfan:我把图片缩小成100X60大小,还是一样的现象。偶尔能显出来。程序如下,显示3张小图片
   GUI_Init();
   GUI_JPEG_Draw(_acTP1, sizeof(_acTP1), 0, 0);
   GUI_JPEG_Draw(_acTP2, sizeof(_acTP2), 120, 100);
   GUI_JPEG_Draw(_acTP3, .. (2017-05-05 23:26) 
把SRAM中显存以外,没有使用的区域给emWin动态内存使用吧,要不emWin动态内存太小了。
回复

使用道具 举报

1

主题

8

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-5-7 16:47:38 | 显示全部楼层
我把emWin动态内存放到外部SRAM,把内存大小改到400K,结果还是一样的。肯定不是动态内存不够。关键是一旦调用GUI_JPEG_Draw函数后,与TFT对应的显示区域的存储区(外部SRAM)进行读写数据就不对。SRAM的其它区域可正常写入,读出。F439的使用手册上又没有讲清楚外部RAM和LTDC之间的数据传输过程。肯定是GUI_JPEG_Draw函数把CPU对外部SRAM的访问给禁止了。还有没有办法解决这个问题?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115737
QQ
发表于 2017-5-8 00:37:01 | 显示全部楼层

回 scarmfan 的帖子

scarmfan:我把emWin动态内存放到外部SRAM,把内存大小改到400K,结果还是一样的。肯定不是动态内存不够。关键是一旦调用GUI_JPEG_Draw函数后,与TFT对应的显示区域的存储区(外部SRAM)进行读写数据就不对。SRAM的其它区域可正常写入,读出。F439的使用手册上又没有讲清楚外部RAM和LTDC之间的 .. (2017-05-07 16:47) 
帮不上了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-15 07:24 , Processed in 0.539696 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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