OpenEdv-开源电子网

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

驱动ILI9341的lcd能写进数据,屏却没反应,求助!!卡了一个星期了

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-3-15
在线时间
2 小时
发表于 2018-3-15 17:06:42 | 显示全部楼层 |阅读模式
1金钱
QQ截图20180315165055.png 这是时序,从上到下,分别是CS、SLK 、DC、 SDI QQ截图20180315165502.png 从上到下是CS SLK RESET



硬件也检查了,数据都输入到了屏幕里。但是屏幕一直只是亮屏,不能刷屏,感觉是没有初始化成功。但是找不到原因了,求助大神帮帮忙!!
程序是从stm32移植到dsp28335的
以下是程序
#define LCD_SDI                GpioDataRegs.GPADAT.bit.GPIO16
#define LCD_SCK                GpioDataRegs.GPADAT.bit.GPIO18
#define LCD_CS     GpioDataRegs.GPADAT.bit.GPIO19
#define LCD_REST   GpioDataRegs.GPADAT.bit.GPIO2
#define LCD_DC     GpioDataRegs.GPADAT.bit.GPIO3

main()
{
   InitSysCtrl();

   DINT;//禁止CPU中断
   InitPieCtrl();//初始化PIE控制寄存器
   IER = 0x0000;//清除所有中断标志位
   IFR = 0x0000;
   InitPieVectTable();//初始化中断向量表

   EALLOW;
           GpioCtrlRegs.GPAMUX1.all = 0x00000000; // All GPIO
           GpioCtrlRegs.GPAMUX2.all = 0x00000000; // All GPIO

           GpioCtrlRegs.GPADIR.bit.GPIO2=1;
           GpioCtrlRegs.GPADIR.bit.GPIO3=1;
           GpioCtrlRegs.GPADIR.bit.GPIO16=1;
           GpioCtrlRegs.GPADIR.bit.GPIO18=1;
           GpioCtrlRegs.GPADIR.bit.GPIO19=1;
           EDIS;
           Lcd_Init();  
                   LCD_Clear(WHITE);
                   BACK_COLOR=BLACK;OINT_COLOR=WHITE;

                   while(1)
                   {
                           Lcd_Init();  
                           LCD_Clear(RED);
                           delay_ms(1000);
                           LCD_Clear(GREEN);
                           delay_ms(1000);
                           LCD_Clear(BLUE);
                           delay_ms(1000);
                           showhanzi32(0,0,0);
                                   showhanzi32(40,0,1);
                                   showhanzi32(80,0,2);
                                   delay_ms(1000);
               }
}

