OpenEdv-开源电子网

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

STM32读取外部FLASH,彩屏刷新速度太慢怎么办

[复制链接]

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
发表于 2017-5-19 16:48:16 | 显示全部楼层 |阅读模式
4金钱
STM32F030读取外部FLASH,彩屏是八位数据线的,读取一张320*480的满屏图片需要三分多,请问应该怎么才能使刷图的速度快点?

最佳答案

查看完整内容[请看2#楼]

SPI_FLASH_BufferRead(Rx_Buffer, usjs, 255); 这个函数最后的255是读取的长度吧?其实你读2字节就可以了 不需要读255个字节
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-5-19 16:48:17 | 显示全部楼层
SPI_FLASH_BufferRead(Rx_Buffer, usjs, 255);
这个函数最后的255是读取的长度吧?其实你读2字节就可以了  不需要读255个字节
回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2107
金钱
2107
注册时间
2013-11-27
在线时间
519 小时
发表于 2017-5-19 17:45:49 | 显示全部楼层
确实很慢,只有这个速度 我之前也用030试过,放在单片机内部 应该会快点
回复

使用道具 举报

12

主题

336

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1576
金钱
1576
注册时间
2015-8-9
在线时间
625 小时
发表于 2017-5-19 17:59:57 | 显示全部楼层
换芯片。。。
回复

使用道具 举报

9

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2015-12-14
在线时间
50 小时
发表于 2017-5-20 14:04:15 | 显示全部楼层
我用的是128*128彩屏,从W25X16中提取图片,一张图1s就显示
Keep moving,to be NO.1!
回复

使用道具 举报

14

主题

50

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2016-10-28
在线时间
82 小时
发表于 2017-5-20 14:32:55 | 显示全部楼层
外扩一个SRAM,运行刷屏程序前,直接将图片数据读到SRAM,然后在从SRAM读数据刷屏,相当快!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-21 18:56:26 | 显示全部楼层
3分钟明显是思路不对了。  0
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-22 09:08:30 | 显示全部楼层
正点原子 发表于 2017-5-21 18:56
3分钟明显是思路不对了。  0

        for ( ucPage = 0; ucPage < 320; ucPage ++ )
        {
       
                for ( ucColumn = 0; ucColumn < 480; ucColumn ++ )
                {
                       
                        SPI_FLASH_BufferRead(Rx_Buffer, usjs, 255);//&#182;áè&#161;ía2&#191;í&#188;&#198;&#172;

                        red   = Rx_Buffer[usTemp+2];
                        green = Rx_Buffer[usTemp+1];
                        blue  = Rx_Buffer[usTemp];

                        LCD_DrawPoint_16Bit(RGB24TORGB16(red,green,blue));         
                        usTemp+=3;
                       
                        if(usjs+usTemp>462606)
                                {
                                        usTemp=usTemp;
                                        return ;
                                }
                       
                        if(usTemp==255)
                        {
                               
                       
                                usTemp=0;
                                usjs+=256;
                               
                        }
          }
        }
我就是这么读显的,不知道还可以怎么样了
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-22 09:09:37 | 显示全部楼层
        for ( ucPage = 0; ucPage < 320; ucPage ++ )
        {
       
                for ( ucColumn = 0; ucColumn < 480; ucColumn ++ )
                {
                       
                        SPI_FLASH_BufferRead(Rx_Buffer, usjs, 255);//&#182;áè&#161;ía2&#191;í&#188;&#198;&#172;

                        red   = Rx_Buffer[usTemp+2];
                        green = Rx_Buffer[usTemp+1];
                        blue  = Rx_Buffer[usTemp];

                        LCD_DrawPoint_16Bit(RGB24TORGB16(red,green,blue));         
                        usTemp+=3;
                       
                        if(usjs+usTemp>462606)
                                {
                                        usTemp=usTemp;
                                        return ;
                                }
                       
                        if(usTemp==255)
                        {
                               
                       
                                usTemp=0;
                                usjs+=256;
                               
                        }
          }
        }
这个就是我的读显程序和想法,不知道应该怎么办
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-22 09:10:33 | 显示全部楼层
Jokyfjk 发表于 2017-5-20 14:04
我用的是128*128彩屏,从W25X16中提取图片,一张图1s就显示

我也是这个FLASH,但我这个怎么就那么慢呢,您这个是怎么做的
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-22 09:26:28 | 显示全部楼层
通过数组放在ram里会快些~
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-22 10:01:33 | 显示全部楼层
void LCD_DrawPoint_16Bit(uint16_t color)
{
#if LCD_USE8BIT_MODEL==1
        LCD_CS_CLR;
        LCD_RD_SET;
        LCD_RS_SET;//D′μ&#216;&#214;·           
        DATAOUT(color>>8);       
        LCD_WR_CLR;
        LCD_WR_SET;       
        DATAOUT(color);       
        LCD_WR_CLR;
        LCD_WR_SET;         
        LCD_CS_SET;
#else
        LCD_WR_DATA(color);
#endif
}
这是八位数据线显示十六位数据的函数
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-22 10:20:35 | 显示全部楼层
wmaxwell 发表于 2017-5-22 10:13
SPI_FLASH_BufferRead(Rx_Buffer, usjs, 255);
这个函数最后的255是读取的长度吧?其实你读2字节就可以了  ...

三个字节经过转换成为一个16位的颜色像素,读两个是什么意思?
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-5-22 10:22:16 | 显示全部楼层
庞然 发表于 2017-5-22 10:20
三个字节经过转换成为一个16位的颜色像素,读两个是什么意思?

那就读3字节啊  255字节太多了!
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-22 10:45:51 | 显示全部楼层
wmaxwell 发表于 2017-5-22 10:22
那就读3字节啊  255字节太多了!

哦哦 ,我去试试
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-22 11:41:50 | 显示全部楼层
wmaxwell 发表于 2017-5-22 10:22
那就读3字节啊  255字节太多了!

现在需要不到十秒钟,谢谢你:
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-22 11:44:13 | 显示全部楼层
wmaxwell 发表于 2017-5-19 16:48
SPI_FLASH_BufferRead(Rx_Buffer, usjs, 255);
这个函数最后的255是读取的长度吧?其实你读2字节就可以了  ...

请问在这个基础上还可以提升速度么,基于芯片和外部FLASH不变的情况下
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-5-22 13:11:08 | 显示全部楼层
庞然 发表于 2017-5-22 11:44
请问在这个基础上还可以提升速度么,基于芯片和外部FLASH不变的情况下

1.16bit两字节就能存储,从这个角度可以优化下算法
2.函数可以精简下,比如用宏代替一些函数
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-23 09:29:15 | 显示全部楼层
wmaxwell 发表于 2017-5-22 13:11
1.16bit两字节就能存储,从这个角度可以优化下算法
2.函数可以精简下,比如用宏代替一些函数

恩,多谢了,我思考思考
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-24 15:33:54 | 显示全部楼层
wmaxwell 发表于 2017-5-22 10:22
那就读3字节啊  255字节太多了!

我现在做到6S刷新一个图片,可看起来还是太慢,有人建议调用DMA,看半天没看明白,你看这个方法可行么?应该怎么做啊
回复

使用道具 举报

3

主题

33

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2017-1-25
在线时间
38 小时
发表于 2017-5-24 15:38:20 | 显示全部楼层
3分钟明显是思路不对了.
可以尝试用dma?
看看我那个flappybird的帖子,里面有关于刷屏的高速套路
回复

使用道具 举报

4

主题

20

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2017-5-17
在线时间
9 小时
 楼主| 发表于 2017-5-24 16:12:44 | 显示全部楼层
posystorage 发表于 2017-5-24 15:38
3分钟明显是思路不对了.
可以尝试用dma?
看看我那个flappybird的帖子,里面有关于刷屏的高速套路

看了,您这个直接给我干蒙了,您有没有单纯利用DMA存取外部FLASH的程序啊,看这个更乱了,还是初学
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-21 00:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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