搜索
bottom↓
回复: 53

无聊中,用STM32F030F4P6+ILI9341+SPIFlash刷个屏

  [复制链接]

出0入0汤圆

发表于 2016-6-27 00:23:28 | 显示全部楼层 |阅读模式
今天翻出买来就一直吃灰的一个STM32F030小板子玩了一下。
接了个SPI flash和一个ILI9341屏幕,存了点图片,又来刷屏了。。。

STM32F030F4P6只有一个SPI,flash和LCD都接在这个SPI上。LCD的MISO没接。
CPU运行在40MHz,这样SPI时钟可以设置到10MHz,正好到ILI9341能接受的最大频率了。
ILI9341和Flash片选都选中,这样读Flash和写LCD可以同时进行了。然后用DMA把刚从flash读出的数据直接写到ILI9341里。
图片是RGB565的,分辨率128×128,8MB的flash只能存256张,刷的速度大概是38fps。6秒多就没了。

http://v.youku.com/v_show/id_XMTYyMTk2NDc4OA==.html

代码:
本来想一帧一帧刷,控制到24fps的,后来感觉好像也没多少意思,就开Circular mode了,连续刷。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2016-6-27 07:45:54 | 显示全部楼层
这个效果不错啊

出0入90汤圆

发表于 2016-6-27 11:02:29 | 显示全部楼层
主要是DMA读SPI FLASH,这个挺有用;我之前做的一个emwin的东西,图片存在spi flash里面读取太慢了,后来没办法升级为1024KB的STM32F407VG才搞定

出0入4汤圆

发表于 2016-6-27 11:08:10 | 显示全部楼层
这个如果有足够大的spiflash  就可以播视频了吗

spi flash换成spi sd卡可以不

出0入0汤圆

发表于 2016-6-27 22:24:59 | 显示全部楼层
huarana 发表于 2016-6-27 11:08
这个如果有足够大的spiflash  就可以播视频了吗

spi flash换成spi sd卡可以不

sd卡太慢

出0入0汤圆

发表于 2016-6-29 10:30:40 | 显示全部楼层
撸主,请教你的ili9341.c文件的出处,来自哪个例程?

出20入118汤圆

发表于 2016-6-29 11:18:36 来自手机 | 显示全部楼层
好东西收藏了

出0入0汤圆

发表于 2016-6-29 11:40:30 | 显示全部楼层
放小电影啊

出0入0汤圆

 楼主| 发表于 2016-6-29 12:16:32 | 显示全部楼层
mowin 发表于 2016-6-29 10:30
撸主,请教你的ili9341.c文件的出处,来自哪个例程?

STM32Cube\Repository\STM32Cube_FW_F4_V1.11.0\Drivers\BSP\Components\ili9341 再加上网上搜的,东拼西凑搞出来的

出0入0汤圆

发表于 2016-6-29 12:33:38 | 显示全部楼层
谢谢共享

出0入0汤圆

发表于 2016-6-29 12:36:12 | 显示全部楼层
caixiuwen 发表于 2016-6-29 12:16
STM32Cube\Repository\STM32Cube_FW_F4_V1.11.0\Drivers\BSP\Components\ili9341 再加上网上搜的,东拼西 ...

多谢分享,准备借用一下这个驱动,自己找很难找到

出0入4汤圆

发表于 2016-7-4 10:28:33 来自手机 | 显示全部楼层
mark,学习一下

出0入362汤圆

发表于 2016-7-4 15:47:28 | 显示全部楼层

上个并行flash? MT29F1G08之类?就是占用管脚多了点。。。

出0入0汤圆

发表于 2016-7-4 22:44:43 来自手机 | 显示全部楼层
手藏了,谢谢

出0入0汤圆

发表于 2016-7-5 15:20:04 | 显示全部楼层
楼主,你是怎么样把图片一张张存进FLASH的?

出0入0汤圆

