你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ili9325初始化失败

[复制链接]
jcyq6201 提问时间:2016-6-1 15:17 /
#include"stm32f10x_lib.h"
//#include "lpc11xx.h"
#include "ili9325.h"
//#include "ascii.h"
//#include "w25q16.h"

u16  POINT_COLOR=BLACK;
u16  BACK_COLOR=WHITE;
#define CS_SET GPIO_SetBits(GPIOB,0X2)
#define CS_CLR GPIO_ResetBits(GPIOB,0X2)
#define WR_SET GPIO_SetBits(GPIOB,0X10)
#define WR_CLR GPIO_ResetBits(GPIOB,0X10)
#define RS_SET GPIO_SetBits(GPIOB,0X20)
#define RS_CLR GPIO_ResetBits(GPIOB,0X20)
#define RST_SET GPIO_SetBits(GPIOB,0X40)
#define RST_CLR GPIO_ResetBits(GPIOB,0X40)
#define RD_SET GPIO_SetBits(GPIOB,0X800)
#define RD_CLR GPIO_ResetBits(GPIOB,0X800)
/**************************************************/
/* 函数功能;短暂延时,为LCD初始化时序服务        */
/**************************************************/       
void delay(u32 i)
{
        i=i*10000;
        while(i>0)
        {
                i--;
        }
}
/*******************************************************/
/* 函数功能:初始化LCD                                 */
/*******************************************************/
void LCD_Init(void)
{
     GPIO_InitTypeDef GPIO_InitStructure;                                        //定义一个GPIO结构体变量

        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE);        //使能各个端口时钟,重要!!!
       
        GPIO_InitStructure.GPIO_Pin = 0XFFF2;//GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                   //通用输出推挽
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                   //配置端口速度为50M
          GPIO_Init(GPIOB, &GPIO_InitStructure);                                           //根据参数初始化GPIOB寄存器
        GPIO_Write(GPIOB,0XFFF2);
                delay(60);
       
//************* Start Initial Sequence **********//
        LCD_WR_REG_DATA(0x0001, 0x0100);
        LCD_WR_REG_DATA(0x0002, 0x0700);
        LCD_WR_REG_DATA(0x0003, 0x1030);
        LCD_WR_REG_DATA(0x0004, 0x0000);
        LCD_WR_REG_DATA(0x0008, 0x0202);
        LCD_WR_REG_DATA(0x0009, 0x0000);
        LCD_WR_REG_DATA(0x000A, 0x0000);
        LCD_WR_REG_DATA(0x000C, 0x0000);
        LCD_WR_REG_DATA(0x000D, 0x0000);
        LCD_WR_REG_DATA(0x000F, 0x0000);
//*************Power On sequence ****************//
        LCD_WR_REG_DATA(0x0010, 0x0000);
        LCD_WR_REG_DATA(0x0011, 0x0007);
        LCD_WR_REG_DATA(0x0012, 0x0000);
        LCD_WR_REG_DATA(0x0013, 0x0000);
        LCD_WR_REG_DATA(0x0007, 0x0001);
        delay(200);
        LCD_WR_REG_DATA(0x0010, 0x1690);
        LCD_WR_REG_DATA(0x0011, 0x0227);
        delay(250);
        LCD_WR_REG_DATA(0x0012, 0x001A);
        delay(250);
        LCD_WR_REG_DATA(0x0013, 0x1400);
        LCD_WR_REG_DATA(0x0029, 0x0024);
        LCD_WR_REG_DATA(0x002B, 0x000C);
        delay(250);
        LCD_WR_REG_DATA(0x0020, 0x0000);
        LCD_WR_REG_DATA(0x0021, 0x0000);
// ----------- Adjust the Gamma Curve ----------//
        LCD_WR_REG_DATA(0x0030, 0x0000);
        LCD_WR_REG_DATA(0x0031, 0x0707);
        LCD_WR_REG_DATA(0x0032, 0x0307);
        LCD_WR_REG_DATA(0x0035, 0x0200);
        LCD_WR_REG_DATA(0x0036, 0x0008);
        LCD_WR_REG_DATA(0x0037, 0x0004);
        LCD_WR_REG_DATA(0x0038, 0x0000);
        LCD_WR_REG_DATA(0x0039, 0x0707);
        LCD_WR_REG_DATA(0x003C, 0x0002);
        LCD_WR_REG_DATA(0x003D, 0x1D04);
