標題: stm32驅(qū)動ili9486液晶顯示屏 [打印本頁]

作者: echo    時間: 2015-9-2 11:34
標題: stm32驅(qū)動ili9486液晶顯示屏
      這是我接手的第一個小項目,也是第一次我寫的代碼真正排上用場,雖然不超過50行。但遇到的阻礙,我想確實硬件廠商善意的刁難。這個項目最大的收獲是弄清楚我與軟件工程師最大的不同吧!給我職業(yè)生涯上的第一個教訓。下面言歸正傳(驅(qū)動見51hei論壇附件TFT資料)。    (一)ili9486顯示屏簡介
           ili9486支持262144種色彩,有320RGB*480個像素點,內(nèi)部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)與坐標原點相關(guān)的命令:
               1.Display Function Control(B6h)
                  命令主要參數(shù):GS,SM,SS
               2.Memory Access Control (36h)
                  命令主要參數(shù):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)連續(xù)寫
              1.Memory Write Continue (3Ch)
                  要在使用Memory Write (2Ch)后使用此命令,最多能連續(xù)讀取65535個字節(jié)。     

      (三)與uCUI接口相關(guān)函數(shù)

              接口函數(shù)在GUI/LCDDriver文件夾下LCD_Dummy.c以及Config目錄下LCDConfig.h。

              1. LCD_Dummy.c主要是接口相應顯示屏

                  1--void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) 設置像素點,要使用自己的函數(shù)實現(xiàn)設置像素點功能。下面一個簡單的例子:
                 void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)
                {
                   LCD_Setpixel(xPhys, yPhys,PixelIndex);//底層TFT相關(guān)的函數(shù)(可以轉(zhuǎn)換XY的值,達到想要的效果)
                }   

                  2--void LCD_L0_DrawVLine  (int x,  int y0,  int y1)//畫橫線
                  3--void LCD_L0_DrawHLine  (int x0, int y,  int x1)//畫豎線
                  注:這兩個函數(shù),可以不用替換,uCGUI默認情況下給一個坐標,畫一個像素點(速度慢,但準確,無差錯)。如果你覺得你使用自己的函數(shù)更加快速,可進行替換(ili9486有自動移動指針的功能,可以只送一個起始點,然后送數(shù)據(jù),指針會自動加也會自動換行(列),而不用送坐標地址)

                  4--LCD_L0_DrawBitmap(...)//畫位圖
                  5--DrawBitLine16BPP(...)//畫位圖主要功能函數(shù)
                  注:這兩個函數(shù)底層功能函數(shù)與2,3兩個函數(shù)類似,但色彩不同。自行替換時要注意相關(guān)參數(shù)。

              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)     //像素點位數(shù)
              #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--翻轉(zhuǎn)X軸起點
              #define LCD_MIRROR_Y           (0)      //0 If active: Y -> -Y /1--翻轉(zhuǎn)Y軸起點
              #define LCD_SWAP_XY             1        //0  If active: X <->Y/1--調(diào)換XY的值

      (四)FAQ
                1.顯示顏色不對,而圖像輪廓正確
                              1)這個問題最常見的是RB調(diào)換,TFT顯示屏常見的像素格式為BGR(5,6,5),而一般的windows的格式為RGB(5,6,5),這個問題只要轉(zhuǎn)換Memory Access Control(36h)命令BGR參數(shù)即可。
                               2)第二個可能原因是由于高低字節(jié)的問題,這款ili9486的顯示屏為低字節(jié)在前,高字節(jié)在后,可以在送數(shù)據(jù)到顯示屏之前將數(shù)據(jù)轉(zhuǎn)換一下。
                               3)如果以上步驟沒有將顏色的問題解決,考慮顯示屏質(zhì)量問題或者屏幕焊接問題(換塊顯示屏試試)。

                 2.背景圖顯示不正確,沒有完整的圖像
                               1)這個問題主要是取圖像大小時出錯,如果要鋪滿整個屏幕的話,圖像一定要與顯示屏規(guī)格相同,例如:ili9486是320*480,所以你的圖像大小也要為320*480或者橫屏480*320,不能多也不能少,否則不會正確顯示圖像。

                 3.圖像無法整屏顯示,或者是整屏顯示需要更多的像素點
                               1)這個問題很有可能是總線模式選擇錯誤,ili9486支持多種縱向模式8、9、16、18以及3/4SPI等等,總線模式取決于IM[2:0]的選擇,詳細內(nèi)容請參考相關(guān)數(shù)據(jù)手冊。
                               2)還有一個可能是數(shù)據(jù)在傳輸?shù)倪^程中丟失了(因為傳輸速度過快/頻率太高),可以每傳送一次數(shù)據(jù),延時一段時間,觀察有沒有出現(xiàn)漏點的情況(對比色要鮮明),或者調(diào)整頻率,讓送數(shù)據(jù)的速度變慢些(不太建議這樣做,因為頻率low,可能導致其他問題出現(xiàn),頻率high也是)。

                 4.屏幕總是白屏,而無法顯示其他內(nèi)容
                                1)這問題最有可能是因為屏幕的顯示模式不正確,極有可能處在idle模式下,加入命令0x0011(退出idle模式,進入normal模式)可解決。

                 5. 顏色抖動現(xiàn)象
                                1)這個問題最有可能的是電路上的問題,可以嘗試重新焊接一下。

       (五)測試
                 1.顏色測試:讓顯示屏顯示出三原色的三種純色,三種顏色正確,基本不會出現(xiàn)顏色問題,若出現(xiàn)顏色問題,考慮硬件上的問題。

                 2.刷屏測試:用320*480個像素點刷屏,如果能鋪滿整屏,總線模式正確。反之模式不正確。


注意:
3.5_TFT彩色LCD模塊 驅(qū)動芯片型號為SSD2119

3.2_TFT彩色LCD模塊 驅(qū)動芯片型號為ILI9320

2.8_TFT彩色LCD模塊 驅(qū)動芯片型號為ST7781、ILI9325、ILI9328、或ILI9331。具體是哪種控制芯片可以在UCGUI程序里初始化LCD程序的讀ID函數(shù)里下個斷點即可看到器件ID號。

驅(qū)動程序全兼容這些控制芯片,要想詳細了解控制芯片請查看目錄下的對應芯片數(shù)據(jù)手冊,ILI9328的數(shù)據(jù)手冊請參考ILI9325的。兩個是一樣的,只是讀到的ID不一樣,驅(qū)動程序也是相同的。

SSD2119    讀到的ID為        0x9919
ILI9320    讀到的ID為        0x9320
ILI9325    讀到的ID為        0x9325
ILI9328    讀到的ID為        0x9328
ILI9331    讀到的ID為        0x9331
ST7781     讀到的ID為        0x7783
LGDP4531   讀到的ID為        0x4531
用戶可以自己提取對應驅(qū)動芯片的初始化文件用到自己的工程中。

TFT相關(guān)資料,包含多種液晶屏幕驅(qū)動及說明文檔 --TFT.zip (13.43 MB, 下載次數(shù): 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
你好,我想買一款I(lǐng)LI9488 LCD的顯示驅(qū)動板,你手上的板可以改成驅(qū)動ILI9488的板嗎,請聯(lián)系我 謝謝 18802616496 劉
作者: zph    時間: 2018-7-17 18:27
非常有用,謝謝
作者: zph    時間: 2018-7-17 18:29
這兩天在調(diào)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.torrancerestoration.com/bbs/) Powered by Discuz! X3.1