标题: stm32驱动ili9486液晶显示屏 [打印本页]

作者: echo    时间: 2015-9-2 11:34
标题: stm32驱动ili9486液晶显示屏
      这是我接手的第一个小项目,也是第一次我写的代码真正排上用场,虽然不超过50行。但遇到的阻碍,我想确实硬件厂商善意的刁难。这个项目最大的收获是弄清楚我与软件工程师最大的不同吧!给我职业生涯上的第一个教训。下面言归正传(驱动见51hei论坛附件TFT资料)。    (一)ili9486显示屏简介
           ili9486支持262144种色彩,有320RGB*480个像素点,内部GRAM345600Bytres(320*480*18bit),有全彩(262K_colors,65K_colors)和idle(8_colors)两种显示模式,支持8种总线,用IM2,IM1,IM0决定,见下图        

                  
支持16bit-RGB(5,6,5)和18bit-RGB(6,6,6)两种色彩格式,也用单一纯色格式(in idle mode)。

    (二)常用命令
          显示屏的需求,最多的还是在怎样满足我们的显示要求,比如横屏,竖屏,颜色格式,刷屏速度等等。这里只稍微讲一下在此次项目中用到的命令,慢慢补充。
          1)与坐标原点相关的命令:
               1.Display Function Control(B6h)
                  命令主要参数:GS,SM,SS
               2.Memory Access Control (36h)
                  命令主要参数:MX,MY,MV,BGR(色彩模式RGB or GBR),MH,ML

         2)设置指针位置
              1.Set Page Address (2Bh)
                 设置指针X起点, 默认情况为0~13F(B5= 0),受36h的第五位(B5)影响0~1DF(B5 = 1)

              2.Set Column Address (2Ah)
                  设置指针Y起点, 默认情况为0~1DF(B5= 0),受36h的第五位(B5)影响0~13F(B5 = 1)

         3)设置像素格式
              1. Interface Pixel Format(3Ah)
                 设置是16bit或则18bit的像素。DPI设置接口像素格式,DBI设置CPU像素格式

         4)连续写
              1.Memory Write Continue (3Ch)
                  要在使用Memory Write (2Ch)后使用此命令,最多能连续读取65535个字节。     

      (三)与uCUI接口相关函数

              接口函数在GUI/LCDDriver文件夹下LCD_Dummy.c以及Config目录下LCDConfig.h。

              1. LCD_Dummy.c主要是接口相应显示屏

                  1--void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) 设置像素点,要使用自己的函数实现设置像素点功能。下面一个简单的例子:
                 void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)
                {
                   LCD_Setpixel(xPhys, yPhys,PixelIndex);//底层TFT相关的函数(可以转换XY的值,达到想要的效果)
                }   

                  2--void LCD_L0_DrawVLine  (int x,  int y0,  int y1)//画横线
                  3--void LCD_L0_DrawHLine  (int x0, int y,  int x1)//画竖线
                  注:这两个函数,可以不用替换,uCGUI默认情况下给一个坐标,画一个像素点(速度慢,但准确,无差错)。如果你觉得你使用自己的函数更加快速,可进行替换(ili9486有自动移动指针的功能,可以只送一个起始点,然后送数据,指针会自动加也会自动换行(列),而不用送坐标地址)

                  4--LCD_L0_DrawBitmap(...)//画位图
                  5--DrawBitLine16BPP(...)//画位图主要功能函数
                  注:这两个函数底层功能函数与2,3两个函数类似,但色彩不同。自行替换时要注意相关参数。

              2.LCDConfig.h需修改如下项

              #define LCD_XSIZE                 (480)   /* X-resolution of LCD, Logical coor. */
              #define LCD_YSIZE                  (350)   /* Y- resolution of LCD, Logical coor. */
              #define LCD_BITSPERPIXEL      (16)     //像素点位数
              #define LCD_CONTROLLER       -1        // -1表示不在GUI_Init()里面初始化显示屏
              #define LCD_SWAP_RB             1        // 1--BGR 0--RGB
              #define LCD_MIRROR_X           (1)      //0 If active: X ->-X /1--翻转X轴起点
              #define LCD_MIRROR_Y           (0)      //0 If active: Y -> -Y /1--翻转Y轴起点
              #define LCD_SWAP_XY             1        //0  If active: X <->Y/1--调换XY的值

      (四)FAQ
                1.显示颜色不对,而图像轮廓正确
                              1)这个问题最常见的是RB调换,TFT显示屏常见的像素格式为BGR(5,6,5),而一般的windows的格式为RGB(5,6,5),这个问题只要转换Memory Access Control(36h)命令BGR参数即可。
                               2)第二个可能原因是由于高低字节的问题,这款ili9486的显示屏为低字节在前,高字节在后,可以在送数据到显示屏之前将数据转换一下。
                               3)如果以上步骤没有将颜色的问题解决,考虑显示屏质量问题或者屏幕焊接问题(换块显示屏试试)。

                 2.背景图显示不正确,没有完整的图像
                               1)这个问题主要是取图像大小时出错,如果要铺满整个屏幕的话,图像一定要与显示屏规格相同,例如:ili9486是320*480,所以你的图像大小也要为320*480或者横屏480*320,不能多也不能少,否则不会正确显示图像。

                 3.图像无法整屏显示,或者是整屏显示需要更多的像素点
                               1)这个问题很有可能是总线模式选择错误,ili9486支持多种纵向模式8、9、16、18以及3/4SPI等等,总线模式取决于IM[2:0]的选择,详细内容请参考相关数据手册。
                               2)还有一个可能是数据在传输的过程中丢失了(因为传输速度过快/频率太高),可以每传送一次数据,延时一段时间,观察有没有出现漏点的情况(对比色要鲜明),或者调整频率,让送数据的速度变慢些(不太建议这样做,因为频率low,可能导致其他问题出现,频率high也是)。

                 4.屏幕总是白屏,而无法显示其他内容
                                1)这问题最有可能是因为屏幕的显示模式不正确,极有可能处在idle模式下,加入命令0x0011(退出idle模式,进入normal模式)可解决。

                 5. 颜色抖动现象
                                1)这个问题最有可能的是电路上的问题,可以尝试重新焊接一下。

       (五)测试
                 1.颜色测试:让显示屏显示出三原色的三种纯色,三种颜色正确,基本不会出现颜色问题,若出现颜色问题,考虑硬件上的问题。

                 2.刷屏测试:用320*480个像素点刷屏,如果能铺满整屏,总线模式正确。反之模式不正确。


