OpenEdv-开源电子网

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

TFT刷屏速度问题

[复制链接]

8

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2012-10-18
在线时间
7 小时
发表于 2012-12-22 15:24:13 | 显示全部楼层 |阅读模式
    驱动芯片是9341的,看了看手册,就直接用IO模拟8080并口驱动了,没有用FSMC功能,
初始化时序是直接copy光盘里面的源码的,然后我写了个画点的函数,用for循环全部点刷完一遍,
发现需要大于1S的时间才能刷完,但是光盘例程却很快,几乎肉眼不能分辨,一瞬间就完成了,
想问一下只有用FSMC才会达到这样的速度吗?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-22 19:35:46 | 显示全部楼层
回复【楼主位】散装805:
---------------------------------
GPIO刷也很快啊,关键是你的IO怎么模拟的?用的哪组IO?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2012-12-22 20:22:18 | 显示全部楼层
你可以看看用51单片机画图形照样很快,如果你在循环中加了延时肯定会很慢。
目前在玩STM32,BBB,RPi
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-12-22 20:38:36 | 显示全部楼层
http://www.openedv.com/posts/list/6916.htm
https://github.com/roxma
回复 支持 反对

使用道具 举报

8

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2012-10-18
在线时间
7 小时
 楼主| 发表于 2012-12-22 21:21:18 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我似乎知道原因了,我用的是战舰版,连接LCD模块的IO是不按顺序的(DB1~DB8,DB10~DB17对应的GPIOD和GPIOE是不连续的),
所以我是一位一位的给它赋值,等全部完了才能把WR拉高,估计是慢在这里,不知道还可以怎么写?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-22 23:56:55 | 显示全部楼层
用fsmc吧...否则就是这个速度了,呵呵.你这还不如用一组IO的...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2012-10-18
在线时间
7 小时
 楼主| 发表于 2012-12-23 10:46:38 | 显示全部楼层
因为不想改硬件,所以就那样用了,想不到慢成这样的,
看来只能FSMC了
回复 支持 反对

使用道具 举报

12

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
567
金钱
567
注册时间
2014-12-19
在线时间
139 小时
发表于 2015-3-4 16:32:50 | 显示全部楼层
楼主,我也是用IO口驱动9341,尝试用了16位数据线和高8位数据线,可屏幕都是黑屏不工作呀,求你指点下,能把你的代码共享下么?
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-7-21
在线时间
0 小时
发表于 2015-7-21 16:07:27 | 显示全部楼层
回复【8楼】尤尤:
你好,请问你的这个问题解决了吗?我现在和你一样也是用IO口驱动9341,屏幕就是背光亮了, 没有其他反应,求大神指导一下。。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-7-21
在线时间
0 小时
发表于 2015-7-21 16:09:28 | 显示全部楼层
void DataToWrite(u16 data)     //核心函数,16位通讯方式
{
//u16 temp;  //IO口 的数据接收高低位反了
u16 temp1 = 0;
temp1 |= (data&0x00ff)<<8;
temp1 |= (data&0xff00)>>8;
//temp = GPIO_ReadOutputData(GPIOD);
//GPIO_Write(GPIOD, (data>>8)|(temp&0xff00));   //高8位数据
GPIO_Write(GPIOD, temp1);   //低8位数据
//GPIOD->ODR = temp1;
}

//============================================================================
// It will be necessary to wait 120msec after sending Sleep Out command 
//(when in Sleep In Mode) before Sleep In command can be sent.
//=============================================================================

void ILI9341_WR_COMD(u16 comm)//write command
{    
 LCD_RS_LO();
 LCD_RD_HI();
 LCD_CS_LO();
 LCD_WR_LO();
 DataToWrite(comm);
 LCD_WR_HI();
 LCD_CS_HI();
}
void ILI9341_WR_Parameter(u16 data)//write arameter
{    
LCD_RD_HI();
LCD_RS_HI();
LCD_CS_LO();
LCD_WR_LO();
DataToWrite(data);
LCD_WR_HI();
LCD_CS_HI();
}

void LCD_ILI9341_Init(void) 

// VCI=2.8V 
// LCDBL_EN();
//************* Reset LCD Driver ****************// 
LCD_RST_HI();//硬件复位
delay_us(1*8000);// Delay 1ms 
                
LCD_RST_LO();
delay_us(10*8000); // Delay 10ms // This delay time is necessary 

LCD_RST_HI();
delay_us(120*8000); // Delay 120 ms   
 
//************* Start Initial Sequence **********// 
ILI9341_WR_COMD(0xCF);  
ILI9341_WR_Parameter (0x00); 
//ILI9341_WR_Parameter (0x8B); 
ILI9341_WR_Parameter (0x81); 
ILI9341_WR_Parameter (0X30); 
 
ILI9341_WR_COMD(0xED);  
//ILI9341_WR_Parameter (0x67); 
ILI9341_WR_Parameter (0x64); 
ILI9341_WR_Parameter (0x03); 
ILI9341_WR_Parameter (0X12); 
ILI9341_WR_Parameter (0X81); 
 