发表于 2016-7-5 18:15:15 来自手机 | 显示全部楼层
楼上的问题我也比较好奇

出0入0汤圆

发表于 2016-7-5 18:34:14 | 显示全部楼层
采用SD卡SDIO模式,不要用SPI,速度更快,应该能满足视频啊

出0入0汤圆

 楼主| 发表于 2016-7-6 09:48:43 | 显示全部楼层

一般sd卡是足够快的

出0入0汤圆

 楼主| 发表于 2016-7-6 10:04:48 | 显示全部楼层
splfsp 发表于 2016-7-5 15:20
楼主,你是怎么样把图片一张张存进FLASH的?

用一个STM32F103接这个SPI flash,做了一个USB mass storage。然后用winhex把数据写入。

出0入0汤圆

 楼主| 发表于 2016-7-6 10:07:30 | 显示全部楼层
lr120363092 发表于 2016-7-5 18:34
采用SD卡SDIO模式,不要用SPI,速度更快,应该能满足视频啊

我也玩过SDIO的,刷QVGA的屏可以到60~70fps http://www.amobbs.com/thread-5597206-1-1.html

出0入0汤圆

发表于 2016-7-6 10:12:01 | 显示全部楼层
存俩开机动画就没地方了。

出0入0汤圆

发表于 2016-7-6 21:08:26 | 显示全部楼层
caixiuwen 发表于 2016-7-6 09:48
一般sd卡是足够快的

SPI是很慢的 ST的SDIO兼容性非常差 可以说非常不适合中国国内的tf卡或者sd卡市场

出0入4汤圆

发表于 2017-5-31 23:26:18 | 显示全部楼层
caixiuwen 发表于 2016-7-6 10:04
用一个STM32F103接这个SPI flash,做了一个USB mass storage。然后用winhex把数据写入。 ...

请问 Circular mode 怎么开的?

下面两条语句就可以再8位和16位之间自由切换么,我一直以为是spi初始化才能设置。难道是你给几位数据,他就发几位的么?
*(__IO uint16_t*)&SPI1 -> DR = (uint16_t)0x0000;
*(__IO uint8_t*)&SPI1 -> DR = (uint8_t)0x00;

不是很理解你的程序。就是先片选flash,发03,00,00,00加0000是啥意思?地址?然后片选LCD,开DMA. 这个是每个字节读出紧跟着传到LCD,还是128*128满了就传给LCD?
还是硬件上LCD的DATA IN接flash的data out?

出0入0汤圆

发表于 2017-6-1 22:47:06 | 显示全部楼层
这个M0的内核能做到这样实在不错!

出0入8汤圆

发表于 2017-6-2 09:33:45 | 显示全部楼层
TongIC 发表于 2017-6-1 22:47
这个M0的内核能做到这样实在不错!

这是DMA的功劳。

出0入0汤圆

 楼主| 发表于 2017-6-3 10:23:43 | 显示全部楼层
gmyu 发表于 2017-5-31 23:26
请问 Circular mode 怎么开的?

下面两条语句就可以再8位和16位之间自由切换么,我一直以为是spi初始化 ...

DMA的circular mode,就在DMA寄存器里设置一个bit就能开。
这个SPI是带FIFO的,16bit的写入,就是写入两个字节到FIFO里。

03是读命令,后面3个00是地址,最后一个0000是用来产生16个时钟,把头两个字节读出来。这时候头两个字节已经在接收FIFO里了,然后片选LCD,开DMA,图片数据就发给LCD了。一次传两字节。硬件上所有MOSI连一起,MISO连一起。LCD的MISO没有连接。

出0入4汤圆

发表于 2017-6-3 11:04:25 | 显示全部楼层
基本明白了,只是没看到你的8位和16位切换命令,不是要改CR的11位么,你的DMA size是多少?

我昨天完了一天ILI9225,这个带RS(数据/命令脚)的,所以可以用你的方法,之前的ili9325每次要发三个字节,所以玩不了。

