[emWin]SPI刷3.5寸TFT,是这么慢的吗?-已解决

[emWin]SPI刷3.5寸TFT,是这么慢的吗?-已解决

查看: 17965|回复: 28

[emWin]

SPI刷3.5寸TFT,是这么慢的吗?-已解决

[复制链接]

caicaptain2

caicaptain2

当前离线

积分3246

355

主题2176

回帖3246

积分

版主

积分3246

发消息

电梯直达

楼主

发表于 2020-8-18 18:44:49

|

只看该作者

|只看大图

|倒序浏览

|阅读模式

本帖最后由 caicaptain2 于 2020-9-8 17:02 编辑

F4的MCU,SPI3时钟20MHz的,刷3.5寸TFT,分辨率320x480,刷一屏需要0.4秒。。。

尝试使用hal库的spi+dma,刷一屏反而要1秒了。。。

屏是常用的ILI9488的芯片,spi模式下,写一个点需要发送3个字节数据,是不是这个原因造成的?

----------------------------------------已解决,分享代码------------------------------------------

第一次用SPI接口的FT屏,卖家提供了一些代码,但是SPI是普通单字节模式,速度很慢。而且没有读点函数。尝试着优化了一下。mdk编译的时候,优化不能选择3,可能花屏。 优化0的时候很好。

运行环境: F407,MCU主频168MHz,SPI3,SPI时钟是21MHz。 驱动3.5寸 320x480的SPI接口TFT。

目前改进成SPI加MDA接口后,刷屏耗时0.2秒,感受尚可,已经是最优化了。

代码中的读点函数正常,读ID正常。

DMA中断的代码如下:

void DMA1_Stream5_IRQHandler(void)

{

if (__HAL_DMA_GET_FLAG (&hdma_spi3_tx,DMA_FLAG_TCIF1_5) != RESET)

{

if(__HAL_DMA_GET_IT_SOURCE(&hdma_spi3_tx, DMA_IT_TC) != RESET)

{

__HAL_DMA_CLEAR_FLAG(&hdma_spi3_tx,DMA_FLAG_TCIF1_5);

SPI3txdmaflag=0;

}

}

}复制代码

发现了一些bug,下面的附件是9月8日更新,无需开启DMA中断了,16BPP函数有优化,刷屏速度提升很多。 使用DMA的查询方式,这样在多任务系统中,也不影响其他函数的速度了。

LCD9488SPI.zip

(19.1 KB, 下载次数: 246)

2020-9-8 16:58 上传

点击文件名下载附件

9月8日更新

微信图片_20200819152958.jpg (55.01 KB, 下载次数: 21)

下载附件

2020-8-19 15:30 上传

收藏2

回复

使用道具

举报

li99932

li99932

当前离线

积分24

0

主题24

回帖24

积分

新手上路

新手上路, 积分 24, 距离下一级还需 25 积分

新手上路, 积分 24, 距离下一级还需 25 积分

积分24

发消息

沙发

发表于 2020-8-18 20:12:05

|

只看该作者

我用F0的MCU,SPI1时钟12MHz的,刷3.5寸TFT,分辨率320x480,刷一屏需要4秒。。。

回复

使用道具

举报

hejm

hejm

当前离线

积分23

0

主题23

回帖23

积分

新手上路

新手上路, 积分 23, 距离下一级还需 26 积分

新手上路, 积分 23, 距离下一级还需 26 积分

积分23

发消息

板凳

发表于 2020-8-18 21:05:05

|

只看该作者

24位色是比较慢,再说分辨率这么高,你这个是刷的纯色还是图片?

回复

使用道具

举报

caicaptain2

caicaptain2

当前离线

积分3246

355

主题2176

回帖3246

积分

版主

积分3246

发消息

地板

楼主|

发表于 2020-8-19 08:34:55

|

只看该作者

hejm 发表于 2020-8-18 21:05

24位色是比较慢,再说分辨率这么高,你这个是刷的纯色还是图片?

3.5寸基本都是这个分辨率了。。。。我说的是刷纯色,就是清屏。

回复

使用道具

举报

