OpenEdv-开源电子网

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

旧话重提:ILI9320驱动不成功

[复制链接]

18

主题

82

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2011-10-27
在线时间
0 小时
发表于 2011-11-12 22:48:45 | 显示全部楼层 |阅读模式
 我提几点可能有问题的地方,原子哥有空帮忙看一下,不要向以前帖子那样一棒打死,手下留情。
1. LCD_WriteReg(0x00,0x0000);   根据手册,这样是没有开启内部振荡,而9325的驱动却是开启,是否9320也应该开启?
2.LCD_WriteReg(0x2b,(1<<14)|(1<<4)); 14位的Dither是否应该为0?

另外,你在9325 power sequence那里加了好几个延时,而9320没有,是不是与这个有关?
我的9320也没有驱动成功,真的找不到原因了,我再参考一下网上其他的资料看看。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-11-12 23:53:05 | 显示全部楼层
回复【楼主位】fengye1966:
---------------------------------
这些细节,我也没太留意.
我基本上是用到不能达到我要求的时候才去看这些的.
我们提供的源码,驱动9320,9325,9328都是OK的.

至于延时这些,我直接拷贝厂家驱动代码,直接就好用的.
9320你能读出ID,应该就可以用的.
要不用我们的板子试试吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

82

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2011-10-27
在线时间
0 小时
 楼主| 发表于 2011-11-13 18:24:56 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
ID能读出来,但显示有问题,貌似只有背光,没有显示,我再查查其他地方。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-11-13 19:23:01 | 显示全部楼层
回复【3楼】fengye1966:
---------------------------------
ID能读,应该就能显示了的.
不能的话,除非个别地方的数据线不通,或者短路.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

82

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2011-10-27
在线时间
0 小时
 楼主| 发表于 2011-11-14 11:27:44 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
多谢原子哥,是我的电压供电问题,不好意思,你的程序跑了都正确,如果其他人9320驱动不了的请找我咨询。
回复 支持 反对

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2011-9-15
在线时间
9 小时
发表于 2011-11-29 13:17:32 | 显示全部楼层
回复【5楼】fengye1966:
---------------------------------
您好,我最在学习。。液晶。。也是9320.。。我现在读ID读不出来。。。能帮我看下程序吗?已经整了好几天了,,
这程序就是写到读ID。在初始化中读完id判断id是否为9320.。如果是就点亮小灯。。。。但现在就是读不出来。。。我查了下。。。读出来的好像是0x0010.。看了好久,。。。
也没找出问题若果有时间请帮我看下。。谢谢。。
另外。。看原子哥的程序。。在设置那几个液晶控制管脚的时候为什么要设成复用输出呢?

#include "stm32f10x.h"
  
//管脚定义
#define LCD_RD_RESET {GPIO_ResetBits(GPIOC, GPIO_Pin_6);}    //RD
#define LCD_RD_SET {GPIO_SetBits(GPIOC, GPIO_Pin_6);}

#define LCD_WR_RESET {GPIO_ResetBits(GPIOC, GPIO_Pin_7);}    //WR
#define LCD_WR_SET {GPIO_SetBits(GPIOC, GPIO_Pin_7);}

#define LCD_RS_RESET {GPIO_ResetBits(GPIOC, GPIO_Pin_8);}
#define LCD_RS_SET {GPIO_SetBits(GPIOC, GPIO_Pin_8);}    //RS

#define LCD_CS_RESET {GPIO_ResetBits(GPIOC, GPIO_Pin_9);}
#define LCD_CS_SET {GPIO_SetBits(GPIOC, GPIO_Pin_9);}    //CS

#define LCD_LED_RESET {GPIO_ResetBits(GPIOC, GPIO_Pin_10);}
#define LCD_LED_SET {GPIO_SetBits(GPIOC, GPIO_Pin_10);}    //LED

u16 IDcode; 
u8 ms,us;
 // 声明结构体
 GPIO_InitTypeDef GPIO_InitStructure; //此句话定义了一个名字叫GPIO_InitStructure的结构体


 //延时函数初始化