ILI9341_WR_COMD(0xE8);  
ILI9341_WR_Parameter(0x85); 
ILI9341_WR_Parameter (0x10); 
ILI9341_WR_Parameter (0x7A); 
 
ILI9341_WR_COMD(0xCB);  
ILI9341_WR_Parameter (0x39); 
ILI9341_WR_Parameter (0x2C); 
ILI9341_WR_Parameter (0x00); 
ILI9341_WR_Parameter (0x34); 
ILI9341_WR_Parameter (0x02); 
 
ILI9341_WR_COMD(0xF7);  
ILI9341_WR_Parameter (0x20); 
 
ILI9341_WR_COMD(0xEA);  
ILI9341_WR_Parameter (0x00); 
ILI9341_WR_Parameter (0x00); 
 
ILI9341_WR_COMD(0xC0);    //Power control 
//ILI9341_WR_Parameter (0x1B);   //VRH[5:0] 
ILI9341_WR_Parameter (0x2E);   //VRH[5:0] 
 
ILI9341_WR_COMD(0xC1);    //Power control 
//ILI9341_WR_Parameter (0x10);   //SAP[2:0];BT[3:0] 
ILI9341_WR_Parameter (0x12);   //SAP[2:0];BT[3:0] 
 
ILI9341_WR_COMD(0xC5);    //VCM control 
ILI9341_WR_Parameter (0x3F); 
ILI9341_WR_Parameter (0x3C); 
 
ILI9341_WR_COMD(0xC7);    //VCM control2 
//ILI9341_WR_Parameter (0XB7); 
ILI9341_WR_Parameter (0X90); 

/***************************
***************************/
ILI9341_WR_COMD (0X2A); 
ILI9341_WR_Parameter (0X00); 
ILI9341_WR_Parameter (0X00); 
ILI9341_WR_Parameter (0X01); 
ILI9341_WR_Parameter (0X3F); 

ILI9341_WR_COMD (0X2B); 
ILI9341_WR_Parameter (0X00); 
ILI9341_WR_Parameter (0X00); 
ILI9341_WR_Parameter (0X00); 
ILI9341_WR_Parameter (0XEF); 

 
ILI9341_WR_COMD(0x36);    // Memory Access Control 
//ILI9341_WR_Parameter (0x08); 
ILI9341_WR_Parameter (0xA8); 

 
ILI9341_WR_COMD(0x3A);   
ILI9341_WR_Parameter (0x55); 

ILI9341_WR_COMD(0xB1);   
ILI9341_WR_Parameter (0x00);   
ILI9341_WR_Parameter (0x1B); 
 
ILI9341_WR_COMD(0xB6);    // Display Function Control 
ILI9341_WR_Parameter (0x0A); 
ILI9341_WR_Parameter (0xA2); 


ILI9341_WR_COMD(0xF2);    // 3Gamma Function Disable 
ILI9341_WR_Parameter (0x00); 
 
ILI9341_WR_COMD(0x26);    //Gamma curve selected 
ILI9341_WR_Parameter (0x01); 
 
ILI9341_WR_COMD(0xE0);    //Set Gamma 
ILI9341_WR_Parameter (0x0F); 
ILI9341_WR_Parameter (0x2A); 
ILI9341_WR_Parameter (0x28); 
ILI9341_WR_Parameter (0x08); 
ILI9341_WR_Parameter (0x0E); 
ILI9341_WR_Parameter (0x08); 
ILI9341_WR_Parameter(0x54); 
ILI9341_WR_Parameter(0XA9); 
ILI9341_WR_Parameter (0x43); 
ILI9341_WR_Parameter(0x0A); 
ILI9341_WR_Parameter (0x0F); 
ILI9341_WR_Parameter (0x00); 
ILI9341_WR_Parameter (0x00); 
ILI9341_WR_Parameter (0x00); 
ILI9341_WR_Parameter (0x00); 
 
ILI9341_WR_COMD(0XE1);    //Set Gamma 
ILI9341_WR_Parameter (0x00); 
ILI9341_WR_Parameter (0x15); 
ILI9341_WR_Parameter (0x17); 
ILI9341_WR_Parameter (0x07); 
ILI9341_WR_Parameter (0x11); 
ILI9341_WR_Parameter (0x06); 
ILI9341_WR_Parameter (0x2B); 
ILI9341_WR_Parameter (0x56); 
ILI9341_WR_Parameter (0x3C); 
ILI9341_WR_Parameter (0x05); 
ILI9341_WR_Parameter (0x10); 
ILI9341_WR_Parameter (0x0F); 
ILI9341_WR_Parameter (0x3F); 
ILI9341_WR_Parameter (0x3F); 
ILI9341_WR_Parameter (0x0F); 
 
ILI9341_WR_COMD(0x11);    //Exit Sleep 
delay_us(120*8000);
ILI9341_WR_COMD(0x29);    //Display on 
delay_us(10*8000);
ILI9341_WR_COMD(0x2c);