lvehe

lvehe

当前离线

积分182

12

主题146

回帖182

积分

初级会员

初级会员, 积分 182, 距离下一级还需 17 积分

初级会员, 积分 182, 距离下一级还需 17 积分

积分182

发消息

5#

发表于 2020-8-19 08:40:16

|

只看该作者

刷纯色完全没必要一个点一个点的绘制,浪费时间,除非是绘制图片。

回复

使用道具

举报

mewan

mewan

当前离线

积分307

54

主题145

回帖307

积分

高级会员

高级会员, 积分 307, 距离下一级还需 192 积分

高级会员, 积分 307, 距离下一级还需 192 积分

积分307

发消息

6#

发表于 2020-8-19 08:55:45

|

只看该作者

用IO口模拟SPI,IO操作直接用寄存器不用库,速度可能会快些

回复

使用道具

举报

hejm

hejm

当前离线

积分23

0

主题23

回帖23

积分

新手上路

新手上路, 积分 23, 距离下一级还需 26 积分

新手上路, 积分 23, 距离下一级还需 26 积分

积分23

发消息

7#

发表于 2020-8-19 09:39:44

|

只看该作者

我用的F103,也是这个分辨率, 16位色,用的8位并口,不是spi,感觉速度还可以,至少不会看到明显是刷写过程;我在另外一个项目上,320*240的分辨率,也是16位色, spi和fsmc接口都用了,感觉spi跟fsmc 16位并口速度至少在肉眼看起来差别不大,都很快。

回复

使用道具

举报

eric2013

eric2013

当前离线

积分117177

1万

主题7万

回帖11万

积分

管理员

积分117177

发消息

8#

发表于 2020-8-19 09:50:50

|

只看该作者

你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧

http://www.armbbs.cn/forum.php?m ... 5776&fromuid=58

(出处: 硬汉嵌入式论坛)

微信公众号:点击此处扫描图片关注

B站视频:https://space.bilibili.com/678329477

淘宝小店:https://anfulai.taobao.com/

【2025新品】H7-TOOL PLUS电池版发布,真正的手持设备,微型数控电源输出电流提升至2A,峰值3A, 防过压防过流防反接

回复

使用道具

举报

ghslfgkkl88

ghslfgkkl88

当前离线

积分1183

43

主题1049

回帖1183

积分

至尊会员

至尊会员, 积分 1183, 距离下一级还需 3817 积分

至尊会员, 积分 1183, 距离下一级还需 3817 积分

积分1183

发消息

9#

发表于 2020-8-19 10:31:24

|

只看该作者

eric2013 发表于 2020-8-19 09:50

你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧

我没用过SPI方式的屏,通过SPI发送的数据,不是原始的RGB数据么?算楼主的是16位色,两字节,20MHz/(320*480*16bit)=8,也就是SPI为20M时极限速度也就每秒钟8屏,这样算对不对?

回复

使用道具

举报

caicaptain2

caicaptain2

当前离线

积分3246

355

主题2176

回帖3246

积分

版主

积分3246

发消息

10#

楼主|

发表于 2020-8-19 12:47:39

|

只看该作者

eric2013 发表于 2020-8-19 09:50

你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧

我这里有个诡异的问题。 连续写液晶的RAM,每个字节都要拉高CS吗?

一个点需要写3个字节,如果我是单字节写,每个字节之间的CS线拉低拉高,区分开来,就正常。

如果我用DMA方式,一次性写3个字节,字节之间没有控制CS线,只在开始拉低CS,结束后拉高CS。就出现问题了。。。

回复

使用道具

举报

caicaptain2

caicaptain2

当前离线

积分3246

355

主题2176

回帖3246

积分

版主

积分3246

发消息

11#

楼主|

发表于 2020-8-19 13:37:47

|

只看该作者

本帖最后由 caicaptain2 于 2020-8-19 15:53 编辑

caicaptain2 发表于 2020-8-19 12:47

我这里有个诡异的问题。 连续写液晶的RAM,每个字节都要拉高CS吗?

一个点需要写3个字节,如果我是单字 ...

