打印
[STM32F1]

2.8寸240*320屏幕用IO口驱动刷屏慢,怎么才能加快刷屏速度?

[复制链接]
8051|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
j1755659290|  楼主 | 2014-5-29 00:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IO, pi, GPIO, gp, ni
本帖最后由 j1755659290 于 2014-5-29 01:19 编辑

2.8寸240*320的屏幕
我用的是STM32RCT的板子,所以只能用IO口驱动液晶屏,IO口配置50MHz,但是感觉刷屏速度很慢,从一个颜色刷到另一个颜色我记了下时间,需要0.8秒左右。哦,对了顺便说下我的程序是在ucos下跑的,板子的晶振是8M,运行时RCC寄存器的值是RCC->CR:0x3035483、CC->CFGR:0x1d040a 。
请问有什么方法可以加快找个速度么?
大家写的程序刷屏需要多久啊?

void LCD_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    /* Enable GPIOD and GPIOE clocks */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);  

    GPIO_InitStructure.GPIO_Pin = 0xff00;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = 0x0fff;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}

写数据函数
void write_data(unchar i,unchar j)
{
    uint16_t t;

    Clr_Cs;
    Set_Rs;
    Set_nRd;

    t = GPIO_ReadOutputData(GPIOB);
    t = t & 0x00FF;
    t = t | (i << 8);
    GPIO_Write(GPIOB, t);

    t = GPIO_ReadOutputData(GPIOC);
    t = t & 0xFF00;
    t = t | j;
    GPIO_Write(GPIOC, t);

    Clr_nWr;
    Set_nWr;
    Set_Cs;
}

刷屏函数
void display_green(void)
{
    unchar j;
    unint i;
    for(i=0;i<320;i++)
    {
        for(j=0;j<240;j++)
        {
            write_data(0x07,0xc0);
        }
    }
}


沙发
boyie| | 2014-5-29 08:41 | 只看该作者
你把写函数那么多行精简到几行速度就快了, 别用库函数。

使用特权

评论回复
板凳
mmuuss586| | 2014-5-29 08:53 | 只看该作者
少用库函数,写寄存器;
也可以超频啊,不过不建议

使用特权

评论回复
地板
icecut| | 2014-5-29 10:11 | 只看该作者
肯定慢
1.代码仿真时序,慢.受cpu频率影响.
2.使用库函数代码量大,更慢
3.全屏刷新慢...局部刷新块

使用特权

评论回复
5
j1755659290|  楼主 | 2014-5-30 00:13 | 只看该作者
boyie 发表于 2014-5-29 08:41
你把写函数那么多行精简到几行速度就快了, 别用库函数。

嗯   现在改成操作寄存器,刷屏还是需要80ms左右,这个值正常吗?能在快点吗? 80ms的刷屏速度肉眼还是可以分辨出来的

使用特权

评论回复
6
j1755659290|  楼主 | 2014-5-30 00:13 | 只看该作者
mmuuss586 发表于 2014-5-29 08:53
少用库函数,写寄存器;
也可以超频啊,不过不建议

嗯   现在改成操作寄存器,刷屏还是需要80ms左右,这个值正常吗?能在快点吗? 80ms的刷屏速度肉眼还是可以分辨出来的

使用特权

评论回复
7
j1755659290|  楼主 | 2014-5-30 00:15 | 只看该作者
icecut 发表于 2014-5-29 10:11
肯定慢
1.代码仿真时序,慢.受cpu频率影响.
2.使用库函数代码量大,更慢

嗯   现在改成操作寄存器,刷屏还是需要80ms左右,这个值正常吗?能在快点吗? 80ms的刷屏速度肉眼还是可以分辨出来的

局部刷新感觉是后话了,实际应用时或多或少需要全屏刷的

使用特权

评论回复
8
j1755659290|  楼主 | 2014-5-30 00:16 | 只看该作者
MicroLCD 发表于 2014-5-29 12:32
用SPI接口的TFT显示屏吧!本身TFT支持30MHZ以上的速率~

为什么SPI的串行速度比16位并行要快啊? SPI的屏幕刷新率能达到多少hz?

使用特权

评论回复
9
王紫豪| | 2014-5-30 01:46 | 只看该作者
描一个点搞了一堆代码(write_data),肯定会慢的。

使用特权

评论回复
10
gxliu08| | 2014-5-30 08:39 | 只看该作者
j1755659290 发表于 2014-5-30 00:16
为什么SPI的串行速度比16位并行要快啊? SPI的屏幕刷新率能达到多少hz?

STM32的SPI本身就有速度限制,好像也就18MHz

使用特权

评论回复
11
icecut| | 2014-5-30 09:41 | 只看该作者
j1755659290 发表于 2014-5-30 00:15
嗯   现在改成操作寄存器,刷屏还是需要80ms左右,这个值正常吗?能在快点吗? 80ms的刷屏速度肉眼还是可 ...

一屏320*240=9w点=180k字节.
25帧的话40ms刷完,180k/40ms = 4.5MB/s对应spi速度36Mbps
60Fps的话13ms刷完,180k/13ms=14MB/S
你cpu72M,那么5条指令之内发出一个点就能保证60fps.必须是如果有跳转,arm的分支预测可能浪费性能

使用特权

评论回复
12
hexenzhou| | 2014-5-31 10:54 | 只看该作者
改成FSMC驱动吧,这个会快很多。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

69

帖子

0

粉丝