注意:
3.5_TFT彩色LCD模块 驱动芯片型号为SSD2119

3.2_TFT彩色LCD模块 驱动芯片型号为ILI9320

2.8_TFT彩色LCD模块 驱动芯片型号为ST7781、ILI9325、ILI9328、或ILI9331。具体是哪种控制芯片可以在UCGUI程序里初始化LCD程序的读ID函数里下个断点即可看到器件ID号。

驱动程序全兼容这些控制芯片,要想详细了解控制芯片请查看目录下的对应芯片数据手册,ILI9328的数据手册请参考ILI9325的。两个是一样的,只是读到的ID不一样,驱动程序也是相同的。

SSD2119    读到的ID为        0x9919
ILI9320    读到的ID为        0x9320
ILI9325    读到的ID为        0x9325
ILI9328    读到的ID为        0x9328
ILI9331    读到的ID为        0x9331
ST7781     读到的ID为        0x7783
LGDP4531   读到的ID为        0x4531
用户可以自己提取对应驱动芯片的初始化文件用到自己的工程中。

TFT相关资料,包含多种液晶屏幕驱动及说明文档 --TFT.zip (13.43 MB, 下载次数: 620)





作者: beyondsdo    时间: 2015-10-4 14:27
谢谢分享

作者: fengzaideng    时间: 2015-11-16 11:09
好东西啊,谢谢分享
作者: fengzaideng    时间: 2015-11-16 11:12
好东西,谢谢分享
作者: 电不死    时间: 2016-4-28 16:43
谢谢分享
作者: lychee_fly    时间: 2016-5-31 23:55
谢谢分享
作者: 马千程    时间: 2016-8-7 14:06
谢谢分享
作者: st547687    时间: 2016-8-29 22:14
谢谢楼主分享
作者: lzydtj    时间: 2016-9-29 10:40
好东西,来者不拒。谢了!
作者: bg2ixd    时间: 2016-10-5 10:05
谢谢分享
作者: temp4321    时间: 2016-12-21 10:40
好东西,要的分太多了。下不了。
作者: 568301170    时间: 2017-2-1 15:09
感谢分享!!!!
作者: 164443200    时间: 2017-3-4 13:05
谢谢分享!
作者: scu319hy    时间: 2017-3-19 17:26
谢谢楼主~~
作者: zhanglu    时间: 2017-3-21 06:36

 谢谢分享