//------------------ Set GRAM area ---------------//
        LCD_WR_REG_DATA(0x0050, 0x0000);
        LCD_WR_REG_DATA(0x0051, 0x00EF);
        LCD_WR_REG_DATA(0x0052, 0x0000);
        LCD_WR_REG_DATA(0x0053, 0x013F);
        LCD_WR_REG_DATA(0x0060, 0xA700);
        LCD_WR_REG_DATA(0x0061, 0x0001);
        LCD_WR_REG_DATA(0x006A, 0x0000);
//-------------- Partial Display Control ---------//
        LCD_WR_REG_DATA(0x0080, 0x0000);
        LCD_WR_REG_DATA(0x0081, 0x0000);
        LCD_WR_REG_DATA(0x0082, 0x0000);
        LCD_WR_REG_DATA(0x0083, 0x0000);
        LCD_WR_REG_DATA(0x0084, 0x0000);
        LCD_WR_REG_DATA(0x0085, 0x0000);
//-------------- Panel Control -------------------//
        LCD_WR_REG_DATA(0x0090, 0x0010);
        LCD_WR_REG_DATA(0x0092, 0x0600);
        LCD_WR_REG_DATA(0x0007, 0x0133); // 开启显示
        delay(260 );                      
}

/******************************************************/
/* 函数功能;先选择寄存器号,再写数据到里面           */
/* 入口参数;REG:寄存器号  VALUE:数据值             */
/* 说明:    该函数是前两个函数的合成,也就是上面两个 */
/*           函数一般的用法就是这样组合。             */
/******************************************************/
void LCD_WR_REG_DATA(u16 REG, u16 VALUE)
{
           LCD_WR_REG(REG);
           LCD_WR_DATA(VALUE);   
}
/****************************************************/
/* 函数功能:确定往哪个寄存器写数                   */
/* 入口参数;reg:选择的寄存器                      */
/* 说明:    寄存器号是16位数,8位连接方式需要写两次*/
/****************************************************/
void LCD_WR_REG(u16 reg)               
{ u16 M;          
  RS_CLR;        //RS=0;
  CS_CLR;        //CS=0;
  M=GPIO_ReadOutputData(GPIOB);
  M&=0X0FF;M|=(reg&0X0FF00);
  GPIO_Write(GPIOB,M);       
   WR_CLR;        //WR=0;
   WR_SET;        //WR=1;
  M=GPIO_ReadOutputData(GPIOB);
  M&=0X0FF;M|=((reg<<8)&0X0FF00);
  GPIO_Write(GPIOB,M);
        WR_CLR;        //WR=0;
        WR_SET;        //WR=1;
        RS_SET;        //RS=1;       
}
/***************************************************/
/* 函数功能;给ILI9325的寄存器写数据               */
/* 入口参数;val:16位数据                         */
/* 说明:    写16位数据,学习板上的LCD采用8位连接,*/
/*           所以,16位数据分两次写进寄存器,先写高*/
/*           位,再写低位。                        */
/* 注意:使用时需要先使用LCD_WR_REG(reg)选择要把数 */
/*       据写到哪个寄存器里面。                    */
/***************************************************/
void LCD_WR_DATA(u16 val)
{          u16 M;          
    RS_SET;  //RS=1;
        CS_CLR;        //CS=0;
  M=GPIO_ReadOutputData(GPIOB);
  M&=0X00FF;M|=(val&0X0FF00);
  GPIO_Write(GPIOB,M);       
   WR_CLR;        //WR=0;
   WR_SET;        //WR=1;
  M=GPIO_ReadOutputData(GPIOB);
  M&=0X00FF;M|=((val<<8)&0X0FF00);
  GPIO_Write(GPIOB,M);                       
        WR_CLR;        //WR=0;
        WR_SET;        //WR=1;
        CS_SET;        //CS=1;         
}
void LCD_Clear(u16 color)
{
  u32 temp;
  LCD_WR_REG_DATA(0x0020,0);//设置X坐标位置
  LCD_WR_REG_DATA(0x0021,0);//设置Y坐标位置
  LCD_WR_REG(0x0022);                                //指向RAM寄存器,准备写数据到RAM
        for(temp=0;temp<76800;temp++)
        {
                LCD_WR_DATA(color);   
        }LCD_WR_REG_DATA(0x0007, 0x0133); // 开启显示*/
}


收藏 评论1 发布时间:2016-6-1 15:17

举报

1个回答
无薪税绵 回答时间:2018-3-5 14:09:14
请先确认硬件是否正常。

下面提供一些 ili9325 的资料(来源于野火开发板)

ILI9325的英文资料
ILI9325DS_ID9325(英文资料).pdf (1.17 MB, 下载次数: 0)

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版