OpenEdv-开源电子网

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

如何用库 玩原子的TFT

[复制链接]

9

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-1-19
在线时间
0 小时
发表于 2013-1-30 15:12:44 | 显示全部楼层 |阅读模式
 

求助关于如何用库 来玩原子的TFT的。

今早我调了一个早上还是没成功,一直都是白屏。

现在我觉得我改该的都改了,实在找不出哪里的问题。。想请教一下,改怎么办




void Lcd_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO,ENABLE);
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); //把JTAG和SW口重映射为普通IO

 GPIO_InitStructure.GPIO_Pin = Lcd_CS_PIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(Lcd_CS_PORT, &GPIO_InitStructure);           
 GPIO_SetBits(Lcd_CS_PORT,Lcd_CS_PIN);

 GPIO_InitStructure.GPIO_Pin = Lcd_RS_PIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(Lcd_RS_PORT, &GPIO_InitStructure);           
 GPIO_SetBits(Lcd_RS_PORT,Lcd_RS_PIN);

 GPIO_InitStructure.GPIO_Pin = Lcd_WR_PIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(Lcd_WR_PORT, &GPIO_InitStructure);           
 GPIO_SetBits(Lcd_WR_PORT,Lcd_WR_PIN);

 GPIO_InitStructure.GPIO_Pin = Lcd_RD_PIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(Lcd_RD_PORT, &GPIO_InitStructure);           
 GPIO_SetBits(Lcd_RD_PORT,Lcd_RD_PIN);

 GPIO_InitStructure.GPIO_Pin = Lcd_LED_PIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(Lcd_LED_PORT, &GPIO_InitStructure);           
 GPIO_SetBits(Lcd_RD_PORT,Lcd_LED_PIN);
 
 Lcd_Data_Out();
        
 delay_ms(50);
 Lcd_WriteCMD(0x00,0x0001);
 delay_ms(50);
 DeviceCode = Lcd_ReadCMD(0x0000);
 
  if(DeviceCode==0||DeviceCode==0XFFFF)//读到ID不正确
 { 
  //可能是9341,尝试9341的ID读取  
  Lcd_WR_CMD(0XD3);      
  LCD_RD_DATA();    //dummy read  
   LCD_RD_DATA();        //读回0X00
    DeviceCode=LCD_RD_DATA()&0XBF;//这里读回0XD3,实际是0X93才对.强制去掉第6位             
   DeviceCode<<=8;
  DeviceCode|=LCD_RD_DATA();     
 }
