单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16856|回复: 45
收起左侧

stm32驱动ili9486液晶显示屏

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

                   00000000.png
支持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接口相关函数
000000001.png
              接口函数在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, 下载次数: 348)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

beyondsdo 发表于 2015-10-4 14:27 | 显示全部楼层
谢谢分享
回复

使用道具 举报

fengzaideng 发表于 2015-11-16 11:09 | 显示全部楼层
好东西啊,谢谢分享
回复

使用道具 举报

fengzaideng 发表于 2015-11-16 11:12 | 显示全部楼层
好东西,谢谢分享
回复

使用道具 举报

5#
无效楼层,该帖已经被删除
电不死 发表于 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 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

15#
无效楼层,该帖已经被删除
scu319hy 发表于 2017-3-19 17:26 | 显示全部楼层
谢谢楼主~~
回复

使用道具 举报

zhanglu 发表于 2017-3-21 06:36 | 显示全部楼层

 谢谢分享
回复

使用道具 举报

rayu 发表于 2017-3-23 10:39 | 显示全部楼层
谢谢分享,刚好准备移植一下
回复

使用道具 举报

19#
无效楼层,该帖已经被删除
dabing01 发表于 2017-4-30 21:48 | 显示全部楼层

谢谢分享
回复

使用道具 举报

xuzhien 发表于 2017-5-11 09:46 | 显示全部楼层
没币下不了
回复

使用道具 举报

22#
无效楼层,该帖已经被删除
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 | 显示全部楼层
谢谢分享
回复

使用道具 举报

38#
无效楼层,该帖已经被删除
曹瑜 发表于 2018-3-1 16:06 | 显示全部楼层
谢谢分享
回复

使用道具 举报

曹瑜 发表于 2018-3-1 16:06 | 显示全部楼层
谢谢分享
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

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