void delay_init()
{
 SysTick->CTRL&=0xfffffffb; //
  us=9;  //72M/8....为1us
  ms=(u16)us*1000;  //1000us=1ms


  //us级延时
void delay_us(u32 n)
{
 u32 temp;
 SysTick->LOAD=n*us;
 SysTick->VAL=0x00;
 SysTick->CTRL=0x01;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达 
 SysTick->CTRL=0x00;
 SysTick->VAL=0x00;

}

//ms级延时    n<1800 
void delay_ms(u16 n)
{
 u32 temp;
 SysTick->LOAD=(u32)n*ms;   //装初值
 SysTick->VAL=0x00;      
 SysTick->CTRL=0x01;

do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达 
 SysTick->CTRL=0x00;
 SysTick->VAL=0x00;


    //GPIO初始化
 void GPIO_Configuration(void)

 {

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;   //PD2引脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD,&GPIO_InitStructure);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;    //定义管脚
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出 bh红灯
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      //设置速度
   GPIO_Init(GPIOA,&GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; //RD WR RS CS LED
  //GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP; 
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_out_PP;   //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC,&GPIO_InitStructure);
  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //DATE[0,15]   GPIOB
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB,&GPIO_InitStructure);
  }

//写数据函数 
void WRITE_DATE(u16 date)
{
 LCD_RS_SET;
 LCD_CS_RESET;
 GPIO_Write(GPIOB,date);
 LCD_WR_RESET;
 LCD_WR_SET;
 LCD_CS_SET; 
}

//写指令函数 
void WRITE_COM(u8 com)
{
 LCD_RS_RESET;
 LCD_CS_RESET;
 GPIO_Write(GPIOB,com);
 LCD_WR_RESET;
 LCD_WR_SET;
 LCD_CS_SET; 
}

//写寄存器函数
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{
 WRITE_COM(LCD_Reg);
 WRITE_DATE(LCD_RegValue);
}

//读寄存器函数
u16 LCD_ReadReg(u8 LCD_Reg)
{
 u16 t;
 WRITE_COM(LCD_Reg);
 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_All;   //   设置数据口上拉输入准备接收数据
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB,&GPIO_InitStructure);
 GPIO_Write(GPIOB,0XFFFF);
 delay_ms(50);                          //全部输出高
 //  读数据
 LCD_RS_SET;
 LCD_CS_RESET;
 LCD_RD_RESET;
 delay_us(6);
 LCD_RD_SET;
 t=GPIO_ReadInputData(GPIOB);
 delay_ms(10);
 LCD_CS_SET; 
  
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //DATE[0,15]
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB,&GPIO_InitStructure);
 GPIO_Write(GPIOB,0XFFFF);
 return t;
}


void LCD_Init(void)
{
LCD_LED_SET;
 delay_ms(50);
 LCD_WriteReg(0x00,0x0001);  //向R0写入 设置OSC 开启振荡器
 delay_ms(50);
 IDcode=LCD_ReadReg(0x00);
 delay_ms(50);
 GPIO_Write(GPIOB,IDcode); 
if(IDcode==0x9320)
 { 
 GPIO_ResetBits (GPIOD,GPIO_Pin_2);
  LCD_WriteReg(0x00,0x0000);  //为什么要关闭振荡器  ?????
  LCD_WriteReg(0x01,0x0100);  // ??? 这个寄存器什么意思
  LCD_WriteReg(0x02,0x0700);  // ??? 这个寄存器什么意思
  LCD_WriteReg(0x03,0x1030);  // 设置显示方向   AM显示方向  ID刷屏更新方向  
  LCD_WriteReg(0x04,0x0000);  // 设置尺寸系数
  LCD_WriteReg(0x08,0x0202);  // 设置屏幕上下空余行数 FP BP 前沿 后沿
  LCD_WriteReg(0x09,0x0000);  // ????
  LCD_WriteReg(0x0a,0x0000);  //???
  LCD_WriteReg(0x0c,(1<<0));  //????
  LCD_WriteReg(0x0d,0x0000);  //??
  LCD_WriteReg(0x0f,0x0000);  //??
  delay_ms(50); 


        LCD_WriteReg(0x07,0x0101); //Display Contral.
delay_ms(50);    
LCD_WriteReg(0x10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4)); //Power Control 1.(0x16b0)
LCD_WriteReg(0x11,0x0007); //Power Control 2.(0x0001)
LCD_WriteReg(0x12,(1<<8)|(1<<4)|(0<<0)); //Power Control 3.(0x0138)
LCD_WriteReg(0x13,0x0b00); //Power Control 4.
LCD_WriteReg(0x29,0x0000); //Power Control 7.

LCD_WriteReg(0x2b,(1<<14)|(1<<4));     
LCD_WriteReg(0x50,0); //Set X Star
//水平GRAM终止位置Set X End.
LCD_WriteReg(0x51,239); //Set Y Star
LCD_WriteReg(0x52,0); //Set Y End.t.
LCD_WriteReg(0x53,319); //

LCD_WriteReg(0x60,0x2700); //Driver Output Control.
LCD_WriteReg(0x61,0x0001); //Driver Output Control.
LCD_WriteReg(0x6a,0x0000); //Vertical Srcoll Control.

LCD_WriteReg(0x80,0x0000); //Display osition? artial Display 1.
LCD_WriteReg(0x81,0x0000); //RAM Address Start? artial Display 1.
LCD_WriteReg(0x82,0x0000); //RAM Address End-Partial Display 1.
LCD_WriteReg(0x83,0x0000); //Displsy osition? artial Display 2.
LCD_WriteReg(0x84,0x0000); //RAM Address Start? artial Display 2.
LCD_WriteReg(0x85,0x0000); //RAM Address End? artial Display 2.

LCD_WriteReg(0x90,(0<<7)|(16<<0)); //Frame Cycle Contral.(0x0013)
LCD_WriteReg(0x92,0x0000); //Panel Interface Contral 2.(0x0000)
LCD_WriteReg(0x93,0x0001); //Panel Interface Contral 3.
LCD_WriteReg(0x95,0x0110); //Frame Cycle Contral.(0x0110)
LCD_WriteReg(0x97,(0<<8)); //
LCD_WriteReg(0x98,0x0000); //Frame Cycle Contral.    
LCD_WriteReg(0x07,0x0173); //(0x0173)



 }

}