// printf("\n\r LCD ID = 0x%x",DeviceCode);

 if(DeviceCode==0X9341) //9341初始化
 {
  Lcd_WR_CMD(0xCF); 
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0xC1);
  Lcd_WR_Data(0X30);
  Lcd_WR_CMD(0xED); 
  Lcd_WR_Data(0x64);
  Lcd_WR_Data(0x03);
  Lcd_WR_Data(0X12);
  Lcd_WR_Data(0X81);
  Lcd_WR_CMD(0xE8); 
  Lcd_WR_Data(0x85);
  Lcd_WR_Data(0x10);
  Lcd_WR_Data(0x7A);
  Lcd_WR_CMD(0xCB); 
  Lcd_WR_Data(0x39);
  Lcd_WR_Data(0x2C);
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x34);
  Lcd_WR_Data(0x02);
  Lcd_WR_CMD(0xF7); 
  Lcd_WR_Data(0x20);
  Lcd_WR_CMD(0xEA); 
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x00);
  Lcd_WR_CMD(0xC0);    //Power control
  Lcd_WR_Data(0x1B);   //VRH[5:0]
  Lcd_WR_CMD(0xC1);    //Power control
  Lcd_WR_Data(0x01);   //SAP[2:0];BT[3:0]
  Lcd_WR_CMD(0xC5);    //VCM control
  Lcd_WR_Data(0x30);   //3F
  Lcd_WR_Data(0x30);   //3C
  Lcd_WR_CMD(0xC7);    //VCM control2
  Lcd_WR_Data(0XB7);
  Lcd_WR_CMD(0x36);    // Memory Access Control
  Lcd_WR_Data(0x48);
  Lcd_WR_CMD(0x3A);  
  Lcd_WR_Data(0x55);
  Lcd_WR_CMD(0xB1);  
  Lcd_WR_Data(0x00);  
  Lcd_WR_Data(0x1A);
  Lcd_WR_CMD(0xB6);    // Display Function Control
  Lcd_WR_Data(0x0A);
  Lcd_WR_Data(0xA2);
  Lcd_WR_CMD(0xF2);    // 3Gamma Function Disable
  Lcd_WR_Data(0x00);
  Lcd_WR_CMD(0x26);    //Gamma curve selected
  Lcd_WR_Data(0x01);
  Lcd_WR_CMD(0xE0);    //Set Gamma
  Lcd_WR_Data(0x0F);
  Lcd_WR_Data(0x2A);
  Lcd_WR_Data(0x28);
  Lcd_WR_Data(0x08);
  Lcd_WR_Data(0x0E);
  Lcd_WR_Data(0x08);
  Lcd_WR_Data(0x54);
  Lcd_WR_Data(0XA9);
  Lcd_WR_Data(0x43);
  Lcd_WR_Data(0x0A);
  Lcd_WR_Data(0x0F);
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x00);   
  Lcd_WR_CMD(0XE1);    //Set Gamma
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x15);
  Lcd_WR_Data(0x17);
  Lcd_WR_Data(0x07);
  Lcd_WR_Data(0x11);
  Lcd_WR_Data(0x06);
  Lcd_WR_Data(0x2B);
  Lcd_WR_Data(0x56);
  Lcd_WR_Data(0x3C);
  Lcd_WR_Data(0x05);
  Lcd_WR_Data(0x10);
  Lcd_WR_Data(0x0F);
  Lcd_WR_Data(0x3F);
  Lcd_WR_Data(0x3F);
  Lcd_WR_Data(0x0F);
  Lcd_WR_CMD(0x2B);
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x01);
  Lcd_WR_Data(0x3f);
  Lcd_WR_CMD(0x2A);
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0x00);
  Lcd_WR_Data(0xef); 
  Lcd_WR_CMD(0x11); //Exit Sleep
  delay_ms(120);
  Lcd_WR_CMD(0x29); //display on 
 }
}

这个是我的初始化

#define Lcd_LED_PORT              GPIOC
#define Lcd_LED_PIN               GPIO_Pin_10
#define Lcd_CS_PORT              GPIOC
#define Lcd_CS_PIN               GPIO_Pin_9
#define Lcd_RS_PORT              GPIOC
#define Lcd_RS_PIN               GPIO_Pin_8
#define Lcd_WR_PORT              GPIOC
#define Lcd_WR_PIN               GPIO_Pin_7
#define Lcd_RD_PORT              GPIOC
#define Lcd_RD_PIN               GPIO_Pin_6
#define Lcd_DATA_PORT            GPIOB
#define Lcd_DATA_PIN             GPIO_Pin_All

#define Lcd_CS_SET  GPIO_SetBits(Lcd_CS_PORT, Lcd_CS_PIN)        // 片选
#define Lcd_RS_SET GPIO_SetBits(Lcd_RS_PORT, Lcd_RS_PIN)        // 数据
#define Lcd_WR_SET GPIO_SetBits(Lcd_WR_PORT, Lcd_WR_PIN)        // 写
#define Lcd_RD_SET GPIO_SetBits(Lcd_RD_PORT, Lcd_RD_PIN)        // 读
           
#define Lcd_CS_CLR  GPIO_ResetBits(Lcd_CS_PORT, Lcd_CS_PIN)      // 片选
#define Lcd_RS_CLR GPIO_ResetBits(Lcd_RS_PORT, Lcd_RS_PIN)      // 命令
#define Lcd_WR_CLR GPIO_ResetBits(Lcd_WR_PORT, Lcd_WR_PIN)      // 写
#define Lcd_RD_CLR GPIO_ResetBits(Lcd_RD_PORT, Lcd_RD_PIN)      // 读