唉,简单的SPI DMA传输,痛苦的调试了3天,才刚刚知道SPI必须回读一下子才行啊。。。

在确认单次DMA传输完成之后,而且不论此次传输几个字节,必须执行一下回读。

dummy=SPI3->DR;

本来,在网上找个各种例子都强调,SPI DMA 发送和接收必须同时打开,不然会有问题。。。但是没有人解释为什么。。。

一般驱动TFT很少读SPI数据,所以,没有设置SPI的DMA读取。原来,SPI的DR不读取的话,就会工作不正常啊。。。

回复

使用道具

举报

caicaptain2

caicaptain2

当前离线

积分3246

355

主题2176

回帖3246

积分

版主

积分3246

发消息

12#

楼主|

发表于 2020-8-19 15:45:04

|

只看该作者

eric2013 发表于 2020-8-19 09:50

你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧

你这个是全屏点数都缓存?

好处是DMA可以从头写到尾,缺点是占用RAM太多了啊。。。

而且tft芯片的SPI速度有限制,记得你的贴子说过是最大16MHz左右。

回复

使用道具

举报

eric2013

eric2013

当前离线

积分117177

1万

主题7万

回帖11万

积分

管理员

积分117177

发消息

13#

发表于 2020-8-19 16:27:03

|

只看该作者

ghslfgkkl88 发表于 2020-8-19 10:31