我用F103跑到了36M,没啥问题,如果设置到你的128*128估计很流畅。

刚刚发现一个F207的板子,上面有winbond的25Q160,应该可以试试你的方法了。

我在想,发所有图片是不是都可以用你的方法,就是要每次初始化flash地址和LCD窗口,关闭circular mode。

出0入4汤圆

发表于 2017-6-3 11:06:14 | 显示全部楼层
F207的三个spi居然只有spi1能设置到30M,其他的即使两分频也只有15M。主频都到120M了。

出0入4汤圆

发表于 2017-6-6 18:11:15 | 显示全部楼层
caixiuwen 发表于 2017-6-3 10:23
DMA的circular mode,就在DMA寄存器里设置一个bit就能开。
这个SPI是带FIFO的,16bit的写入,就是写入两 ...

  uint32_t Direction;            /*!< Specifies if the data will be transferred from memory to peripheral,
                                      from memory to memory or from peripheral to memory.
                                      This parameter can be a value of @ref DMA_Data_transfer_direction              */
我用的cubemx,只能是外围到内存,内存到外围,内存到内存的设置,你这个是外围到外围,的确新奇, 是不是因为SPI的特殊性,输入输出都是在DR。 看SPI的介绍说RX只能在通道2,TX只能在3。你这搞到一个通道在cubemx里面怎么设置的?

    DMA1_Channel3 -> CNDTR = 128 * 128;
    DMA1_Channel3 -> CMAR = (uint32_t)&SPI1 -> DR;
    DMA1_Channel3 -> CPAR = (uint32_t)&SPI1 -> DR;
    DMA1_Channel3 -> CCR =  DMA_CCR_PSIZE_0 |
                            DMA_CCR_MSIZE_0 |
                            DMA_CCR_CIRC    |
                            DMA_CCR_EN;

不知哪位高手能作答一下。LZ的这种方法刷图片确实快好多。

出0入0汤圆

