OpenEdv-开源电子网

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

STM32F103ZET6驱动3.5寸TFT方案求解!!

[复制链接]

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
发表于 2014-9-26 09:37:27 | 显示全部楼层 |阅读模式
5金钱
手里有块原子的开发板,现在想实现这样的功能:把20张高清的BMP的图片放到SD卡中,然后通过液晶屏(3.5寸,480*320,NT35310)显示。
希望能够达到的效果:图片切换就像手机的图片切换那样,而不是明显的拉窗帘!

本人很菜,不会操作系统,也不会UCGUI。

坛友说可以利用外部SRAM(IS62WV5126)配合搞定,小弟在这里迷惑了很久,不知道这块如何实现。
初定方案:SD卡的图片通过DMA送到CPU去解码,然后解码后的数据放到SRAM(但是SRAM只有1M,远远不够储存那些高清的BMP图啊),然后每次启动就把SRAM的数据刷到液晶??不知道这样行的通么?

还有一种方案就是利用LCD控制器去搞,大家有什么好的芯片可以推荐下么?价钱不是问题!

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

使用道具 举报

6

主题

123

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1281
金钱
1281
注册时间
2012-5-27
在线时间
200 小时
发表于 2014-9-26 12:33:01 | 显示全部楼层
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-26 15:33:23 | 显示全部楼层
用F429+SDRAM应该可以,F103~407SRAM过小,FSMC刷屏也太慢了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-26 23:06:06 | 显示全部楼层
回复【2楼】STM32F103:
---------------------------------
51216是1M字节。

另外,建议楼主考虑下SPI FLASH DMA到LCD。
这样,18M的速度,每秒钟2.25M字节,最快可以达到7帧的样子。不知道能不能满足你要求了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
 楼主| 发表于 2014-9-28 08:47:54 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,你的意思是先把BMP图片用Image—LCD软件解码,然后将解码的数据通过SPI写入到W25Q64,然后直接将W25Q64的数据放到DMA上送到LCD上扫描?
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-28 10:01:49 | 显示全部楼层
回复【5楼】zengan007:
---------------------------------
不用Image—LCD也可以,但是你要读取BMP文件头以判断色深和图片尺寸。也可以直接准备好合适分辨率和色深的图片,抛开文件头直接读取后面数据部分。
不过不过1秒7帧的速度应该达不到手机的那种流畅,只能说通过代码优化能够尽量减少视觉上的不流畅感觉
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
 楼主| 发表于 2014-9-28 16:14:29 | 显示全部楼层
老师,我现在的方法就是用Image—LCD对那些BMP图片进行解码,然后将解码之后的C文件放到SD卡中去,并用CPU去读取那些C文件,最后还是用CPU是扫描显示。在这里遇到一个问题,就是f_read读取那个C文件,读取的数据貌似总是有问题。 如果老师有空的话帮我看看呗,下面是源程序

SD-Flash.rar

3.61 MB, 下载次数: 147

回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-28 16:51:11 | 显示全部楼层
回复【7楼】zengan007:
---------------------------------
gImage_image1[]这个你最好定义好大小

[mw_shl_code=c,true]f_mount(0,&fs); res = f_open(&fdst,"PICTURE/2.c",FA_OPEN_EXISTING| FA_READ); //?ò????±? if(res==FR_OK) { LCD_ShowString(30,170,200,16,16,"Open TXT Success !"); } res = f_read( &fdst, gImage_image1,200, &br ); if(res==FR_OK) { LCD_ShowString(30,190,200,16,16,"Read TXT Success !"); imginfo=(HEADCOLOR*)gImage_image1; //???????????? srand(imginfo->h*imginfo->w); //?ú?????ú????×? image_display(0,0,(u8*)gImage_image1);//?????¨???·???????? } f_close(&fdst); [/mw_shl_code]
[mw_shl_code=c,true]res = f_read( &fdst, gImage_image1,200, &br );[/mw_shl_code]
这一句是说向gImage_image1中放入200字节数据,而下一句就是判断文件是否达到末尾。
你的图片文件只有200字节吗?
然后后面的随机数是随机一张图片吗?

如果你的图片信息不只200字节,
if(res==FR_OK)中的内容根本不会被执行就直接关闭文件。



回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
 楼主| 发表于 2014-9-28 16:59:11 | 显示全部楼层