// PB0~15,作为数据线
#define Lcd_DATA_WR(x) GPIO_Write(Lcd_DATA_PORT, x)        // 写数据
#define Lcd_DATA_RD    GPIO_ReadInputData(Lcd_DATA_PORT)   // 读数据

//选择LCD寄存器
#define Lcd_WR_CMD(val){\
  Lcd_RS_CLR;\
  Lcd_CS_CLR;\
  Lcd_DATA_WR(val);\
  Lcd_WR_CLR;\
  Lcd_WR_SET;\
  Lcd_CS_SET;\
}
//向LCD写寄存器值或颜色值
#define Lcd_WR_Data(val){\
  Lcd_RS_SET;\
  Lcd_CS_CLR;\
  Lcd_DATA_WR(val);\
  Lcd_WR_CLR;\
  Lcd_WR_SET;\
  Lcd_CS_SET;\
}

u16 LCD_RD_DATA(void)
{            
 u16 t;
 Lcd_Data_In();
  Lcd_DATA_WR(0x0000); //PB全部 上拉输入

 Lcd_RS_SET;
 Lcd_CS_CLR;
 //读取数据(读寄存器时,并不需要读2次)
 Lcd_CS_CLR;
 if(DeviceCode==0X8989)delay_us(2);//FOR 8989,延时2us       
 Lcd_RD_SET;
 t=Lcd_DATA_RD; 
 Lcd_CS_SET;

 Lcd_Data_Out();
 Lcd_DATA_WR(0xFFFF);    //全部输出高
 return t; 
}

void Lcd_Data_In(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = Lcd_DATA_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(Lcd_DATA_PORT, &GPIO_InitStructure);
  //Lcd_DATA_WR(0xFFFF);
}
//配置数据为输出
void Lcd_Data_Out(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = Lcd_DATA_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(Lcd_DATA_PORT, &GPIO_InitStructure);
  //Lcd_DATA_WR(0xFFFF);
}
//写寄存器
void Lcd_WriteCMD(u8 CMD,u16 val)

 Lcd_WR_CMD(CMD); 
 Lcd_WR_Data(val);       
}   
//读寄存器
u16 Lcd_ReadCMD(u8 CMD)
{            
 u16 i;
 Lcd_WR_CMD(CMD);
 Lcd_Data_In();

 Lcd_RS_SET;
 Lcd_CS_CLR;
 Lcd_RD_CLR; //读取数据
 delay_us(5);//给0x8989延时5us       
 Lcd_RD_SET;
 i=Lcd_DATA_RD; 
 Lcd_CS_SET;
 
 Lcd_Data_Out();
 return i; 
}

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

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-1-30 16:31:39 | 显示全部楼层
刚才我给你的信息是我搞错了。原子哥的MINI不支持FSMC。

我也不知道你这里还有什么错误,我的板子并不是原子哥的。
不好意思,帮不了你。

我记得我大二的时候用AVR——IO口玩过下彩屏,看你的流程没看出什么问题出来。
可能你漏了什么步骤,LZ你仔细点再检查下吧。最好和原子哥的例程做对比,这样容易找出问题出来。呵呵!
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-30 17:26:31 | 显示全部楼层
回复【楼主位】JYJ:
---------------------------------
直接用我们的代码试试.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-1-19
在线时间
0 小时
 楼主| 发表于 2013-1-30 21:23:54 | 显示全部楼层

。。。全错

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-30 23:25:47 | 显示全部楼层
回复【4楼】JYJ:
---------------------------------
什么意思?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
814
金钱
814
注册时间
2012-3-29
在线时间
81 小时
发表于 2013-8-16 08:24:59 | 显示全部楼层
回复【楼主位】JYJ:
---------------------------------
参考 http://www.openedv.com/posts/list/19825.htm
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 00:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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