void LCD_WR_REG(u16 Index,u16 CongfigTemp)
{
LCD_RS_LO();  //写地址
LCD_CS_LO(); 
LCD_RD_HI();
LCD_WR_LO();
DataToWrite(Index);
LCD_WR_HI();
LCD_WR_LO();
LCD_RS_HI();
DataToWrite(CongfigTemp);       
//LCD_WR_LO();
LCD_WR_HI();
LCD_CS_HI();
}
void LCD_SetCursor(uint16_t x, uint16_t y)
{
ILI9341_WR_COMD(0X2A);   /* 设置X坐标 */
ILI9341_WR_Parameter(x>>8);  /* 先高8位,然后低8位 */
ILI9341_WR_Parameter(x&0xff);  /* 设置起始点和结束点*/
ILI9341_WR_Parameter(x>>8);
ILI9341_WR_Parameter(x&0xff);

    ILI9341_WR_COMD(0X2B);       /* 设置Y坐标*/
ILI9341_WR_Parameter(y>>8);
ILI9341_WR_Parameter(y&0xff);
ILI9341_WR_Parameter(y>>8);
ILI9341_WR_Parameter(y&0xff);      
}
void Lcd_WR_Start(void)
{
LCD_CS_LO();
LCD_RS_LO();
LCD_RD_HI();
LCD_WR_LO();
DataToWrite(0x0022);
// LCD_WR_LO();
LCD_WR_HI();
LCD_RS_HI();
}

void Lcd_Clear(u16 Color)
{
u32 temp;
  
LCD_SetCursor(0x00, 0x0000);
LCD_WR_REG(0x0050,0x00);//水平 GRAM起始位置
LCD_WR_REG(0x0051,239);//水平GRAM终止位置
LCD_WR_REG(0x0052,0x00);//垂直GRAM起始位置
LCD_WR_REG(0x0053,319);//垂直GRAM终止位置   
Lcd_WR_Start();
LCD_RS_HI();
  
for (temp = 0; temp < 76800; temp++)
{
ILI9341_WR_Parameter(Color);
}
}
u16 LCD_RD_DATA(void)
{
u16 tmp,tmp1,tmp2;
//PSendChars((u8*)&tmp,2);
GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIOD->ODR=0X0000;     //全部输出0

LCD_RS_HI();
LCD_RD_LO();
LCD_WR_HI();
LCD_CS_LO();

tmp1 = GPIO_ReadInputData(GPIOD);
tmp2 = tmp1;
PSendChars((u8*)&tmp2,2);
tmp = ((tmp1>>8)|(tmp2<<8));

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIOB->ODR=0XFFFF;    //全部输出高
LCD_RD_HI();
LCD_CS_HI();

//PSendChars((u8*)&tmp,2);
return tmp;
}

u16 LCD_ReadReg(u8 LCD_Reg) 
{      
  ILI9341_WR_COMD(LCD_Reg);  //写入要读的寄存器号   
return LCD_RD_DATA();  


void LCD_Init(void)
{
u16 DeviceCode;
//DataToWrite(0XFFFF);
delay_us(8000*50);
LCD_WR_REG(0x0000,0x0001);
delay_us(8000*50);
DeviceCode = LCD_ReadReg(0x0000);
PSendChars((u8*)&DeviceCode,2);
if(DeviceCode==0||DeviceCode==0XFFFF)//读到ID不正确
{
//可能是9341,尝试9341的ID读取
ILI9341_WR_Parameter(0XD3);    
LCD_RD_DATA(); //dummy read
LCD_RD_DATA(); //读回0X00
DeviceCode=LCD_RD_DATA()&0XBF;//这里读回0XD3,实际是0X93才对.强制去掉第6位    
DeviceCode<<=8;
DeviceCode|=LCD_RD_DATA();  
}
PSendChars((u8*)&DeviceCode,2);
// printf("

LCD_ILI9341_Init();
delay_us(8000*10);
//LCD_REG_Config();
Lcd_Clear(0XF800);
}
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-7-21
在线时间
0 小时
发表于 2015-7-23 13:51:27 | 显示全部楼层
没有人在吗??自己顶
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-7-21
在线时间
0 小时
发表于 2015-7-27 15:48:44 | 显示全部楼层
还有没有可以喘气的大神呐!!小弟求指点、、、
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-7-21
在线时间
0 小时
发表于 2015-7-29 17:03:23 | 显示全部楼层
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、顶上去
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-7-21
在线时间
0 小时
发表于 2015-7-30 09:59:32 | 显示全部楼层
顶顶顶顶顶顶顶顶
回复 支持 反对

使用道具 举报

12

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
567
金钱
567
注册时间
2014-12-19
在线时间
139 小时
发表于 2015-8-4 10:31:20 | 显示全部楼层
亲,你有什么问题?回复【14楼】s976228410:
---------------------------------
兄弟,遇到什么问题了?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 01:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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