我没用过SPI方式的屏,通过SPI发送的数据,不是原始的RGB数据么?算楼主的是16位色,两字节,20MHz/(320* ...

对,是这样的。

微信公众号:点击此处扫描图片关注

B站视频:https://space.bilibili.com/678329477

淘宝小店:https://anfulai.taobao.com/

【2025新品】H7-TOOL PLUS电池版发布,真正的手持设备,微型数控电源输出电流提升至2A,峰值3A, 防过压防过流防反接

回复

使用道具

举报

eric2013

eric2013

当前离线

积分117177

1万

主题7万

回帖11万

积分

管理员

积分117177

发消息

14#

发表于 2020-8-19 16:28:58

|

只看该作者

caicaptain2 发表于 2020-8-19 13:37

唉,简单的SPI DMA传输,痛苦的调试了3天,才刚刚知道SPI必须回读一下子才行啊。。。

在确认单次DMA传 ...

不需要,我这里仅开的SPI DMA发送

微信公众号:点击此处扫描图片关注

B站视频:https://space.bilibili.com/678329477

淘宝小店:https://anfulai.taobao.com/

【2025新品】H7-TOOL PLUS电池版发布,真正的手持设备,微型数控电源输出电流提升至2A,峰值3A, 防过压防过流防反接

回复

使用道具

举报

eric2013

eric2013

当前离线

积分117177

1万

主题7万

回帖11万

积分

管理员

积分117177

发消息

15#

发表于 2020-8-19 16:29:51

|

只看该作者

caicaptain2 发表于 2020-8-19 15:45

你这个是全屏点数都缓存?

好处是DMA可以从头写到尾,缺点是占用RAM太多了啊。。。

我是为了解决撕裂感,整了个全屏缓冲。

我这个是100MHz SPI刷的。

微信公众号:点击此处扫描图片关注

B站视频:https://space.bilibili.com/678329477

淘宝小店:https://anfulai.taobao.com/

【2025新品】H7-TOOL PLUS电池版发布,真正的手持设备,微型数控电源输出电流提升至2A,峰值3A, 防过压防过流防反接

回复

使用道具

举报

caicaptain2

caicaptain2

当前离线

积分3246

355

主题2176

回帖3246

积分

版主

积分3246

发消息

16#

楼主|

发表于 2020-8-19 16:52:23

|

只看该作者

eric2013 发表于 2020-8-19 16:28

不需要,我这里仅开的SPI DMA发送

我也觉得匪夷所思。。。

但是反复验证中,我只要不读一下SPI->DR,就不正常了。 而且是诡异的无法解释的异常现现象。。。

回复

使用道具

举报

goodgft

goodgft

当前离线

积分17

0

主题17

回帖17

积分

新手上路

新手上路, 积分 17, 距离下一级还需 32 积分

新手上路, 积分 17, 距离下一级还需 32 积分

积分17

发消息

17#

发表于 2021-3-7 21:41:09

|

只看该作者

eric2013 发表于 2020-8-19 09:50

你这个性能有点太挫了。

实现H7-TOOL的IPS屏SPI DMA优化,每秒55帧

H7-TOOL的IPS屏SPI DMA可以移植到F103上吗,里面的很多寄存器操作,但是H7与F1的寄存器又不一样,有参考的模板吗?

回复

使用道具

举报

caicaptain2

caicaptain2

当前离线

积分3246

355

主题2176

回帖3246

积分

版主

积分3246

发消息

18#

楼主|

发表于 2021-3-8 15:57:30

|

只看该作者

goodgft 发表于 2021-3-7 21:41

H7-TOOL的IPS屏SPI DMA可以移植到F103上吗,里面的很多寄存器操作,但是H7与F1的寄存器又不一样,有参考 ...

一般是不行的。 103的ram比较小,全屏缓冲就不够用。而且spi速度慢很多,效果应该不好。

回复

使用道具

举报

frankff

frankff

当前离线

积分80

12

主题44

回帖80

积分

初级会员

初级会员, 积分 80, 距离下一级还需 119 积分

初级会员, 积分 80, 距离下一级还需 119 积分

积分80

发消息

19#

发表于 2022-12-21 16:01:02

|

只看该作者

H7-TOOL的IPS屏SPI+DMA的操作可以移植到F4上吗?比较多的寄存器存在不同

回复

使用道具

举报

emwin

emwin

当前离线

积分1775

219

主题1108

回帖1775

积分

至尊会员

More we do, more we can do.

至尊会员, 积分 1775, 距离下一级还需 3225 积分

至尊会员, 积分 1775, 距离下一级还需 3225 积分

积分1775

发消息

20#

发表于 2022-12-21 21:15:18

|

只看该作者

计算了下你这个频率,显存全更新0.2秒接近传输带宽。

专利、论文、国家标准下载可以私信我

回复

使用道具

举报

qwe520123

qwe520123

当前离线

积分1

0

主题1

回帖1

积分

新手上路

新手上路, 积分 1, 距离下一级还需 48 积分

新手上路, 积分 1, 距离下一级还需 48 积分

积分1

发消息

21#

发表于 2023-11-10 17:06:30

|

只看该作者

下载不了呢

回复

使用道具

举报

aua__

aua__

当前离线

积分2

0

主题2

回帖2

积分

新手上路

新手上路, 积分 2, 距离下一级还需 47 积分

新手上路, 积分 2, 距离下一级还需 47 积分

积分2

发消息

22#

发表于 2023-11-29 09:58:59

|

只看该作者

多谢楼主代码,407,DMA刷的,差不多0.1s刷一张。

回复

使用道具

举报

aua__

aua__

当前离线

积分2

0

主题2

回帖2

积分

新手上路

新手上路, 积分 2, 距离下一级还需 47 积分

新手上路, 积分 2, 距离下一级还需 47 积分

积分2

发消息

23#

发表于 2023-11-29 10:00:04

|

只看该作者

多谢楼主代码,407 dma刷的,差不多1秒刷10张图。

回复

使用道具

举报

summerrain19

summerrain19

当前离线

积分6

0

主题6

回帖6

积分

新手上路

新手上路, 积分 6, 距离下一级还需 43 积分

新手上路, 积分 6, 距离下一级还需 43 积分

积分6

发消息

24#

发表于 2024-6-19 09:37:13

|

只看该作者

楼主你好,代码中SPI读取ID的程序验证过了吗?

回复

使用道具

举报

summerrain19

summerrain19

当前离线

积分6

0

主题6

回帖6

积分

新手上路

新手上路, 积分 6, 距离下一级还需 43 积分

新手上路, 积分 6, 距离下一级还需 43 积分

积分6

发消息

25#

发表于 2024-6-19 09:38:10

|

只看该作者

楼主你好,SPI读取ID的程序验证过了吗?

回复

使用道具

举报

zouhp

zouhp

当前离线

积分33

2

主题27

回帖33

积分

新手上路

新手上路, 积分 33, 距离下一级还需 16 积分

新手上路, 积分 33, 距离下一级还需 16 积分

积分33

发消息

26#

发表于 2024-6-22 08:33:36

|

只看该作者

summerrain19 发表于 2024-6-19 09:38

楼主你好,SPI读取ID的程序验证过了吗?

试试这个,我读出来是0x9488,注意,读的速度不要太快!

void ILI9488_ReadID(void)

{

unsigned char buf[4];

// SPI 读取速度较低

SPI_SetSpeed(SPI1, 32); // MCLK/32

ILI9488_WriteCmd(0xB0);

ILI9488_WriteParam(0x00); // SDA_EN = 0

ILI9488_WriteCmd(0xFB);

ILI9488_WriteParam(0x80); // SPI_READ_EN = 1, 1st

ILI9488_WriteCmd(0xD3);

buf[0] = SPI_WriteByte(SPI1, 0xFF); // XX

ILI9488_WriteCmd(0xFB);

ILI9488_WriteParam(0x81); // SPI_READ_EN = 1, 2nd

ILI9488_WriteCmd(0xD3);

buf[1] = SPI_WriteByte(SPI1, 0xFF); // 00

ILI9488_WriteCmd(0xFB);

ILI9488_WriteParam(0x82); // SPI_READ_EN = 1, 3th

ILI9488_WriteCmd(0xD3);

buf[2] = SPI_WriteByte(SPI1, 0xFF); // 94

ILI9488_WriteCmd(0xFB);

ILI9488_WriteParam(0x83); // SPI_READ_EN = 1, 4th

ILI9488_WriteCmd(0xD3);

buf[3] = SPI_WriteByte(SPI1, 0xFF); // 88

g_ChipID = buf[2];

g_ChipID = g_ChipID<<8;

g_ChipID |= buf[3];

ILI9488_WriteCmd(0xFB);

ILI9488_WriteParam(0x00); // SPI_READ_EN = 0

// 恢复高速写

SPI_SetSpeed(SPI1, 2); //MCLK/2

}

回复

使用道具

举报

tianchengchou

tianchengchou

当前离线

积分9

1

主题6

回帖9

积分

新手上路

新手上路, 积分 9, 距离下一级还需 40 积分

新手上路, 积分 9, 距离下一级还需 40 积分

积分9

发消息

27#

发表于 2025-7-7 19:53:42

|

只看该作者

caicaptain2 发表于 2020-8-19 13:37

唉,简单的SPI DMA传输,痛苦的调试了3天,才刚刚知道SPI必须回读一下子才行啊。。。

在确认单次DMA传 ...

我这里的SPI 设置为单线双向发送,直接把数据搬运到spi->DR寄存器中。能显示图片,但是颜色丢失了。找不到原因

回复

使用道具

举报

way2888

way2888

当前离线

积分97

3

主题88

回帖97

积分

初级会员

初级会员, 积分 97, 距离下一级还需 102 积分

初级会员, 积分 97, 距离下一级还需 102 积分

积分97

发消息

28#

发表于 2025-7-7 22:09:14

|

只看该作者

H7以前测过SPI不开DMA可以40mS刷一帧

回复

使用道具

举报

jiangyou233

jiangyou233

当前离线

积分132

7

主题111

回帖132

积分

初级会员

初级会员, 积分 132, 距离下一级还需 67 积分

初级会员, 积分 132, 距离下一级还需 67 积分

积分132

发消息

29#

发表于 2025-7-10 00:45:07

|

只看该作者

mark一下 以后研究

回复

使用道具

举报

相关画作

尚美Torsade戒指丨以旋爱致敬历史 以回转再造不凡
魔兽世界大牙齿哪里掉的多 魔兽世界大牙齿最多掉落在哪里介绍
万年村变身“貊貊家园”
365防伪码查询系统

万年村变身“貊貊家园”

📅 07-09 👁️ 3214