查看: 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一下 以后研究
回复
使用道具
举报