OpenEdv-开源电子网

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

请教LCD初始化问题

[复制链接]

49

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2013-3-27
在线时间
9 小时
发表于 2013-4-19 18:04:04 | 显示全部楼层 |阅读模式

//初始化lcd
//该初始化函数可以初始化各种ILI93XX液晶,但是其他函数是基于ILI9320的!!!
//在其他型号的驱动芯片上没有测试!
void LCD_Init(void)
{            
 RCC->AHBENR|=1<<8;       //使能FSMC时钟  
   RCC->APB2ENR|=1<<3;      //使能PORTB时钟
 RCC->APB2ENR|=1<<5;      //使能PORTD时钟
 RCC->APB2ENR|=1<<6;      //使能PORTE时钟
  RCC->APB2ENR|=1<<8;      //使能PORTG时钟 
 GPIOB->CRL&=0XFFFFFFF0;//PB0 推挽输出 背光
 GPIOB->CRL|=0X00000003;   
 //PORTD复用推挽输出  
 GPIOD->CRH&=0X00FFF000;
 GPIOD->CRH|=0XBB000BBB;
 GPIOD->CRL&=0XFF00FF00;
 GPIOD->CRL|=0X00BB00BB;    
 //PORTE复用推挽输出  
 GPIOE->CRH&=0X00000000;
 GPIOE->CRH|=0XBBBBBBBB;
 GPIOE->CRL&=0X0FFFFFFF;
 GPIOE->CRL|=0XB0000000;                      
 //PORTG12复用推挽输出 A0                  
 GPIOG->CRH&=0XFFF0FFFF;
 GPIOG->CRH|=0X000B0000;
 GPIOG->CRL&=0XFFFFFFF0;//PG0->RS
 GPIOG->CRL|=0X0000000B;
 

 //寄存器清零
 //bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
 //这里我们使用NE4 ,也就对应BTCR[6],[7]。       
 FSMC_Bank1->BTCR[6]=0X00000000;
 FSMC_Bank1->BTCR[7]=0X00000000;
 FSMC_Bank1E->BWTR[6]=0X00000000;
 //操作BCR寄存器 使用异步模式
 FSMC_Bank1->BTCR[6]|=1<<12;  //存储器写使能
 FSMC_Bank1->BTCR[6]|=1<<14;  //读写使用不同的时序
 FSMC_Bank1->BTCR[6]|=1<<4;   //存储器数据宽度为16bit     
 //操作BTR寄存器 
 //读时序控制寄存器           
 FSMC_Bank1->BTCR[7]|=0<<28;  //模式A             
 FSMC_Bank1->BTCR[7]|=1<<0;   //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns   
 //因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
 FSMC_Bank1->BTCR[7]|=0XF<<8;   //数据保存时间为16个HCLK   
 //写时序控制寄存器 
 FSMC_Bank1E->BWTR[6]|=0<<28;  //模式A             
 FSMC_Bank1E->BWTR[6]|=0<<0;  //地址建立时间(ADDSET)为1个HCLK
  //4个HCLK(HCLK=72M)因为液晶驱动IC的写信号脉宽,最少也得50ns。72M/4=24M=55ns   
 FSMC_Bank1E->BWTR[6]|=3<<8;  //数据保存时间为4个HCLK 
 //使能BANK1,区域4
 FSMC_Bank1->BTCR[6]|=1<<0;  //使能BANK1,区域4  
   
  delay_ms(50); // delay 50 ms
  LCD_WriteReg(0x0000,0x0001);   
 delay_ms(50); // delay 50 ms
   lcddev.id = LCD_ReadReg(0x0000);  
   if(lcddev.id<0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300)//读到ID不正确,新增lcddev.id==0X9300判断,因为9341在未被复位的情况下会被读成9300
 { 
   //尝试9341 ID的读取  
  LCD_WR_REG(0XD3);      
  LCD_RD_DATA();     //dummy read  
   LCD_RD_DATA();         //读到0X00
    lcddev.id=LCD_RD_DATA();    //读取93          
   lcddev.id<<=8;
  lcddev.id|=LCD_RD_DATA();   //读取41          
   if(lcddev.id!=0X9341)  //非9341,尝试是不是6804
  { 
    LCD_WR_REG(0XBF);      
   LCD_RD_DATA();    //dummy read  
    LCD_RD_DATA();        //读回0X01     
    LCD_RD_DATA();    //读回0XD0       
     lcddev.id=LCD_RD_DATA();//这里读回0X68
   lcddev.id<<=8;
     lcddev.id|=LCD_RD_DATA();//这里读回0X04      
   }
  if(lcddev.id!=0X9341&&lcddev.id!=0X6804)lcddev.id=0x9341;//新增,用于识别9341      
 }
  printf(" LCD ID:%x\r\n",lcddev.id); //打印LCD ID 
 if(lcddev.id==0X9341) //9341初始化
 { 
  LCD_WR_REG(0xCF); 
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0xC1);
  LCD_WR_DATA(0X30);
  LCD_WR_REG(0xED); 
  LCD_WR_DATA(0x64);
  LCD_WR_DATA(0x03);
  LCD_WR_DATA(0X12);
  LCD_WR_DATA(0X81);
  LCD_WR_REG(0xE8);  
  

程序中红色的两句看不懂,LCD_WriteReg(0x0000,0x0001);和lcddev.id = LCD_ReadReg(0x0000);什么意思啊!

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

使用道具 举报

49

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2013-3-27
在线时间
9 小时
 楼主| 发表于 2013-4-19 19:07:41 | 显示全部楼层
delay_ms(50); // delay 50 ms 
  LCD_WriteReg(0x0000,0x0001);    
  delay_ms(50); // delay 50 ms 
  lcddev.id = LCD_ReadReg(0x0000);
这些语句是针对ILI9320的启动内部振荡器和读取ID的吧
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-19 22:31:53 | 显示全部楼层
回复【楼主位】朱静:
---------------------------------
第一句,来自供应商9320的代码,没有研究.直接搬用.
第二句,读取寄存器0,得到LCD驱动器的型号,方便后续处理.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

32

主题

195

帖子

2

精华

高级会员

Rank: 4

积分
646
金钱
646
注册时间
2013-7-23
在线时间
1 小时
发表于 2013-10-20 20:59:16 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子大哥,供应商9320的代码在哪儿有啊,我看了光盘里的液晶资料里的ILI9320的资料,没有找着,请问是在这个pdf里吗?麻烦原子大哥说一下是多少也啊?谢谢原子大哥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-20 21:13:11 | 显示全部楼层
回复【4楼】pizhihui1993:
---------------------------------
我们代码里面的,就是供应商给我的。
如果你要问供应商要,可以自己联系供应商,你买谁的屏找谁要去。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-20 21:13:37 | 显示全部楼层
光盘有9320的资料,很容易找啊。
E:\ALIENTEK 光盘资料更新记录\ALIENTEK MiniSTM32开发板资料_最新\7,硬件资料\液晶资料\ILI9320(ID9320)
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

32

主题

195

帖子

2

精华

高级会员

Rank: 4

积分
646
金钱
646
注册时间
2013-7-23
在线时间
1 小时
发表于 2013-10-20 21:23:54 | 显示全部楼层
哦哦 谢谢原子大哥啊!
回复 支持 反对

使用道具 举报

32

主题

195

帖子

2

精华

高级会员

Rank: 4

积分
646
金钱
646
注册时间
2013-7-23
在线时间
1 小时
发表于 2013-10-20 21:24:34 | 显示全部楼层
哦 对了,能告诉我供应商是哪家的吗啊?是走淘宝吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-10 19:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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