OpenEdv-开源电子网

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

ili9486移植emWin,刷屏速度太慢,求教怎么优化

[复制链接]

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-1-3
在线时间
14 小时
发表于 2016-1-12 22:48:45 | 显示全部楼层 |阅读模式
4金钱
初学emWin,   用stm32f407 ili9486 320*480 lcd移植emWin,  刷屏速度很慢 肉眼都能看出在刷屏。 参考安福来的9486优化一样很慢。。  有用过9486移植过emWin的兄弟给支支招

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1679
金钱
1679
注册时间
2014-2-25
在线时间
229 小时
发表于 2016-1-13 09:01:34 | 显示全部楼层
有这种事?我马上也要弄跟你一样的屏,到时候我试试看,你是用FSMC刷的吧
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-1-3
在线时间
14 小时
 楼主| 发表于 2016-1-13 09:07:14 | 显示全部楼层
1201yuge 发表于 2016-1-13 09:01
有这种事?我马上也要弄跟你一样的屏,到时候我试试看,你是用FSMC刷的吧

是的,用fsmc刷的。
不清楚 是不是一直emWin没优化好的缘故。
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1679
金钱
1679
注册时间
2014-2-25
在线时间
229 小时
发表于 2016-1-13 09:28:03 | 显示全部楼层
miniMaple 发表于 2016-1-13 09:07
是的,用fsmc刷的。
不清楚 是不是一直emWin没优化好的缘故。

emwin优化直接是参考的网上的
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-1-3
在线时间
14 小时
 楼主| 发表于 2016-1-13 09:54:52 | 显示全部楼层
1201yuge 发表于 2016-1-13 09:28
emwin优化直接是参考的网上的

参考优化  效果一般,刷屏也还是能感觉到 两个界面的切换。。  
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1679
金钱
1679
注册时间
2014-2-25
在线时间
229 小时
发表于 2016-1-13 12:10:37 | 显示全部楼层
miniMaple 发表于 2016-1-13 09:54
参考优化  效果一般,刷屏也还是能感觉到 两个界面的切换。。

等我的板子到了具体试试看
回复

使用道具 举报

13

主题

276

帖子

0

精华

高级会员

Rank: 4

积分
696
金钱
696
注册时间
2014-6-20
在线时间
146 小时
发表于 2016-1-13 12:42:57 | 显示全部楼层
你是用FSMC吗,刷屏速度跟eMWiN没多大关系,EMWIN驱动显示屏,还是一样需要调用底层驱动
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-1-3
在线时间
14 小时
 楼主| 发表于 2016-1-13 15:44:30 | 显示全部楼层
313668972 发表于 2016-1-13 12:42
你是用FSMC吗,刷屏速度跟eMWiN没多大关系,EMWIN驱动显示屏,还是一样需要调用底层驱动

是用 fsmc,  , 问了屏的厂家, 居然说刷屏几百ms是正常的
回复

使用道具 举报

13

主题

276

帖子

0

精华

高级会员

Rank: 4

积分
696
金钱
696
注册时间
2014-6-20
在线时间
146 小时
发表于 2016-1-13 22:02:24 | 显示全部楼层
miniMaple 发表于 2016-1-13 15:44
是用 fsmc,  , 问了屏的厂家, 居然说刷屏几百ms是正常的。

确实,想达到手机那种效果不太现实
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-1-14 23:38:00 | 显示全部楼层
miniMaple 发表于 2016-1-13 15:44
是用 fsmc,  , 问了屏的厂家, 居然说刷屏几百ms是正常的。

刷屏和你的FSMC速度有关,FSMC速度够快,刷屏可以到几百帧....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2016-6-3
在线时间
25 小时
发表于 2016-7-13 08:51:13 | 显示全部楼层
【能接emWin的SPI串口屏】
GLCD功能类似于SPI串口屏,只是SPI接口通信更快速,以至能作为emWin(第三方界面软件库)的图形显示屏,弥补emWin使用字库/图片麻烦以及刷屏慢的缺点,这样emWin做界面就更精美、便捷!
emWin界面软件库是运行在用户CPU中的;GLCD负责储存字库和图片,以及接收由emWin发出的绘图指令,并且执行这些绘图指令以显示文字、图片、2D图形等,绘图指令代替像素操作可大大减轻用户CPU的负担;GLCD还管理触摸屏、鼠标、键盘、蜂鸣器、RTC时钟等外设。
更多介绍请看:www.neqee.com
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2015-9-28
在线时间
18 小时
发表于 2016-7-22 18:22:27 | 显示全部楼层
楼主提高编译器的代码优化等级试试
回复

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
发表于 2016-7-27 23:06:10 | 显示全部楼层
本帖最后由 hpdell 于 2016-7-27 23:07 编辑