void Lcd_Init(void)
{
        LCD_CS =1;
        LCD_REST=1;
                delay_ms(300);
        LCD_REST=0;
                delay_ms(500); // delay 20 ms
                   LCD_REST=1;
                delay_ms(300); // delay 20 ms

                LCD_CS=0;
                LCD_WR_REG(0xCF);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0xD9);
                LCD_WR_DATA8(0X30);

                LCD_WR_REG(0xED);
                LCD_WR_DATA8(0x64);
                LCD_WR_DATA8(0x03);
                LCD_WR_DATA8(0X12);
                LCD_WR_DATA8(0X81);

                LCD_WR_REG(0xE8);
                LCD_WR_DATA8(0x85);
                LCD_WR_DATA8(0x10);
                LCD_WR_DATA8(0x78);

                LCD_WR_REG(0xCB);
                LCD_WR_DATA8(0x39);
                LCD_WR_DATA8(0x2C);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x34);
                LCD_WR_DATA8(0x02);

                LCD_WR_REG(0xF7);
                LCD_WR_DATA8(0x20);

                LCD_WR_REG(0xEA);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x00);

                LCD_WR_REG(0xC0);    //Power control
                LCD_WR_DATA8(0x21);   //VRH[5:0]

                LCD_WR_REG(0xC1);    //Power control
                LCD_WR_DATA8(0x12);   //SAP[2:0];BT[3:0]

                LCD_WR_REG(0xC5);    //VCM control
                LCD_WR_DATA8(0x32);
                LCD_WR_DATA8(0x3C);

                LCD_WR_REG(0xC7);    //VCM control2
                LCD_WR_DATA8(0XC1);

                LCD_WR_REG(0x36);    // Memory Access Control
                LCD_WR_DATA8(0x08);

                LCD_WR_REG(0x3A);
                LCD_WR_DATA8(0x55);

                LCD_WR_REG(0xB1);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x18);

                LCD_WR_REG(0xB6);    // Display Function Control
                LCD_WR_DATA8(0x0A);
                LCD_WR_DATA8(0xA2);



                LCD_WR_REG(0xF2);    // 3Gamma Function Disable
                LCD_WR_DATA8(0x00);

                LCD_WR_REG(0x26);    //Gamma curve selected
                LCD_WR_DATA8(0x01);

                LCD_WR_REG(0xE0);    //Set Gamma
                LCD_WR_DATA8(0x0F);
                LCD_WR_DATA8(0x20);
                LCD_WR_DATA8(0x1E);
                LCD_WR_DATA8(0x09);
                LCD_WR_DATA8(0x12);
                LCD_WR_DATA8(0x0B);
                LCD_WR_DATA8(0x50);
                LCD_WR_DATA8(0XBA);
                LCD_WR_DATA8(0x44);
                LCD_WR_DATA8(0x09);
                LCD_WR_DATA8(0x14);
                LCD_WR_DATA8(0x05);
                LCD_WR_DATA8(0x23);
                LCD_WR_DATA8(0x21);
                LCD_WR_DATA8(0x00);

                LCD_WR_REG(0XE1);    //Set Gamma
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x19);
                LCD_WR_DATA8(0x19);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x12);
                LCD_WR_DATA8(0x07);
                LCD_WR_DATA8(0x2D);
                LCD_WR_DATA8(0x28);
                LCD_WR_DATA8(0x3F);
                LCD_WR_DATA8(0x02);
                LCD_WR_DATA8(0x0A);
                LCD_WR_DATA8(0x08);
                LCD_WR_DATA8(0x25);
                LCD_WR_DATA8(0x2D);
                LCD_WR_DATA8(0x0F);

                LCD_WR_REG(0x11);    //Exit Sleep
                delay_ms(120);
                LCD_WR_REG(0x29);    //Display on

                LCD_Clear(WHITE);
}
void LCD_WR_DATA8(char da)
{
        int i;
        LCD_DC=1;
        LCD_CS=0;
        for (i = 0; i < 8; i++) {
                if (da & 0x80) {
                        LCD_SDI=1;
                } else
                        LCD_SDI=0;
                LCD_SCK=0;
                LCD_SCK=1;
                da <<= 1;
        }

        LCD_CS=1;
}
void LCD_WR_DATA(int da)
{
        LCD_WR_DATA8(da >> 8);
        LCD_WR_DATA8(da);

}
void LCD_WR_REG(char da)
{
        int i;
        LCD_DC=0;
        LCD_CS=0;
        for (i = 0; i < 8; i++) {
                if (da & 0x80) {
                        LCD_SDI=1;
                } else
                        LCD_SDI=0;
                LCD_SCK=0;
                LCD_SCK=1;
                da <<= 1;
        }

        LCD_CS=1;
}
void LCD_WR_REG_DATA(int reg,int da)
{
    LCD_WR_REG(reg);
        LCD_WR_DATA(da);
}

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

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10571
金钱
10571
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-3-15 20:03:57 | 显示全部楼层
回复

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1669
金钱
1669
注册时间
2018-1-29
在线时间
160 小时
发表于 2018-3-15 21:12:48 | 显示全部楼层
不懂帮顶。代码写的挺规矩的,不是新手!
还是看看数据手册吧,初始化延时要求,串行输入时序啥的,是不是太快了!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-16 00:43:01 | 显示全部楼层
读ID,能读么?
你这是什么mcu?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-3-15
在线时间
2 小时
 楼主| 发表于 2018-3-16 09:37:42 | 显示全部楼层

谢谢!
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-3-15
在线时间
2 小时
 楼主| 发表于 2018-3-16 09:38:20 | 显示全部楼层
正点原子 发表于 2018-3-16 00:43
读ID,能读么?
你这是什么mcu?

读ID没试,待会试试,我用的MCU是DSP,程序是移植的STM32
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-17 01:42:49 | 显示全部楼层
taoteyi 发表于 2018-3-16 09:38
读ID没试,待会试试,我用的MCU是DSP,程序是移植的STM32

能读ID,才好。不然肯定不行。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-3-15
在线时间
2 小时
 楼主| 发表于 2018-3-19 16:40:22 | 显示全部楼层
正点原子 发表于 2018-3-17 01:42
能读ID,才好。不然肯定不行。

我自己按照时序写了读ID的程序,读不到,不知道是哪方面的原因

int LCD_RD_DATA(void)
{
        int i,data=0;
                LCD_DC=1;
                LCD_CS=0;
                for (i = 7; i >= 0; i--) {

                                        data+=LCD_SDO<<i;
                                        LCD_SCK=0;
                                        LCD_SCK=1;
                }
                LCD_CS=1;
                return data;
        }