作者: rayu    时间: 2017-3-23 10:39
谢谢分享,刚好准备移植一下
作者: dabing01    时间: 2017-4-30 21:48

谢谢分享
作者: xuzhien    时间: 2017-5-11 09:46
没币下不了
作者: xuzhien    时间: 2017-6-1 11:35
谢谢分亨
作者: 九牛座    时间: 2017-6-12 09:13
好资料,下下来学习参考
作者: ljhtj    时间: 2017-6-13 10:49
谢谢,好资料
作者: hangmw    时间: 2017-6-13 15:04
谢谢楼主分享
作者: huanghongqi11    时间: 2017-8-7 20:09
谢谢分享
作者: huanghongqi11    时间: 2017-8-8 10:01
谢谢分享
作者: yuanyuan1029    时间: 2017-8-8 10:28
那位大师收徒弟啊,想学arm
作者: hnwangkg_ezio    时间: 2017-8-10 09:34
谢谢分享
作者: hnwangkg_ezio    时间: 2017-8-10 09:36
谢谢分享

作者: 独自酒醉    时间: 2017-8-18 19:31
好东西啊,谢谢分享
作者: 无声默片    时间: 2017-9-25 17:24
有没有ILI9486的通信模块啊,求分享
作者: 山峡    时间: 2017-10-9 15:29
好东西,但下载不了,咋办呀?
作者: wolff2017    时间: 2017-10-27 17:26
不错的东东,正须要,目前在用ILI9488 .
作者: xxxevery    时间: 2017-11-2 16:26
谢谢分享,楼主做的不错
作者: kaishuiping1314    时间: 2017-11-9 19:50
谢谢分享
作者: 曹瑜    时间: 2018-3-1 16:06
谢谢分享

作者: 曹瑜    时间: 2018-3-1 16:06
谢谢分享
作者: plmm1988    时间: 2018-6-23 14:55
谢谢分享
作者: plmm1988    时间: 2018-6-23 14:56
目前在用ILI9488 .但下载不了呀
作者: zz121x    时间: 2018-7-2 11:37
这两天再搞这个3.5寸屏,感谢分享
作者: sdwenyliu    时间: 2018-7-6 14:52
你好,我想买一款ILI9488 LCD的显示驱动板,你手上的板可以改成驱动ILI9488的板吗,请联系我 谢谢 18802616496 刘
作者: zph    时间: 2018-7-17 18:27
非常有用,谢谢
作者: zph    时间: 2018-7-17 18:29
这两天在调3.5寸屏,位置不对,感谢分享
作者: wdliming    时间: 2018-10-18 12:35
谢谢分享,学习学习。
作者: denjackson    时间: 2018-10-19 09:30
积分不够啊,好东西
作者: honrun    时间: 2018-11-11 20:48
这个正是我想要的,谢谢无私分享。
作者: leo46    时间: 2019-3-5 21:54
very good
作者: bwginfo    时间: 2019-3-6 06:04
www点四shared点com/folder/3OWezCBC/PZ6806D_LCD_ILI9486.html
作者: jopk123    时间: 2019-10-8 17:58

非常有用,谢谢分享
作者: bianpin    时间: 2020-5-5 11:03
正好在找资料,好东西啊,谢谢分享。
作者: tazzf    时间: 2023-9-22 21:11
谢谢啊,正好参考使用。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1