STM32 FSMC 内部FLASH刷屏速度达67fps,外部SRAM刷屏37fps

2019-12-18 18:48发布

实际硬件运行测试数据和官方的数据基本上一样,内部FLASH刷屏67fps,内部FLASH+DMA刷屏62fps,
外部SRAM刷屏37fps,外部SRAM+DMA刷屏37fps

文档:
点击此处下载 ourdev_682958JBZ0F0.pdf(文件大小:823K) (原文件名:AN2790 TFT LCD interfacing with the high-density STM32F10xxx FSMC.pdf)

代码:
点击此处下载 ourdev_682959Q4D2NR.zip(文件大小:1.78M) (原文件名:an2790.zip)


(原文件名:DSCF3692.JPG)


(原文件名:DSCF3694.JPG)


(原文件名:DSCF3695.JPG)


(原文件名:DSCF3696.JPG)


(原文件名:DSCF3697.JPG)


(原文件名:DSCF3698.JPG)


(原文件名:DSCF3699.JPG)


(原文件名:DSCF3701.JPG)


(原文件名:DSCF3703.JPG)


(原文件名:DSCF3704.JPG)


(原文件名:DSCF3709.JPG)


(原文件名:DSCF3710.JPG)


(原文件名:DSCF3711.JPG)


(原文件名:DSCF3712.JPG)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
32条回答
solidsky
1楼-- · 2019-12-20 10:18
LZ要是有时间的话,希望能对比一下内部Flash情况下下面两段代码的速度(一定要完全优化):
原版596行:
  for(index = 0; index < size; index++)
  {
    LCD_WriteRAM(*(__IO uint16_t *)BmpAddress);
    BmpAddress += 2;
  }
改为(大概就是这么个意思):
  uint32_t * p = (uint32_t *)BmpAddress;
  uint32_t * pEnd = p + size / 2;
  for(; p < pEnd; p++)
  {
    uint32_t d = *p;
    LCD_WriteRAM(d);
    LCD_WriteRAM(d >> 16);
  }

我猜测Flash的读取通道可能是32位的,而访问Falsh有延迟,并且会同取指冲突,所以一次读入32位数据再进行位运算可能反倒会快一些。在我这里,MDK4.2,480*320的屏,内部NorFlash延迟2周期的情况下,修改后的代码速度确实明显快了一点。(个人感觉不太像是单纯的循环展开的原因。)
LZ有时间的话,希望能在你的硬件上也试验一下有没有类似的现象。
notebook
2楼-- · 2019-12-20 11:17
mark
s-t-m-3-2
3楼-- · 2019-12-20 14:07
刚刚看到被的帖子在讨论这个问题,,,是LZ的1/3速度啊
kevin_ares
4楼-- · 2019-12-20 18:02
 精彩回答 2  元偷偷看……
hua19900322
5楼-- · 2019-12-20 19:37
good 有时间我也测一下
panda1985
6楼-- · 2019-12-20 21:40
mark            

一周热门 更多>