void Lcd_Init(void)
{
        int ID;
        LCD_CS =1;
        LCD_REST=1;
                 delay_ms(300);
        LCD_REST=0;
                 delay_ms(500); // delay 20 ms
                   LCD_REST=1;
                 delay_ms(300); // delay 20 ms
        //读取41
                 LCD_WR_REG(0XD3);
                 ID = LCD_RD_DATA();                                 //dummy read
                 ID= LCD_RD_DATA();                       //读到0X00
                 ID=LCD_RD_DATA();           //读取93
                 ID<<=8;
                 ID|=LCD_RD_DATA();

                 LCD_CS=0;
                LCD_WR_REG(0xCF);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0xD9);
                LCD_WR_DATA8(0X30);

                LCD_WR_REG(0xED);
                LCD_WR_DATA8(0x64);
                LCD_WR_DATA8(0x03);
                LCD_WR_DATA8(0X12);
                LCD_WR_DATA8(0X81);

                LCD_WR_REG(0xE8);
                LCD_WR_DATA8(0x85);
                LCD_WR_DATA8(0x10);
                LCD_WR_DATA8(0x78);

                LCD_WR_REG(0xCB);
                LCD_WR_DATA8(0x39);
                LCD_WR_DATA8(0x2C);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x34);
                LCD_WR_DATA8(0x02);

                LCD_WR_REG(0xF7);
                LCD_WR_DATA8(0x20);

                LCD_WR_REG(0xEA);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x00);

                LCD_WR_REG(0xC0);    //Power control
                LCD_WR_DATA8(0x21);   //VRH[5:0]

                LCD_WR_REG(0xC1);    //Power control
                LCD_WR_DATA8(0x12);   //SAP[2:0];BT[3:0]

                LCD_WR_REG(0xC5);    //VCM control
                LCD_WR_DATA8(0x32);
                LCD_WR_DATA8(0x3C);

                LCD_WR_REG(0xC7);    //VCM control2
                LCD_WR_DATA8(0XC1);

                LCD_WR_REG(0x36);    // Memory Access Control
                LCD_WR_DATA8(0x08);

                LCD_WR_REG(0x3A);
                LCD_WR_DATA8(0x55);

                LCD_WR_REG(0xB1);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x18);

                LCD_WR_REG(0xB6);    // Display Function Control
                LCD_WR_DATA8(0x0A);
                LCD_WR_DATA8(0xA2);



                LCD_WR_REG(0xF2);    // 3Gamma Function Disable
                LCD_WR_DATA8(0x00);

                LCD_WR_REG(0x26);    //Gamma curve selected
                LCD_WR_DATA8(0x01);

                LCD_WR_REG(0xE0);    //Set Gamma
                LCD_WR_DATA8(0x0F);
                LCD_WR_DATA8(0x20);
                LCD_WR_DATA8(0x1E);
                LCD_WR_DATA8(0x09);
                LCD_WR_DATA8(0x12);
                LCD_WR_DATA8(0x0B);
                LCD_WR_DATA8(0x50);
                LCD_WR_DATA8(0XBA);
                LCD_WR_DATA8(0x44);
                LCD_WR_DATA8(0x09);
                LCD_WR_DATA8(0x14);
                LCD_WR_DATA8(0x05);
                LCD_WR_DATA8(0x23);
                LCD_WR_DATA8(0x21);
                LCD_WR_DATA8(0x00);

                LCD_WR_REG(0XE1);    //Set Gamma
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x19);
                LCD_WR_DATA8(0x19);
                LCD_WR_DATA8(0x00);
                LCD_WR_DATA8(0x12);
                LCD_WR_DATA8(0x07);
                LCD_WR_DATA8(0x2D);
                LCD_WR_DATA8(0x28);
                LCD_WR_DATA8(0x3F);
                LCD_WR_DATA8(0x02);
                LCD_WR_DATA8(0x0A);
                LCD_WR_DATA8(0x08);
                LCD_WR_DATA8(0x25);
                LCD_WR_DATA8(0x2D);
                LCD_WR_DATA8(0x0F);

                LCD_WR_REG(0x11);    //Exit Sleep
                delay_ms(120);
                LCD_WR_REG(0x29);    //Display on

                LCD_Clear(WHITE);
}
回复

使用道具 举报

2

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2018-3-3
在线时间
7 小时
发表于 2018-3-19 23:35:38 | 显示全部楼层
你找个能用的程序试试看。然后对着人家的程序去改。28335开发板的程序肯定有一大把,你看看人家怎么写的,尤其是屏这种玩意。另外delay(ms)是不是都对。最后检查屏幕排线和虚焊短路。
最轻量的实用RTOS
https://github.com/EDI-Systems/M5P1_MuProkaron
本人QQ 644580703
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-3-20 01:36:36 | 显示全部楼层
taoteyi 发表于 2018-3-19 16:40
我自己按照时序写了读ID的程序,读不到,不知道是哪方面的原因

int LCD_RD_DATA(void)

读不到就慢慢查。先不插液晶,检查接口所有线 是否正常。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-4-27
在线时间
0 小时
发表于 2020-5-6 01:35:03 来自手机 | 显示全部楼层
楼主解决了吗?白屏+1求解决办法
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-9-3
在线时间
6 小时
发表于 2020-5-20 15:38:01 | 显示全部楼层
我的更离谱,硬件spi,刚开始驱动、显示正常,接下来N多天,都是白屏,0x04只能读全ff,0xd3什么也读不到。。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 04:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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