int main(void)

  
  //使能线上时钟,
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOC, ENABLE);//使能IO口B和C
  GPIO_Configuration ();//GPIO初始化
  delay_init(); 
  GPIO_SetBits(GPIOD,GPIO_Pin_2);
  GPIO_SetBits(GPIOA,GPIO_Pin_8);
  GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);
  GPIO_Write(GPIOB, 0XFFFF);
  LCD_Init ();
   
  //GPIO_Write(GPIOB,0);
 
  while (1)
  {
  
  
;
  }

}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-11-29 13:55:46 | 显示全部楼层
回复【6楼】wx837078933:
---------------------------------
请参考我们寄存器版本的代码.
不应该设置为复用输出的.
读ID就是0X0000这个指令
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2012-12-31
在线时间
3 小时
发表于 2013-1-27 11:09:56 | 显示全部楼层
回复【5楼】fengye1966:
---------------------------------
你好!!我感觉自己跟你是一样的问题,换了一个屏还是这个问题:ID读出来了,初始化没现象。你能具体说说你当时电压供电问题出在哪么。
回复 支持 反对

使用道具 举报

18

主题

82

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2011-10-27
在线时间
0 小时
 楼主| 发表于 2013-1-30 16:41:45 | 显示全部楼层
回复【8楼】飞向远方hehe:
---------------------------------
你测一下屏的供电电压是否都正常
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-3-4
在线时间
0 小时
发表于 2014-3-4 14:31:01 | 显示全部楼层
回复【5楼】fengye1966:
--------------------------------请教大神:您好,我的也是9320.战舰实验13tftlcd显示实验的源码。下载进去之后就是白屏一块。没有其他反应。。。。。
回复 支持 反对

使用道具 举报

18

主题

82

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2011-10-27
在线时间
0 小时
 楼主| 发表于 2014-6-23 16:06:39 | 显示全部楼层
回复【10楼】青藤门下:
---------------------------------
供电电压测一下,3.3和5都测一下
回复 支持 反对

使用道具 举报

29

主题

136

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1291
金钱
1291
注册时间
2013-1-11
在线时间
445 小时
发表于 2014-9-15 13:40:57 | 显示全部楼层
回复【3楼】fengye1966:
---------------------------------
唉,我也是和你一样的问题,ID读出来是9230,但屏不工作,貌似只有背光亮了。

除了供电电压外还有什么可能原因吗
回复 支持 反对

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
发表于 2016-10-8 13:42:18 | 显示全部楼层
fengye1966 发表于 2011-11-13 18:24
回复【2楼】正点原子:
---------------------------------
ID能读出来,但显示有问题,貌似只有背光,没有 ...

楼主不知道还在否,为什么我的ID本应该是9320但是串口打印出来就是e00f了???
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 09:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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