发表于 2017-6-8 11:11:58 | 显示全部楼层
gmyu 发表于 2017-6-6 18:11
uint32_t Direction;            /*!< Specifies if the data will be transferred from memory to per ...

快了多少?期待对比视频

出0入4汤圆

发表于 2017-6-8 12:06:57 | 显示全部楼层
TongIC 发表于 2017-6-8 11:11
快了多少?期待对比视频

我没搞通啊

出0入0汤圆

发表于 2018-3-7 15:26:36 | 显示全部楼层
请问楼主,flash和spi tft的接线是怎样连接啊  flash需要读写,cpu的miso和mosi,clk,cs_flash都要接到flash上吧,tft的spi不需要读,所以cpu的miso不需要接,就接了mosi,clk,cs_tft,是这样吗?不知道我理解得对不对,请指导

出0入0汤圆

 楼主| 发表于 2018-3-8 15:20:25 | 显示全部楼层
rita 发表于 2018-3-7 15:26
请问楼主,flash和spi tft的接线是怎样连接啊  flash需要读写,cpu的miso和mosi,clk,cs_flash都要接到flash ...

是这样的。

出0入0汤圆

发表于 2018-3-8 16:05:33 | 显示全部楼层

谢谢兄弟

出0入0汤圆

发表于 2018-7-3 12:04:39 | 显示全部楼层
caixiuwen,你好,就这个项目上,不知道你用了哪款SPI FLASH?

出0入0汤圆

发表于 2018-7-3 12:30:29 | 显示全部楼层
这个效果不错

出0入0汤圆

 楼主| 发表于 2018-7-3 13:17:05 | 显示全部楼层
zqy517 发表于 2018-7-3 12:04
caixiuwen,你好,就这个项目上,不知道你用了哪款SPI FLASH?

好像是MX25L64。应该各种25xxx的SPI flash都可以。

出0入0汤圆

发表于 2018-7-3 13:23:48 | 显示全部楼层
caixiuwen 发表于 2018-7-3 13:17
好像是MX25L64。应该各种25xxx的SPI flash都可以。

谢谢你了,好的,很不错的思路,学习了!

出0入0汤圆

发表于 2018-7-28 13:46:23 | 显示全部楼层
caixiuwen 发表于 2017-6-3 10:23
DMA的circular mode,就在DMA寄存器里设置一个bit就能开。
这个SPI是带FIFO的,16bit的写入,就是写入两 ...

再次请教下你,关于硬件接线方面的疑问,“硬件上所有MOSI连一起,MISO连一起。LCD的MISO没有连接。”,我的理解应该是LCD的输入数据(mosi)应该来源spi FLASH的输出管脚(miso),不知道对不,再次打扰你了,目前有一个项目需要播放视频,所以想用你这个方式来做。

出0入0汤圆

 楼主| 发表于 2018-7-31 11:06:30 | 显示全部楼层
zqy517 发表于 2018-7-28 13:46
再次请教下你,关于硬件接线方面的疑问,“硬件上所有MOSI连一起,MISO连一起。LCD的MISO没有连接。”, ...

LCD的MOSI并没有直接和flash的MISO相连。如果直接连的话,STM32就没法初始化LCD了。

出0入0汤圆

发表于 2018-7-31 18:15:00 | 显示全部楼层
caixiuwen 发表于 2018-7-31 11:06
LCD的MOSI并没有直接和flash的MISO相连。如果直接连的话,STM32就没法初始化LCD了。 ...

恩,是的,后来我也想到了这点了,难道SPI FLASH的mosi 可以配置成对外输出数据吗?不然LCD的输入数据从何而来呢?没有别的意思哈,只是有点不明白这点,打扰你多次了,谢谢指教!

出0入0汤圆

 楼主| 发表于 2018-7-31 19:19:26 | 显示全部楼层
zqy517 发表于 2018-7-31 18:15
恩,是的,后来我也想到了这点了,难道SPI FLASH的mosi 可以配置成对外输出数据吗?不然LCD的输入数据从 ...

Flash那个MOSI并不能配置。Flash的数据还是从MISO出来的,然后到STM32的SPI里。在STM32里用的DMA把SPI收到的数据又通过这个SPI发出来了。

出0入0汤圆

发表于 2018-7-31 23:00:25 | 显示全部楼层
caixiuwen 发表于 2018-7-31 19:19
Flash那个MOSI并不能配置。Flash的数据还是从MISO出来的,然后到STM32的SPI里。在STM32里用的DMA把SPI收 ...

非常谢谢你,明白了。

出0入0汤圆

发表于 2018-9-7 14:38:24 | 显示全部楼层
多谢分享

出0入0汤圆

发表于 2018-9-10 10:58:57 | 显示全部楼层
大侠您好,能否加下我的Q(200885811),有个产品要做。

出0入0汤圆

发表于 2018-9-10 10:59:16 | 显示全部楼层
本帖最后由 kxhui88 于 2018-9-10 11:00 编辑

大侠您好,能否加下我的Q(200885811),有个产品要做。(请问发重复了 咋删除呢)

出0入0汤圆

发表于 2019-1-25 09:22:51 | 显示全部楼层
学习,谢谢!!!

出0入0汤圆

发表于 2019-1-27 17:44:55 | 显示全部楼层
不错,学些了,谢谢楼主分享!~

出0入0汤圆

发表于 2019-1-27 20:05:52 | 显示全部楼层
效果不错

出0入0汤圆

发表于 2019-1-28 00:53:03 | 显示全部楼层
谢谢楼主分享,正好学习一下

出675入8汤圆

发表于 2019-10-20 21:45:44 来自手机 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2019-10-20 23:26:14 | 显示全部楼层
谢谢楼主分享

出0入8汤圆

发表于 2019-10-20 23:58:57 | 显示全部楼层

谢谢楼主分享
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 21:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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