OpenEdv-开源电子网

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

emwin 显示位图或者png格式花屏 延时函数用delay_ms()就没有问题

[复制链接]

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2016-9-21 15:39:38 | 显示全部楼层 |阅读模式
1金钱
       stm32f429+emwin+ucos iii显示位图或者png格式的图片会花屏,而延时函数如果修改为delay_ms()就没有问题,GUI_Delay()显示就会花屏,代码如下:

void emWin_Task(void *p_arg)
{

     GUI_CURSOR_Show();
     GUI_DrawBitmap(&bmNFC_Back, 0, 0);


//    displyjpeg("1:/JPG/HH-02.jpg",1,0,0,1,1);
      while(1)
     {
          delay_ms(100);//图片显示正常
         //GUI_Delay(100);//这个时候图片显示会花屏
    }
}

emwin和ucos iii都是移植原子的例程,GUI_Delay()相对于delay_ms()不同的就是GUI_Delay()内部调用了重绘函数,但这又有什么关系吗?原子的例程好像不花屏,请各位大牛指点一二,小弟感激不尽!!谢谢!


调用delay_ms()延时函数正常显示

调用delay_ms()延时函数正常显示

调用GUI_Delay()延时函数的时候显示花屏

调用GUI_Delay()延时函数的时候显示花屏

最佳答案

查看完整内容[请看2#楼]

终于找到原因了,代码顺序的问题,把启动窗口存储设备写在了GUI_Init()之前了,修改一下顺序就好了, _HAL_RCC_CRC_CLK_ENABLE(); //使能CRC时钟 WM_SetCreateFlags(WM_CF_MEMDEV); //启动所有窗口的存储设备 GUI_Init(); //STemWin初始化 WM_MULTIBUF_Enable(1); //开启STemWin多缓冲,RGB屏可能会用到 修改为以下代码花屏就消失了,再也不用在回掉函数里面重新绘制了背景了 __HAL_RCC_CRC_CLK_ENABLE(); //使能CRC ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
 楼主| 发表于 2016-9-21 15:39:39 | 显示全部楼层
终于找到原因了,代码顺序的问题,把启动窗口存储设备写在了GUI_Init()之前了,修改一下顺序就好了,
_HAL_RCC_CRC_CLK_ENABLE();                //使能CRC时钟
WM_SetCreateFlags(WM_CF_MEMDEV); //启动所有窗口的存储设备
GUI_Init();                          //STemWin初始化
WM_MULTIBUF_Enable(1);  //开启STemWin多缓冲,RGB屏可能会用到

修改为以下代码花屏就消失了,再也不用在回掉函数里面重新绘制了背景了
__HAL_RCC_CRC_CLK_ENABLE();                //使能CRC时钟
GUI_Init();                          //STemWin初始化
WM_SetCreateFlags(WM_CF_MEMDEV); //启动所有窗口的存储设备       
WM_MULTIBUF_Enable(1);  //开启STemWin多缓冲,RGB屏可能会用到
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
 楼主| 发表于 2016-9-21 16:22:35 | 显示全部楼层
大牛们  谁来关注一下  谢谢  
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
 楼主| 发表于 2016-10-14 15:49:55 | 显示全部楼层
@正点原子   原子哥能帮忙分析一下原因吗  消息
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-10-14 17:50:56 | 显示全部楼层
hanzixi_angel 发表于 2016-10-14 15:49
@正点原子   原子哥能帮忙分析一下原因吗  消息

仿真看下吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
 楼主| 发表于 2016-10-17 10:14:04 | 显示全部楼层

仿真测试是gui_delay()引起的,GUI_Exec()重绘之后就会花屏,是改变了内存里面的数值引起的吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-10-18 21:38:27 | 显示全部楼层
hanzixi_angel 发表于 2016-10-17 10:14
仿真测试是gui_delay()引起的,GUI_Exec()重绘之后就会花屏,是改变了内存里面的数值引起的吗?

gui_delay应该引起任务调度了,然后你在其它任务里面,可能又操作LCD了,导致LCD乱了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-7-19
在线时间
5 小时
发表于 2018-8-8 22:14:47 | 显示全部楼层
hanzixi_angel 发表于 2016-9-21 15:39
终于找到原因了,代码顺序的问题,把启动窗口存储设备写在了GUI_Init()之前了,修改一下顺序就好了,
_HAL ...

实在感谢,最近也是遇到这个问题,更改顺序后解决,请问下,是什么原因造成的
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
 楼主| 发表于 2018-8-9 11:06:00 | 显示全部楼层
pyx038 发表于 2018-8-8 22:14
实在感谢,最近也是遇到这个问题,更改顺序后解决,请问下,是什么原因 ...

原因未知  应该是底层移植的问题  后来我按照st官方的移植方式就不会出现这样的问题了   
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-11-17
在线时间
16 小时
发表于 2018-11-17 16:03:58 | 显示全部楼层
十分感谢,终于找到解决方法了。。。
回复

使用道具 举报

79

主题

395

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1765
金钱
1765
注册时间
2015-9-21
在线时间
544 小时
发表于 2018-11-17 18:04:42 | 显示全部楼层
WM_SetCreateFlags(WM_CF_MEMDEV); //启动所有窗口的存储设备
先建立存储区域 LCD里面的数据是乱码
写进入的数据就是显示的数据
而先初始化EMWIN,再建立存储器就不一样了!
我是这么认为的!!
回复

使用道具 举报

5

主题

31

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2013-7-23
在线时间
159 小时
发表于 2022-7-10 11:47:49 | 显示全部楼层
不错,我也出现了这个问题,按照楼主的方法解决了。
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2019-6-19
在线时间
14 小时
发表于 2022-7-10 14:11:14 | 显示全部楼层
感谢楼主,我也出现了这个问题,果然把次序掉过来就解决了。
另外,我回头查看了原子哥的例程,发现在我第一次出问题的例程中(EMWIN实验8 存储设备),原子哥并没有调用WM_SetCreateFlags(WM_CF_MEMDEV); 我也不知道怎么鬼使神差地调用了这个函数。我把程序中这个函数注释掉,也能正常运转了。
回复

使用道具 举报

0

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2020-10-15
在线时间
54 小时
发表于 2023-7-21 13:28:18 | 显示全部楼层
非常感谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 04:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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