你好,我是有的也是 9486的,刷屏貌似没有你说的那么慢吧,

单片机系统时钟 168MHz
fmc设置如下:
SRAM_HandleTypeDef hsram4;

  /** Perform the SRAM4 memory initialization sequence  LCD

         LCD configured as follow:
            - Data/Address MUX = Disable
            - Memory Type = SRAM
            - Data Width = 16bit
            - Write Operation = Enable
            - Extended Mode = Enable
            - Asynchronous Wait = Disable
  */
  hsram4.Instance = FMC_NORSRAM_DEVICE;
  hsram4.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  /* hsram4.Init */
  hsram4.Init.NSBank = FMC_NORSRAM_BANK4;
  hsram4.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
  hsram4.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
  hsram4.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  hsram4.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  hsram4.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  hsram4.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
  hsram4.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  hsram4.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
  hsram4.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  hsram4.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  hsram4.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  hsram4.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  /* Timing */
  TimingWrite.AddressSetupTime = 4;                //地址建立时间(ADDSET)为16个HCLK 1/168M=6ns*4 = 24ns          ili9486 资料要求 最小15ns
  TimingWrite.AddressHoldTime = 1;                        //地址保持时间(ADDHLD)模式A未用到        
  TimingWrite.DataSetupTime = 5;                                //数据保存时间为5个HCLK        = 6ns*5 = 30ns

  TimingWrite.BusTurnAroundDuration = 1;
  TimingWrite.CLKDivision = 0;
  TimingWrite.DataLatency = 0;
  TimingWrite.AccessMode = FMC_ACCESS_MODE_C;

  TimingRead.AddressSetupTime = 4;                //地址建立时间(ADDSET)为16个HCLK 1/168M=6ns*4 = 24ns          ili9486 资料要求 最小15ns
  TimingRead.AddressHoldTime = 1;                        //地址保持时间(ADDHLD)模式A未用到        
  TimingRead.DataSetupTime = 5;                                //数据保存时间为5个HCLK        = 6ns*5 = 30ns

  TimingRead.BusTurnAroundDuration = 1;
  TimingRead.CLKDivision = 0;
  TimingRead.DataLatency = 0;
  TimingRead.AccessMode = FMC_ACCESS_MODE_C;

  HAL_SRAM_Init(&hsram4, &TimingWrite, &TimingRead);



void LCD_PutPixel(uint16_t _usX, uint16_t _usY, uint16_t _usColor)
{

    LCD_SetCursor(_usX, _usY);        /* 设置光标位置 */

        FMC_LCD->RAM = _usColor;

}



uint16_t LCD_GetPixel(uint16_t _usX, uint16_t _usY)
{
        uint16_t Color = 0;

        LCD_SetCursor(_usX, _usY);        /* 设置光标位置 */

        FMC_LCD->REG = 0x2E;
  Color = FMC_LCD->RAM;         /* 第1个哑读,丢弃 */
  Color = FMC_LCD->RAM;         /* 第1个哑读,丢弃 */
  return Color;                              // ili9486 控制器读点,只需要读取一次

}

现在只是读点有时感觉还有点问题,不知道该如何解决,如果使用下面的方法,情况会更糟糕。
        uint16_t R = 0, G = 0, B = 0 , Color = 0;

        LCD_SetCursor(_usX, _usY);        /* 设置光标位置 */

        FMC_LCD->REG = 0x2E;
        R = FMC_LCD->RAM;         /* 第1个哑读,丢弃 */

        R = FMC_LCD->RAM;
        B = FMC_LCD->RAM;
        G = FMC_LCD->RAM;

//  printf("\r\nGetPixel R %X", (uint16_t)R );
//  printf("\r\nGetPixel R2 %X", (uint16_t)R2 );
//  printf("\r\nGetPixel G %X", (uint16_t)G );
//  printf("\r\nGetPixel B %X", (uint16_t)B );

//    Color = (u16)( (u16)((B >> 3) << 11) | (u16)((G >> 2) << 5) | (u16)(R >> 3) ) ;
//  Color = (u16)( (u16)((R >> 3) << 11) | (u16)((G >> 2) << 5) | (u16)(B >> 3) ) ;
  Color = (((R >> 11) << 11) | ((G >> 10 ) << 5) | (B >> 11));



//  printf("\r\nGetPixel 2 %X", (uint16_t)Color );

  return Color;

你到时看看有没有什么好的方法读点告诉一声 !!!!!!!!!!!!!!!





















回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 21:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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