老师,这个大小定义会影响么?我如果设置的和图片解码之后的数字一样,那个f_read就读取不成功,随便设置一个的话就没有什么影响啊 ,我设置500的时候左上角会刷出一点

回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-28 17:01:30 | 显示全部楼层
回复【9楼】zengan007:
---------------------------------
你只读取了200字节的图片数据
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
 楼主| 发表于 2014-9-28 17:15:56 | 显示全部楼层
回复【8楼】ricefat:
---------------------------------
我设500的时候,我用串口调试手打印出来的数据和原数据吻合
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
 楼主| 发表于 2014-9-28 17:17:56 | 显示全部楼层
回复【10楼】ricefat:
---------------------------------
我再试试看,谢谢老师那么神速而且仔细的回复!
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
 楼主| 发表于 2014-9-28 17:24:14 | 显示全部楼层
回复【8楼】ricefat:
---------------------------------
这是图片解码之后的数组,const unsigned char gImage_2[306248]  ,所以我这个gImage_image1数组设置是不可能和图片信息一样的。另外那个随机数我一点都不懂,不知道是干嘛用的,我都是移植原子的程序来的。
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-28 17:28:09 | 显示全部楼层
回复【13楼】zengan007:
---------------------------------
你应该先从SD卡直接读取生成的C文件并在屏幕上完整显示图片开始,有助于你了解FATFS的使用方法。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-28 23:54:13 | 显示全部楼层
回复【5楼】zengan007:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2014-4-3
在线时间
18 小时
发表于 2014-9-29 11:27:53 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
请教一下,我用了最高速SPI用F_read读取SD卡的内容,抓了波形以后,并无法到达你说的2.25M的速率,硬件SPI在传输一个字节以后会有个硬件等待时间,超过了传输1个字节的2倍。导致原来应该1.5M理论值实际只有500k。

我也尝试过模拟,但是模拟IO口在传输8个位的时候,一个for循环+位移操作的时间就比硬件时间还多了。也只能600K左右的效果(72M晶振,发一个位大约3个指令)。

显示480*320*2的标准全屏图片刷完都需要0.6S。
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-29 11:44:01 | 显示全部楼层
回复【16楼】dixdsqaid:
---------------------------------
SPI那部分是用中断的还是用while等待的?DMA用了吗?
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
 楼主| 发表于 2014-9-29 11:46:24 | 显示全部楼层
回复【16楼】dixdsqaid:
---------------------------------
大哥,你刷屏方式是读SD卡中BMP解码的C文件还是?
回复

使用道具 举报

9

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2014-4-3
在线时间
18 小时
发表于 2014-9-29 12:29:59 | 显示全部楼层
回复【17楼】ricefat:
---------------------------------
是的,while等待硬件标志位置位或者超时,DMA传输和内部传输都试过,我指的时间就是等待硬件标志位置位所需要的时间。

回复

使用道具 举报

9

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2014-4-3
在线时间
18 小时
发表于 2014-9-29 12:32:08 | 显示全部楼层
回复【18楼】zengan007:
---------------------------------
直接读取图片的头文件,解析头文件,就知道图片是什么格式,大小有多少,再进行读取图片内容显示,网上有软件帮你了解头文件各是什么。。具体忘了。

回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-29 13:42:41 | 显示全部楼层
回复【19楼】dixdsqaid:
---------------------------------
额 我做的工作没有你细致。只是觉得SPI太慢就换成了SDIO
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
 楼主| 发表于 2014-9-29 17:27:58 | 显示全部楼层
回复【20楼】dixdsqaid:
---------------------------------
能不能参考下你的刷图的程序啊?我是用CPU直接画点的,貌似不够快。
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-7-1
在线时间
28 小时
 楼主| 发表于 2014-9-29 17:30:03 | 显示全部楼层
回复【14楼】ricefat:
---------------------------------
我用f_read读取SD卡中C文件,那些数据是对的,我测了。不过我是存在CPU的内存中,所以数组只能到60000,离图片本身的大小还有很长的距离。后来不知道搞了 ,好纠结!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-29 21:11:03 | 显示全部楼层
回复【16楼】dixdsqaid:
---------------------------------
用DMA方式。你如果一个个字节读取,肯定达不到的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 20:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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